python - 从一堆 JPEG 中构造一个 MJPEG
问题描述
我正在用 Python 编程。我在数据库中有一堆 JPEG 和它们的时间戳。它们不是完全周期性的(帧速率有点不稳定,每帧+/-几毫秒)。我想查询数据库并构建一个 MJPEG 文件,我可以将其保存到磁盘并ffmpeg
在需要时进一步转码。我该怎么做(不需要代码,如果可能的话,只需要一些高级注释,如果有的话,使用哪些模块等)?
解决方案
您可以通过从 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 语言(任何具有标准输入/输出功能的语言都可以做到这一点)的方式(请参阅参考资料)。
推荐阅读
- visual-studio - 获取最新版本 - TFS - 自动显示输出窗口
- r - 从 Rproj 中的列表创建数据框
- ocaml - Ocaml中字符串的简单解析
- javascript - 提高 Google Apps 脚本中 RSA 解密的性能
- android - 在 android.support.v4.app.Fragment.onActivityResult(int, int, android.content.Intent) 处获取 NullPointerException
- powerbi - 使用 dax 过滤视图上的多个列
- python - Keras 模型的每个(最后一层)输出的单独损失
- vba - 循环遍历范围,然后根据单元格值工作表并删除行
- python - 是否可以在 tensorflow 中更新现有的文本分类模型?
- node.js - 如何在nodejs中为应用程序全局保存每个请求的用户信息