Python中用imageio读视频的方法
Created at 2017-10-17 Updated at 2017-10-17 Category 2017年10月
Python中用imageio读视频的方法
Python中读视频的方法,目前我已知的有两种,一种就是很大众的用opencv来读的,这个网上到处都是教程,也就是几行代码的事情。但是在linux安装opencv并不是很简单,如果环境好的话,也不是很困难,参见这里。如果环境不好,因为一个网络原因各种安装不好,真的是自求多福。回到这篇文章的正题,用imageio读视频,这个本来也就是几行代码的问题,但是从来没有用过,然后报错了,网上也就是几个例子,也没有找到关于这个错误的解决方法,自己多试了试,解决了问题。虽然简单,但是我还是记录下来了。
根据网上看到的代码是以下这样子的。
1234567891011121314
import pylabimport imageiofilename = '/path/to/your/video.mp4'vid = imageio.get_reader(filename, 'ffmpeg')for num in enumerate(vid): image = vid.get_data(num) #以下这几句是现实图片的 fig = pylab.figure() fig.suptitle('image #{}'.format(num), fontsize=20) pylab.imshow(image)pylab.show()
但是运行的时候报了一个错误:IndexError: Reached end of video。我还以为是本应该结束了,但是get_data还读了。然后在网上找了enumerate这个函数的用法,然后网上的例子是这样子的。
12345678
list1 = ["这", "是", "一个", "测试"]for index, item in enumerate(list1): print index, item>>>0 这1 是2 一个3 测试
接着我也学着打印出来。
123456789
import pylabimport imageiofilename = '/path/to/your/video.mp4'vid = imageio.get_reader(filename, 'ffmpeg')for num , image in enumerate(vid): print("-------the num is %d " % num) print("-------the image is %s " %s)
这样子没有报错,然后改成下面的也没有报错。
12345678
import pylabimport imageiofilename = '/path/to/your/video.mp4'vid = imageio.get_reader(filename, 'ffmpeg')for num , image in enumerate(vid): image = vid.get_data(num)
所以错误的原因就是少添加了一个image这个变量,如果不需要这个,也需要用_代替。
所以,用imageio读取视频的正确代码是:
123456
import pylabimport imageifilename = '/path/to/your/video.mp4'vid = imageio.get_reader(filename, 'ffmpeg')for num , _ in enumerate(vid): image = vid.get_data(num)
source here