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 isinstance函数介绍
Apr 14 Python
python抓取百度首页的方法
May 19 Python
python结合opencv实现人脸检测与跟踪
Jun 08 Python
详解django三种文件下载方式
Apr 06 Python
python中不能连接超时的问题及解决方法
Jun 10 Python
python使用PIL和matplotlib获取图片像素点并合并解析
Sep 10 Python
简单了解Pandas缺失值处理方法
Nov 16 Python
使用python无账号无限制获取企查查信息的实例代码
Apr 17 Python
python 元组的使用方法
Jun 09 Python
详解python datetime模块
Aug 17 Python
python判断all函数输出结果是否为true的方法
Dec 03 Python
Python max函数中key的用法及原理解析
Jun 26 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
在Windows中安装Apache2和PHP4的权威指南
2006/10/09 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
twig模板获取全局变量的方法
2016/02/05 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
javascript flash下fromCharCode和charCodeAt方法使用说明
2008/01/12 Javascript
解决IE6的PNG透明JS插件使用介绍
2013/04/17 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
jquery实现简单的遮罩层
2016/01/08 Javascript
js仿新浪微博消息发布功能
2017/02/17 Javascript
基于jQuery的左滑出现删除按钮的示例
2017/08/29 jQuery
原生JS实现的轮播图功能详解
2018/08/06 Javascript
js中Function引用类型常见有用的方法和属性详解
2019/12/11 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
vue实现折线图 可按时间查询
2020/08/21 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:08:43]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第一场 1月9日
2021/03/11 DOTA
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
浅谈python数据类型及类型转换
2017/12/18 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
Django框架实现分页显示内容的方法详解
2019/05/10 Python
Python内置函数property()如何使用
2020/09/01 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
健康监测猫砂:Pretty Litter
2017/05/25 全球购物
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
十八大感想感言
2014/02/10 职场文书
北京导游词
2015/02/12 职场文书
爱心捐书倡议书
2015/04/27 职场文书
行政答辩状范文
2015/05/21 职场文书
幼儿园班级工作总结2015
2015/05/25 职场文书
奇妙的 CSS shapes(CSS图形)
2021/04/05 HTML / CSS
能让Python提速超40倍的神器Cython详解
2021/06/24 Python
关于SpringBoot 使用 Redis 分布式锁解决并发问题
2021/11/17 Redis