问题描述
我正在尝试找到一种将单个 png 图像转换为具有指定长度的 mp4 文件的方法。在尝试制作更长(多个小时)的视频时,我发现的解决方案缓慢且不可靠。
这是我目前在 Python 3 中的解决方案:
true
基本上相同的图像被附加多次以组成视频,我发现合并非常费力,因此将 fps 设置为 0.1 秒。
解决方法
你会喜欢 PyAV。它是 ffmpeg 库的适当包装器,而不是您在随机 Python 包中发现的常见 subprocess
杂项。
它有一个示例,其中帧是用自定义的演示时间戳而不是固定的帧速率写入的。由于 ffmpeg 没有在他们自己的文档中明确说明这些事情,数学/用法有点模糊。
基本上你设置了 av.VideoFrame.pts
,就是这样。
https://github.com/PyAV-Org/PyAV/blob/main/examples/numpy/generate_video_with_pts.py
请务必理解,帧间隔时间异常长的视频对于某些视频播放器来说可能是一个挑战,至少在尝试搜索而不是按顺序播放时是这样。
OpenCV 不是媒体库。其视频 I/O 功能旨在和设计为方便而不是灵活。