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 测试实现方法
Dec 24 Python
Python正则抓取网易新闻的方法示例
Apr 21 Python
python利用标准库如何获取本地IP示例详解
Nov 01 Python
flask-socketio实现WebSocket的方法
Jul 31 Python
在pycharm中使用git版本管理以及同步github的方法
Jan 16 Python
python selenium爬取斗鱼所有直播房间信息过程详解
Aug 09 Python
解决Atom安装Hydrogen无法运行python3的问题
Aug 28 Python
Django REST框架创建一个简单的Api实例讲解
Nov 05 Python
python爬虫基础知识点整理
Jun 02 Python
PyCharm+Miniconda3安装配置教程详解
Feb 16 Python
python flappy bird小游戏分步实现流程
Feb 15 Python
python自动化测试之Selenium详解
Mar 13 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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
php curl的深入解析
2013/06/02 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
JavaScript实现页面滚动图片加载(仿lazyload效果)
2011/07/22 Javascript
js去除重复字符串两种实现方法
2013/01/09 Javascript
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
vue2.0 自定义日期时间过滤器
2017/06/07 Javascript
在vscode中统一vue编码风格的方法
2018/02/22 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
2018/09/16 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
JavaScript如何判断input数据类型
2020/02/06 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
Python脚本实现集群检测和管理功能
2015/03/06 Python
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
python之pandas用法大全
2018/03/13 Python
python如何查看微信消息撤回
2018/11/27 Python
python paramiko远程服务器终端操作过程解析
2019/12/14 Python
IDLE下Python文件编辑和运行操作
2020/04/25 Python
Python特殊属性property原理及使用方法解析
2020/10/09 Python
大学四年个人的自我评价
2014/02/26 职场文书
银行办公室岗位职责
2014/03/10 职场文书
个人租房协议书
2014/04/09 职场文书
鉴定评语大全
2014/05/05 职场文书
物资采购方案
2014/06/12 职场文书
电子商务优秀毕业生求职信
2014/07/11 职场文书
2015年银行大堂经理工作总结
2015/04/24 职场文书
解决golang结构体tag编译错误的问题
2021/05/02 Golang
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android