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中使用中文的方法
Feb 19 Python
在Python中使用异步Socket编程性能测试
Jun 25 Python
python定时器(Timer)用法简单实例
Jun 04 Python
火车票抢票python代码公开揭秘!
Mar 08 Python
Python下使用Scrapy爬取网页内容的实例
May 21 Python
python实现textrank关键词提取
Jun 22 Python
Python数据类型之String字符串实例详解
May 08 Python
python 读取修改pcap包的例子
Jul 23 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
Sep 29 Python
pytorch中获取模型input/output shape实例
Dec 30 Python
python实现数字炸弹游戏程序
Jul 17 Python
Python实例教程之检索输出月份日历表
Dec 16 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实现将GB编码转换为UTF8
2006/11/25 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
学习php设计模式 php实现合成模式(composite)
2015/12/08 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
2015/12/28 PHP
深入讲解PHP的Yii框架中的属性(Property)
2016/03/18 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
2016/06/13 PHP
详解PHP中的 input属性(隐藏 只读 限制)
2017/08/14 PHP
用cssText批量修改样式
2009/08/29 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
vue中路由参数传递可能会遇到的坑
2017/12/07 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
微信小程序提取公用函数到util.js及使用方法示例
2019/01/10 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
[02:51]2018年度DOTA2最佳中单位选手-完美盛典
2018/12/17 DOTA
在Python中用split()方法分割字符串的使用介绍
2015/05/20 Python
Python 转义字符详细介绍
2017/03/21 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
Python实现图片尺寸缩放脚本
2018/03/10 Python
如何用C代码给Python写扩展库(Cython)
2019/05/17 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
Python基于requests实现模拟上传文件
2020/04/21 Python
python seaborn heatmap可视化相关性矩阵实例
2020/06/03 Python
浅谈对python中if、elif、else的误解
2020/08/20 Python
Python实现中英文全文搜索的示例
2020/12/04 Python
Python使用pyenv实现多环境管理
2021/02/05 Python
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
老公给老婆的道歉信
2014/01/10 职场文书
机械设计及其自动化专业求职信
2014/06/09 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
民事上诉状范文
2015/05/22 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
详细介绍python类及类的用法
2021/05/31 Python
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP