我编写了一个基于C++的FFMpeg转换器,它可以接收到hls流的链接,并将其转换为本地.mp4视频。到目前为止,很好,转换器的工作就像一种魅力,没有问题。
问题:,无论我向转换器提供什么输入源,在转换结束时,我只需要接收带有关键帧的视频。我需要这样的视频,因为完美的追求正反两方面。
这是一个众所周知的事实,辅助视频帧(P和B)依赖于它们的所有者帧(I帧),因为这个帧包含完整的像素映射。据此,我们可以通过将每个P和B帧的数据与它们的I帧合并来重新创建一个I帧。这就是为什么这样的ffmpeg命令ffmpeg -i video.mp4 output%4d.jpg有效的原因。
问题:如何实现帧合并的算法,以便重新创建关键帧,最终仅用于视频?关于合并AVPacket的数据,我需要了解哪些怪癖?
谢谢。
发布于 2018-05-15 13:22:08
您不能“合并”压缩流的P和B帧(例如与H.264编解码器),以获得I-帧。
芬伯用什么?
ffmpeg -i video.mp4 output%4d.jpg解码每一帧(因此,它需要从I帧开始,然后解码流中所有后续的P帧和B帧),并将它们压缩回JPEG,并为原始输入流中的每一帧输出JPEG图像。
如果要将带有P/B帧的输入流转换为纯内部流(与所有i-帧),则需要对流进行转码。这意味着从原始流中解码所有帧,并将它们编码回一个纯内部流。
https://stackoverflow.com/questions/50345831
复制相似问题