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中from module import * 的一个坑
Jul 20 Python
python处理文本文件实现生成指定格式文件的方法
Jul 31 Python
基于scrapy实现的简单蜘蛛采集程序
Apr 17 Python
python多进程和多线程究竟谁更快(详解)
May 29 Python
Python批量查询域名是否被注册过
Jun 21 Python
python利用MethodType绑定方法到类示例代码
Aug 27 Python
对python列表里的字典元素去重方法详解
Jan 21 Python
python实现Virginia无密钥解密
Mar 20 Python
Python button选取本地图片并显示的实例
Jun 13 Python
解决yum对python依赖版本问题
Jul 05 Python
Python tkinter实现图片标注功能(完整代码)
Dec 08 Python
Matplotlib使用字符串代替变量绘制散点图的方法
Feb 17 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 echo 输出字符串函数详解
2010/05/13 PHP
SESSION存放在数据库用法实例
2015/08/08 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
详解PHP对数组的定义以及数组的创建方法
2015/11/27 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
翻译整理的jQuery使用查询手册
2007/03/07 Javascript
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
js实现Form栏显示全格式时间时钟效果代码
2015/08/19 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
angular route中使用resolve在uglify压缩后问题解决
2016/09/21 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
2016/12/12 Javascript
jQuery实现的简单悬浮层功能完整实例
2017/01/23 Javascript
ajax请求data遇到的问题分析
2018/01/18 Javascript
node.js基础知识小结
2018/02/26 Javascript
vue 路由嵌套高亮问题的解决方法
2018/05/17 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
2019/07/24 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
python查询sqlite数据表的方法
2015/05/08 Python
python基于xmlrpc实现二进制文件传输的方法
2015/06/02 Python
Python模拟登陆实现代码
2017/06/14 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
python去除拼音声调字母,替换为字母的方法
2018/11/28 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
2020/03/10 Python
Python新手学习raise用法
2020/06/03 Python
使用python操作lmdb对数据读取的实例
2020/12/11 Python
学生周末回家住宿长期请假条
2014/02/15 职场文书
父母对孩子的寄语
2014/04/09 职场文书
结对共建协议书
2014/08/20 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
2015年小学重阳节活动总结
2015/07/29 职场文书
原生JS封装vue Tab切换效果
2021/04/28 Vue.js
详解TypeScript中的类型保护
2021/04/29 Javascript