python tools实现视频的每一帧提取并保存


Posted in Python onMarch 20, 2020

Preface

最近在做 video caption 相关,要处理大量视频。

今天碰到一个问题,就是要将 YoutubeClips 数据集 中的 avi 格式的视频,将其视频中的每一帧提取出来。之后用 High accuracy optical flow estimation based on a theory for warping 提出的 Optical Flow(光流),提取运动的光流特征。

Method 1

方法 1 是最简单的,用 FFmpeg 工具来完成。

具体的网上有很多这方面的资料,本人只是简单了解了一下如何使用。如下图,有一个名为 ffmpeg_test.avi 的视频:

python tools实现视频的每一帧提取并保存

在当前目录打开终端,输入如下命令:

$ffmpeg -i ffmpeg_test.avi frames_%03d.jpg -hide_banner

以上我没有指定太多的参数,实际上有很多参数可以指定,如起止的时间,几秒钟取一帧等等。

输入即可获得每一帧。

Method 2

下面就是可以用 cv2 模块中的 VideoCapture、VideoWriter 来提取了,具体代码如下:

#! encoding: UTF-8

import os

import cv2
import cv

videos_src_path = '/home/ou-lc/chenxp/Downloads/Youtube/youtube_select'
videos_save_path = '/home/ou-lc/chenxp/Downloads/Youtube/youtube_frames'

videos = os.listdir(videos_src_path)
videos = filter(lambda x: x.endswith('avi'), videos)

for each_video in videos:
 print each_video

 # get the name of each video, and make the directory to save frames
 each_video_name, _ = each_video.split('.')
 os.mkdir(videos_save_path + '/' + each_video_name) 

 each_video_save_full_path = os.path.join(videos_save_path, each_video_name) + '/'

 # get the full path of each video, which will open the video tp extract frames
 each_video_full_path = os.path.join(videos_src_path, each_video)

 cap = cv2.VideoCapture(each_video_full_path)
 frame_count = 1
 success = True
 while(success):
 success, frame = cap.read()
 print 'Read a new frame: ', success

 params = []
 params.append(cv.CV_IMWRITE_PXM_BINARY)
 params.append(1)
 cv2.imwrite(each_video_save_full_path + each_video_name + "_%d.ppm" % frame_count, frame, params)

 frame_count = frame_count + 1

cap.release()

在最后,我将每一帧保存为 PPM 格式。因为我需要调用之前的 optical flow 论文中的 of 程序,来提取 optical flow image(光流图)。

保存时,根据 opencv 的 Doc:OpenCV 2.4.9 cv2.imwrite,其参数的指定方式如上。一开始在这里跌了好几个跟头,因为不知道如何将参数正确的指定。

Reference

http://stackoverflow.com/questions/33311153/python-extracting-and-saving-video-frames
http://stackoverflow.com/questions/12216333/opencv-imread-imwrite-increases-the-size-of-png

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中itertools模块用法详解
Sep 25 Python
python使用htmllib分析网页内容的方法
May 08 Python
Python查询阿里巴巴关键字排名的方法
Jul 08 Python
Python自动扫雷实现方法
Jul 25 Python
Python算术运算符实例详解
May 31 Python
python GUI实例学习
Nov 21 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
Feb 21 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
python使用Matplotlib画条形图
Mar 25 Python
Python操作Mongodb数据库的方法小结
Sep 10 Python
python画蝴蝶曲线图的实例
Nov 21 Python
Python selenium的这三种等待方式一定要会!
Jun 10 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
May 31 #Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
May 31 #Python
Python可变和不可变、类的私有属性实例分析
May 31 #Python
python实现批量视频分帧、保存视频帧
May 31 #Python
Python内置random模块生成随机数的方法
May 31 #Python
Python模块、包(Package)概念与用法分析
May 31 #Python
python多线程下信号处理程序示例
May 31 #Python
You might like
德生PL330的评价与改造
2021/03/02 无线电
基于mysql的论坛(6)
2006/10/09 PHP
深入解析yii权限分级式访问控制的实现(非RBAC法)
2013/06/13 PHP
分享自定义的几个PHP功能函数
2015/04/15 PHP
详细解读PHP中接口的应用
2015/08/12 PHP
用javascript实现无刷新更新数据的详细步骤 asp
2006/12/26 Javascript
jQuery中的read和JavaScript中的onload函数的区别
2014/08/27 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
JavaScript 消息框效果【实现代码】
2016/04/27 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
深入nodejs中流(stream)的理解
2017/03/27 NodeJs
js中变量的连续赋值(实例讲解)
2017/07/08 Javascript
js学习总结_选项卡封装(实例讲解)
2017/07/13 Javascript
JS实现的input选择图片本地预览功能示例
2018/08/29 Javascript
vue弹窗插件实战代码
2018/09/08 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
Python中使用glob和rmtree删除目录子目录及所有文件的例子
2014/11/21 Python
python实现多线程的两种方式
2016/05/22 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
python-itchat 统计微信群、好友数量,及原始消息数据的实例
2019/02/21 Python
pandas实现to_sql将DataFrame保存到数据库中
2019/07/03 Python
Python2与Python3的区别点整理
2019/12/12 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
2021/01/05 Python
Stubhub英国:购买体育、演唱会和剧院门票
2018/06/10 全球购物
前台接待的工作职责
2013/11/21 职场文书
美德好少年主要事迹
2014/01/29 职场文书
学校消防安全制度
2014/01/30 职场文书
《颐和园》教学反思
2014/02/26 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
2014年大学班长工作总结
2014/11/14 职场文书
python代码实现备忘录案例讲解
2021/07/26 Python
Redis Stream类型的使用详解
2021/11/11 Redis