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实现的解析crontab配置文件代码
Jun 30 Python
详解Python中for循环的使用方法
May 14 Python
Python学习小技巧之列表项的推导式与过滤操作
May 20 Python
如何利用python制作时间戳转换工具详解
Sep 12 Python
Python对接六大主流数据库(只需三步)
Jul 31 Python
Spring实战之使用util:命名空间简化配置操作示例
Dec 09 Python
Django基于客户端下载文件实现方法
Apr 21 Python
windows支持哪个版本的python
Jul 03 Python
Python Celery异步任务队列使用方法解析
Aug 10 Python
Python函数__new__及__init__作用及区别解析
Aug 31 Python
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
May 25 Python
能让Python提速超40倍的神器Cython详解
Jun 24 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
第七节 类的静态成员 [7]
2006/10/09 PHP
PHP数字格式化
2006/12/06 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
php设计模式之单例模式代码
2016/06/11 PHP
javascript函数中的arguments参数
2010/08/01 Javascript
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
Js 时间函数getYear()的使用问题探讨
2013/04/01 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
node.js Web应用框架Express入门指南
2014/05/28 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
简述AngularJS的控制器的使用
2015/06/16 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(二)
2015/12/10 Javascript
Highcharts使用简例及异步动态读取数据
2015/12/30 Javascript
Vue父子组建的简单通信之控制开关Switch的实现
2018/06/04 Javascript
javascript中join方法实例讲解
2019/02/21 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
python 提取文件的小程序
2009/07/29 Python
python动态加载包的方法小结
2016/04/18 Python
python验证身份证信息实例代码
2019/05/06 Python
python实现支付宝转账接口
2019/05/07 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
销售演讲稿范文
2014/01/08 职场文书
银行存款证明样本
2014/01/17 职场文书
公司晚会策划方案
2014/05/17 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
2014年连锁店圣诞节活动方案
2014/12/09 职场文书
补充协议书
2015/01/28 职场文书
疾病证明书
2015/06/19 职场文书
2016年第32个教师节致辞
2015/11/26 职场文书
范文之农村基层党建工作报告
2019/10/24 职场文书
Python基础之常用库常用方法整理
2021/04/30 Python
详解TS数字分隔符和更严格的类属性检查
2021/05/06 Javascript