从一堆 JPEG 构建 MJPEG

Construct an MJPEG from a bunch of JPEGs

我正在 Python 中编程。我在数据库中有一堆 JPEG 及其时间戳。它们不是完全周期性的(帧速率有点不稳定,每帧 +/- 几毫秒)。我想查询数据库并构建一个 MJPEG 文件,我可以将其保存到磁盘并在需要时使用 ffmpeg 进一步转码。我该怎么做(不需要代码,如果可能的话,只需要一些高级注释,使用哪些模块,等等)?

您可以通过从 Python 发送 RGB 数据在 FFmpeg 中动态创建视频帧。

为什么不直接读取 JPEG 并将其解码后的 RGB 数据发送到 FFmpeg 以创建 H264 视频文件? H264 视频帧以后可以与任何声音、字幕等一起放入 MP4 容器中

你需要运行 FFmpeg作为process in Python然后将RGB字节数组写入stdin 的过程。每次写入都会生成一个帧,因此如果您需要一张图片显示这么多毫秒,那么您只需计算发送相同 RGB 数组的次数即可。

例如,如果您将 FFmpeg 设置为输出一个 30 FPS 的视频并且您希望一个 JPEG 显示 2 秒,则您将相同的 JPEG 的解码 RGB 数据写入 60 次(使用 for-loop)。

理想的函数如下所示 writeFrame (rgbData, numTimesToWrite);,其中 numTimesToWrite 将是 60。然后使用,您只需将 JPEG 解码为 RGB,然后将要写入的帧数输入该函数。由于每秒有 1000 毫秒,因此任何 1 帧都代表大约 33 毫秒的输出视频。

  • 有关编写框架的想法,请参阅 this Python tutorial。您需要将 pipe.proc.stdin.write 放在一个函数中,每当您要编写一个框架时都会调用该函数。

  • 这是使用 ActionScript-3 语言(任何具有标准 In/Out 功能的语言都可以做到)的 how I did it(请参阅 function makeVideoFrame() 了解想法)。