Python imageio读取视频并进行编解码详解


Posted in Python onDecember 10, 2019

读视频和写视频一直由于编解码的问题给程序员造成很多麻烦。对此进行了一些探索。用Python读取视频有两种主要方法,分别是基于imageio库和OpenCV,其中OpenCV加上ffmpeg的安装编译很麻烦,推荐大家使用第一种方法,不过大家也可依据自己的需求进行使用。

方法一:使用imageio库

1. 一般imageio库Anconda自带的有,不用我们单独安装,没有安装的可用pip安装或自己下载。

imageio使用方法可参考:http://imageio.readthedocs.io/en/latest/examples.html。

下面是一段使用imageio对视频进行灰度处理的测试代码。

# 将彩色视频转为灰度视频
import imageio
 
reader = imageio.get_reader('imageio:cockatoo.mp4')
fps = reader.get_meta_data()['fps']
 
writer = imageio.get_writer('~/cockatoo_gray.mp4', fps=fps)
 
for im in reader:
 writer.append_data(im[:, :, 1])
writer.close()

2.一般你没有按照ffmpeg,直接运行会提示如下所示的要安装ffmpeg,使用conda安装即可。另一个编解码器包含比较全的编译包是https://www.johnvansickle.com/ffmpeg/

imageio.core.fetching.NeedDownloadError: Need ffmpeg exe. You can obtain it with either:
 - install using conda: conda install ffmpeg -c conda-forge
 - download by calling: imageio.plugins.ffmpeg.download()

所以按照提示运行如下命令安装conda-forge编译好的ffmpeg即可,conda-forge编译的ffmpeg视频编解码库都很齐全,可以直接对视频读存取。

conda install ffmpeg -c conda-forge

PS:小技巧,如果conda安装国外软件包速度很慢的话,可以给conda添加清华大学的镜像源,依次运行下面几条命令就可以了,安装速度一般几M/s.具体可参考https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --set show_channel_urls yes

方法二:使用OpenCV和ffmpeg

安装较复杂,需编译很多库,自己查找参考相关方法。

下面是使用OpenCV读取视频的方法:

import cv2 
 
cap = cv2.VideoCapture('/path/to/your/video.mp4') 
 
while(cap.isOpened()): 
 ret, frame = cap.read() 
 cv2.imshow('image', frame) 
 k = cv2.waitKey(20) 
 #q键退出
 if (k & 0xff == ord('q')): 
  break 
 
cap.release() 
cv2.destroyAllWindows()

以上这篇Python imageio读取视频并进行编解码详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python类装饰器用法实例
Jun 04 Python
Python中pip更新和三方插件安装说明
Jul 08 Python
Python找出微信上删除你好友的人脚本写法
Nov 01 Python
Python3 Post登录并且保存cookie登录其他页面的方法
Dec 28 Python
python IDLE 背景以及字体大小的修改方法
Jul 12 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
学Python 3的理由和必要性
Nov 19 Python
如何解决tensorflow恢复模型的特定值时出错
Feb 06 Python
pycharm安装及如何导入numpy
Apr 03 Python
python查看矩阵的行列号以及维数方式
May 22 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
Jun 08 Python
使用Python画了一棵圣诞树的实例代码
Nov 27 Python
Python中Subprocess的不同函数解析
Dec 10 #Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
Dec 10 #Python
python 视频逐帧保存为图片的完整实例
Dec 10 #Python
python 实现视频 图像帧提取
Dec 10 #Python
python-视频分帧&多帧合成视频实例
Dec 10 #Python
python实现视频读取和转化图片
Dec 10 #Python
sklearn-SVC实现与类参数详解
Dec 10 #Python
You might like
PHP操作文件的一些基本函数使用示例
2014/11/18 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
2015/01/13 PHP
php实现从上传文件创建缩略图的方法
2015/04/02 PHP
php中Ioc(控制反转)和Di(依赖注入)
2017/05/07 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
用js模拟JQuery的show与hide动画函数代码
2010/09/20 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
javascript里使用php代码实例
2014/12/13 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
初识Node.js
2015/03/20 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
浅谈JavaScript对象的创建方式
2016/06/13 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
[js高手之路]图解javascript的原型(prototype)对象,原型链实例
2017/08/28 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
jQuery实现滚动效果
2017/11/17 jQuery
详解JavaScript 作用域
2020/07/14 Javascript
[01:49]一目了然!DOTA2DotA快捷操作对比第二弹
2014/05/16 DOTA
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
对Python3 * 和 ** 运算符详解
2019/02/16 Python
通过cmd进入python的实例操作
2019/06/26 Python
django 微信网页授权登陆的实现
2019/07/30 Python
Python银行系统实战源码
2019/10/25 Python
pytorch:torch.mm()和torch.matmul()的使用
2019/12/27 Python
css3的transform造成z-index无效解决方案
2014/12/04 HTML / CSS
Melijoe时尚童装德国官网:Melijoe德国
2016/09/03 全球购物
为娇小女性量身打造:Petite Studio
2018/11/01 全球购物
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
毕业生实习鉴定
2013/12/11 职场文书
捐款倡议书
2014/04/14 职场文书
大学生英语演讲稿
2014/04/24 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
会议简讯范文
2015/07/20 职场文书
Android开发之底部导航栏的快速实现
2022/04/28 Java/Android