Python中用imageio读视频的方法

Created at 2017-10-17 Updated at 2017-10-17 Category 2017年10月 Tag python

Python中用imageio读视频的方法

Python中读视频的方法,目前我已知的有两种,一种就是很大众的用opencv来读的,这个网上到处都是教程,也就是几行代码的事情。但是在linux安装opencv并不是很简单,如果环境好的话,也不是很困难,参见这里。如果环境不好,因为一个网络原因各种安装不好,真的是自求多福。回到这篇文章的正题,用imageio读视频,这个本来也就是几行代码的问题,但是从来没有用过,然后报错了,网上也就是几个例子,也没有找到关于这个错误的解决方法,自己多试了试,解决了问题。虽然简单,但是我还是记录下来了。

根据网上看到的代码是以下这样子的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pylab
import imageio
filename = '/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这个函数的用法,然后网上的例子是这样子的。

1
2
3
4
5
6
7
8
list1 = ["这", "是", "一个", "测试"]
for index, item in enumerate(list1):
print index, item
>>>
0 这
1 是
2 一个
3 测试

接着我也学着打印出来。

1
2
3
4
5
6
7
8
9
import pylab
import imageio
filename = '/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)

这样子没有报错,然后改成下面的也没有报错。

1
2
3
4
5
6
7
8
import pylab
import imageio
filename = '/path/to/your/video.mp4'
vid = imageio.get_reader(filename, 'ffmpeg')
for num , image in enumerate(vid):
image = vid.get_data(num)

所以错误的原因就是少添加了一个image这个变量,如果不需要这个,也需要用_代替。
所以,用imageio读取视频的正确代码是:

1
2
3
4
5
6
import pylab
import imagei
filename = '/path/to/your/video.mp4'
vid = imageio.get_reader(filename, 'ffmpeg')
for num , _ in enumerate(vid):
image = vid.get_data(num)

source here

Site by xie mei using Hexo & Random

Hide