我编写了一个基于 FFMpeg 的 C++ 转换器,它可以接收 hls-stream 的链接并将其转换为本地 .mp4 视频。到目前为止,一切都很好,转换器工作起来就像一个魅力,对此没有任何疑问。
PROBLEM:无论我向转换器提供什么输入源,在转换结束时我只需要接收带有关键帧的视频。由于完美的向前和向后搜索,我需要这样的视频。
众所周知,辅助视频帧(P 和 B)依赖于它们的所有者帧(I 帧),因为该帧包含完整的像素图。据此,我们可以通过将 P 帧和 B 帧的数据与 I 帧合并来为每个 P 帧和 B 帧重新创建一个 I 帧。这就是为什么这样的 ffmpeg 命令ffmpeg -i video.mp4 output%4d.jpg
works.
问题:如何实现帧合并算法以便最后重新创建仅关键帧视频?关于合并数据我需要了解哪些怪癖AVPacket
s?
Thanks.
您无法“合并”压缩流的 P 帧和 B 帧(例如使用 H.264 编解码器)来获取 I 帧。
ffmpeg 的作用是什么
ffmpeg -i video.mp4 output%4d.jpg
正在解码每一帧(因此需要从 I 帧开始,然后解码流中所有后续的 P 和 B 帧),并将它们压缩回 JPEG,并为原始输入流中的每一帧输出 JPEG 图像。
如果要将具有 P/B 帧的输入流转换为仅内部流(具有所有 I 帧),您需要转码 https://en.wikipedia.org/wiki/Transcoding溪流。
这意味着解码原始流中的所有帧并将它们编码回仅内部流。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)