首页 > 解决方案 > 从一堆 JPEG 中构造一个 MJPEG

问题描述

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

标签: pythonvideomjpeg

解决方案


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

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

您需要在 Python 中将 FFmpeg 作为进程运行,然后将 RGB 字节数组写入进程的标准输入。每次写入都会生成一个帧,因此如果您需要将图片显示这么多毫秒,那么您只需计算发送相同 RGB 数组的次数。

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

一个理想的函数看起来像writeFrame (rgbData, numTimesToWrite);这样60。然后使用,您只需将 JPEG 解码为 RGB,然后将要写入的帧数输入该函数。由于每秒有 1000 毫秒,因此任何 1 帧都代表大约 33 毫秒的输出视频。numTimesToWrite

  • 有关编写框架的想法,请参阅此 Python 教程。您需要放入pipe.proc.stdin.write一个在您想要编写框架时调用的函数。

  • 这就是function makeVideoFrame()使用 ActionScript-3 语言(任何具有标准输入/输出功能的语言都可以做到这一点)的方式(请参阅参考资料)。


推荐阅读