使用PyAV的视频中的帧数

时间:2018-11-18 21:48:32

标签: python opencv video moviepy pyav

我使用PyAV库,因为它是Python中最差的库之一。

这是我想使用的简单代码示例:

import av

video = av.open("My_Super_Video.mp4")

total_frames = # ????

for i, frame in enumerate(video.decode(video=0)):
    img = frame.to_image()  # PIL image

    print("Frame: %d/%d ..." % (i, total_frames))

我显然可以使用其他库来加载该库,但是由于其处理速度,如果可能的话,我宁愿使用PyAV。

问题1:是否可以使用PyAV获得帧数?如果是,怎么办?

问题2:在这种情况下,我会考虑使用另一个库来逐帧加载和处理视频。哪个库可以让我以最快的速度完成上述操作。我知道以下内容,但不知道它们之间的比较:

  1. PIMS 在PyAV之上,可以添加一些有趣的功能吗?
  2. MoviePy (仅限于RAM中的视频),但是perf呢?
  3. Imageio (可能与上述限制相同),但是perf呢?
  4. OpenCV (可能与上述限制相同),但是perf呢?
  5. 其他人?

2 个答案:

答案 0 :(得分:0)

您可以使用Stream.frames属性获取流中的帧数。

来源:http://docs.mikeboers.com/pyav/develop/api/stream.html#av.stream.Stream

答案 1 :(得分:0)

要获取第一个视频流的帧,请执行以下操作:

container = av.open("My_Super_Video.mp4")
total_frames = container.streams.video[0].frames