2

我使用 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. 其他的 ?
4

2 回答 2

6

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

container = av.open("My_Super_Video.mp4")
total_frames = container.streams.video[0].frames
于 2019-11-08T14:22:08.297 回答
2

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

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

于 2019-03-27T22:19:16.933 回答