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开发中range()函数用法实例分析
Nov 12 Python
Python实现的朴素贝叶斯分类器示例
Jan 06 Python
使用python实现链表操作
Jan 26 Python
利用python实现周期财务统计可视化
Aug 25 Python
用python实现英文字母和相应序数转换的方法
Sep 18 Python
详解在python操作数据库中游标的使用方法
Nov 12 Python
python使用ctypes调用扩展模块的实例方法
Jan 28 Python
python实现logistic分类算法代码
Feb 28 Python
Keras自定义实现带masking的meanpooling层方式
Jun 16 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
Sep 03 Python
python日志通过不同的等级打印不同的颜色(示例代码)
Jan 13 Python
Python网络编程之ZeroMQ知识总结
Apr 25 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
萌王史莱姆”萌王性别尴尬!那“萌战”归女组还是男?
2018/12/17 日漫
PHP基础陷阱题(变量赋值)
2012/09/12 PHP
深入分析php之面向对象
2013/05/15 PHP
CodeIgniter启用缓存和清除缓存的方法
2014/06/12 PHP
destoon数据库表说明汇总
2014/07/15 PHP
PHP图片添加水印功能示例小结
2016/10/03 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
2017/02/04 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
浅谈jQuery中setInterval()方法
2015/07/07 Javascript
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
jquery获取复选框checkbox的值的简单实现方法
2016/05/26 Javascript
js学使用setTimeout实现轮循动画
2017/07/17 Javascript
基于vue-cli3+typescript的tsx开发模板搭建过程分享
2020/02/28 Javascript
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
2020/09/04 Javascript
[03:26]《DAC最前线》之EG经理自述DOTA2经历
2015/02/02 DOTA
python单链表实现代码实例
2013/11/21 Python
在Python的Django框架中包装视图函数
2015/07/20 Python
numpy中矩阵合并的实例
2018/06/15 Python
解决tensorflow模型参数保存和加载的问题
2018/07/26 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2018/08/22 Python
python装饰器简介---这一篇也许就够了(推荐)
2019/04/01 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
2019/06/25 Python
使用python模拟命令行终端的示例
2019/08/13 Python
Python getattr()函数使用方法代码实例
2020/08/10 Python
Python爬虫教程之利用正则表达式匹配网页内容
2020/12/08 Python
10个很棒的 CSS3 开发工具 推荐
2011/05/16 HTML / CSS
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
基层党建工作宣传标语
2014/06/24 职场文书
2014年酒店服务员工作总结
2014/12/08 职场文书
研究生学习计划书应该怎么写?
2019/09/10 职场文书
SQL中的三种去重方法小结
2021/11/01 SQL Server
vue ref如何获取子组件属性值
2022/03/31 Vue.js