FFMPEG 如何将 MJPEG 编码数据复用到 mp4 或 avi 容器 c++
Posted
技术标签:
【中文标题】FFMPEG 如何将 MJPEG 编码数据复用到 mp4 或 avi 容器 c++【英文标题】:FFMPEG how to mux MJPEG encoded data into mp4 or avi container c++ 【发布时间】:2012-09-29 15:26:48 【问题描述】:我正在寻找一种将 mjpeg(压缩)视频数据复用到 mp4 或 avi 等视频容器中的方法。 (我将来还需要添加音频)。 因为我在项目的其他部分也使用 FFMPEG,所以如果可能的话,我想使用这些库。 我不是在寻找命令行 FFMPEG 使用! 我尝试在 ffmpeg 中使用 muxing 示例,我只能创建一个(非常大的)带有视频信息的 .mjpeg 文件。这不是我要找的。p>
非常欢迎提供示例,但指向正确方向的指针也可以!
编辑: 我已将 yuvj422p 流输出到 jpeg 图像,我想将其放入 mp4 容器中。使用 ffmpeg 命令行可以:
ffmpeg -i yuvy%01d.jpg -vcodec mjpeg out.mp4
我想直接在我的代码中执行此操作(当然不首先创建 jpeg 图像)
【问题讨论】:
【参考方案1】:我做了以下修复:
我使用了复用示例,而不是使用编码函数,我只是跳过它,直接将 JPEG 数据加载到数据包中。为了设置 OutputContext,我使用了猜测格式函数并将编解码器设置为 MJPEG。我将 PTS 数据更改为帧计数器。因为无论如何所有帧都是按时间顺序排列的。
【讨论】:
【参考方案2】:三大步骤
-
解码(使用 avcodec_decode_video())
将原始帧转换为 yuv420p 格式(使用 swscale())
编码(使用avcodec_encode_video())
如果您需要,我可以提供示例代码
【讨论】:
发帖人应该已经完成了这一切。现在他手头有 JPEG,他想将帧写入视频文件。 好的,然后只有第 2 步和第 3 步,因为如果我没记错的话,jpeg 帧在 yuvj422p 中 我在嵌入式平台上运行编码,得到一个原始的 yuvj422p 编码比特流。我想直接把它放到一个 mp4 容器中。解码和编码会花费太多的周期时间。 @arash kordi:不,他需要接下来的第 4 步 让我澄清一下,您是从原始 yuvj422p 比特流还是从 jpeg 图像创建了一个 .mjpeg 文件?以上是关于FFMPEG 如何将 MJPEG 编码数据复用到 mp4 或 avi 容器 c++的主要内容,如果未能解决你的问题,请参考以下文章