本文主要是介绍python对视频截帧的俩个方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
python读取视频流提取视频帧的方法
注意事项(路径尽量全部英文,不然很可能会耽误很多时间)
-
安装环境:
pip install imageiopip install skimage
这时候会报错:
Please install the scikit-image
package (instead of skimage
)
所以按照提示操作即可:
pip install scikit-image
环境安装成功。
2、cv2模块安装,刚开始看到别人写的import cv2 以为是需要安装pip install cv2(尴尬。。。结果是 pip install opencv-python)
pip install opencv-python
3、视频截帧代码
方法一:
使用imageio库提取视频帧
imageio官方文档地址:http://imageio.readthedocs.io/en/latest/examples.html
# coding:utf-8
import imageio
import pylab
# 注释的代码执行一次就好,以后都会默认下载完成# imageio.plugins.ffmpeg.download()# 视频的绝对路径filename =r'e:\video\159725149.mp4'# 可以选择解码工具# print(filename)# vid = imageio.get_reader(uri=filename, format='ffmpeg')vid = imageio.get_reader(filename ,'ffmpeg')print(type(vid),len(vid))try:# 这个地方需要加个异常处理,我也不知道什么原因,用imageio读取的视频总是最后俩帧是无法读取,用俩个视频测试都是如此,就加个异常,忽略最后俩帧就可以了。for num, im in enumerate(vid):print(num)if (num % 101) == 0:imageio.imwrite('E:\save_photo_from_video\{}.jpg'.format(num // 101), im)except imageio.core.format.CannotReadFrameError or RuntimeError:pass# for num, im in enumerate(vid):# print(num)# if (num % 101) == 0:# imageio.imwrite('E:\save_photo_from_video\{}.jpg'.format(num // 101), im)
方法二:
需要安装opencv-python,也就是导入cv2模块。
''' pip install opencv-python'''
用法:
#!usr/bin/pythonimport cv2# 需要安装opencv-python''' pip install opencv-python'''# 读入视频文件vc = cv2.VideoCapture(r'D:\zjf_workspace\000爬虫代码-基础的\scrapy_100_工具\视频处理\mp4\55563878.mp4')c = 1if vc.isOpened():# 判断是否正常打开real, frame = vc.read()# print(real)else:real = FalsetimeF = 100# 视频帧计数间隔频率while real:real, frame = vc.read()# print(real, frame)if (c % timeF == 0):# 每隔timeF帧进行储存为图像,(注意保存地址必须全部为英文和数字,不能含有中文或者中文字符,我这个错误就是刚开始不知道是地址中文原因,找了好久。)cv2.imwrite(r'E:\save_photo_from_video' + '\\' + str(c // timeF) + '.jpg', frame)c += 1cv2.waitKey(1)vc.release()
参考文章:
https://blog.csdn.net/NFMSR/article/details/78559930
https://blog.csdn.net/xinxing__8185/article/details/48440133
这篇关于python对视频截帧的俩个方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!