gpt4 book ai didi

python - 如何读取 scikit-image 处理的 mp4 视频?

转载 作者:IT老高 更新时间:2023-10-28 20:23:41 25 4
gpt4 key购买 nike

我想对 mp4 视频的帧应用 scikit-image 函数(特别是模板匹配函数 match_template), h264 编码。对我的应用程序来说,跟踪每一帧的时间很重要,但我知道帧速率,所以我可以很容易地从帧数计算出来。

请注意,我在低资源上运行,我希望尽可能减少依赖关系:无论如何都需要 numpy,因为我打算使用 scikit -image,我会避免导入(和编译)openCV 只是为了阅读视频。

我在 this 的底部看到scikit-image 可以无缝处理存储为 numpy 数组的视频的页面,从而获得理想的结果。

最佳答案

Imageio python 包应该做你想做的事。这是一个使用这个包的python片段:

import pylab
import imageio
filename = '/tmp/file.mp4'
vid = imageio.get_reader(filename, 'ffmpeg')
nums = [10, 287]
for num in nums:
image = vid.get_data(num)
fig = pylab.figure()
fig.suptitle('image #{}'.format(num), fontsize=20)
pylab.imshow(image)
pylab.show()

enter image description here enter image description here

您也可以直接遍历文件中的图像(see the documentation):

for i, im in enumerate(vid):
print('Mean of frame %i is %1.1f' % (i, im.mean()))

要安装 imageio,您可以使用 pip:

pip install imageio

另一种解决方案是使用 moviepy (它使用类似的代码来读取视频),但我认为 imageio 更轻并且可以完成工作。


回复第一条评论

为了检查整个文件的标称帧率是否相同,您可以计算迭代器中的帧数:

count = 0
try:
for _ in vid:
count += 1
except RuntimeError:
print('something went wront in iterating, maybee wrong fps number')
finally:
print('number of frames counted {}, number of frames in metada {}'.format(count, vid.get_meta_data()['nframes']))


In [10]: something went wront in iterating, maybee wrong fps number
number of frames counted 454, number of frames in metada 461

为了显示每一帧的时间戳:

try:
for num, image in enumerate(vid.iter_data()):
if num % int(vid._meta['fps']):
continue
else:
fig = pylab.figure()
pylab.imshow(image)
timestamp = float(num)/ vid.get_meta_data()['fps']
print(timestamp)
fig.suptitle('image #{}, timestamp={}'.format(num, timestamp), fontsize=20)
pylab.show()
except RuntimeError:
print('something went wrong')

关于python - 如何读取 scikit-image 处理的 mp4 视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29718238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com