Jon*_*IAR 5 python video opencv 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))
Run Code Online (Sandbox Code Playgroud)
显然我可以使用其他库来加载该库,但是如果可能的话,我更喜欢使用 PyAV,因为它的处理速度很快。
问题1:用PyAV可以获取帧数吗?如果是,怎么办?
问题2:在这种情况下,我会考虑使用另一个库来逐帧加载和处理视频。哪个库可以让我以尽可能最高的速度完成上述操作。我知道以下内容,但不知道它们如何比较:
要获取第一个视频流的帧,请执行以下操作:
container = av.open("My_Super_Video.mp4")
total_frames = container.streams.video[0].frames
Run Code Online (Sandbox Code Playgroud)
老问题,但只回答了部分。我也来回答第二个问题吧。
问题1:用PyAV可以获取帧数吗?如果是,怎么办?
import av
with av.open("My_Super_Video.mp4") as container:
total_frames = container.streams.video[0].frames
Run Code Online (Sandbox Code Playgroud)
问题2:在这种情况下,我会考虑使用另一个库来逐帧加载和处理视频。哪个库可以让我以尽可能最高的速度完成上述操作。我知道以下内容,但不知道它们如何比较:[...]
ImageIO timings: 0.497
PyAV timings: 0.908
MoviePy timings: 0.766
OpenCV timings: 0.766
OpenCV timings: 0.569 (no conversion to RGB)
Run Code Online (Sandbox Code Playgroud)
ImageIO 是最快的;把手放下。OpenCV 很接近(慢 14%),但前提是您可以在 BGR 中进行处理。如果您必须以 RGB 工作,那么转换成本会很高(慢 54%)。
也就是说,它高度依赖于工作负载,您应该始终根据您的特定设置进行基准测试。实际上,与处理每帧所花费的时间相比,差异通常可以忽略不计。
这是感兴趣的人的基准代码:
ImageIO timings: 0.497
PyAV timings: 0.908
MoviePy timings: 0.766
OpenCV timings: 0.766
OpenCV timings: 0.569 (no conversion to RGB)
Run Code Online (Sandbox Code Playgroud)
封装版本:
av==10.0.0
moviepy==1.0.3
Pillow==9.4.0
opencv-python==4.7.0.68
imageio==2.25.0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5982 次 |
| 最近记录: |