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中time模块与datetime模块在使用中的不同之处
Nov 24 Python
Numpy数据类型转换astype,dtype的方法
Jun 09 Python
Python3转换html到pdf的不同解决方案
Mar 11 Python
python requests更换代理适用于IP频率限制的方法
Aug 21 Python
django创建简单的页面响应实例教程
Sep 06 Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 Python
关于python中plt.hist参数的使用详解
Nov 28 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
Apr 17 Python
python cv2.resize函数high和width注意事项说明
Jul 05 Python
Python多分支if语句的使用
Sep 03 Python
MoviePy简介及Python视频剪辑自动化
Dec 18 Python
Python获取江苏疫情实时数据及爬虫分析
Aug 02 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
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
2013/07/02 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
Yii 框架使用Forms操作详解
2020/05/18 PHP
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
javascript中match函数的用法小结
2014/02/08 Javascript
jquery专业的导航菜单特效代码分享
2015/08/29 Javascript
JS控制伪元素的方法汇总
2016/04/06 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
2016/06/15 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
AngularJS ng-blur 指令详解及简单实例
2016/07/30 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
js CSS3实现卡牌旋转切换效果
2017/07/04 Javascript
日期时间范围选择插件:daterangepicker使用总结(必看篇)
2017/09/14 Javascript
基于nodejs res.end和res.send的区别
2018/05/14 NodeJs
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
python使用xlrd和xlwt读写Excel文件的实例代码
2018/09/05 Python
我喜欢你 抖音表白程序python版
2019/04/07 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
使用py-spy解决scrapy卡死的问题方法
2020/09/29 Python
关于递归的一道.NET面试题
2013/05/12 面试题
儿科主治医生个人求职信
2013/09/23 职场文书
物流仓储实习自我鉴定
2013/09/25 职场文书
元旦晚会策划方案
2014/02/18 职场文书
2014年保卫部工作总结
2014/11/21 职场文书
2015国庆66周年宣传语
2015/07/14 职场文书
2016初一新生军训心得体会
2016/01/11 职场文书
2019年公司卫生管理制度样本
2019/08/21 职场文书
Django实现WebSocket在线聊天室功能(channels库)
2021/09/25 Python
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技
nginx静态资源的服务器配置方法
2022/07/07 Servers