gpt4 book ai didi

c++ - 从 P 帧和 B 帧创建 I 帧

转载 作者:行者123 更新时间:2023-11-30 03:23:25 24 4
gpt4 key购买 nike

我已经编写了一个基于 FFMpeg 的 C++ 转换器,它可以接收到 hls-stream 的链接并将其转换为本地 .mp4 视频。到目前为止,非常好,转换器工作得很好,对此毫无疑问。

问题:无论我向转换器提供什么输入源,在转换结束时我只需要接收带有关键帧的视频。由于完美的正向和反向搜索,我需要这样的视频。

众所周知,附属视频帧(P 和 B)依赖于它们的所有者帧(I 帧),因为该帧包含完整的像素图。据此,我们可以通过将它们的数据与它们的 I 帧合并,为每个 P 和 B 帧重新创建一个 I 帧。这就是为什么这样的 ffmpeg 命令 ffmpeg -i video.mp4 output%4d.jpg 有效。

问题:如何实现帧合并算法以便在最后重新创建仅关键帧的视频?关于合并 AVPacket 的数据,我需要了解哪些怪癖?

谢谢。

最佳答案

您不能“合并”压缩流的 P 和 B 帧(例如使用 H.264 编解码器)以获得 I 帧。

ffmpeg 的作用

ffmpeg -i video.mp4 output%4d.jpg

正在解码每一帧(因此它需要从一个 I 帧开始,然后解码流中所有后续的 P 和 B 帧),并将它们压缩回 JPEG 并为原始中的每一帧输出一个 JPEG 图像输入流。

如果您想将带有 P/B 帧的输入流转换为仅内部流(带有所有 I 帧),您需要 transcode 流。这意味着解码原始流中的所有帧并将它们编码回仅内部流。

关于c++ - 从 P 帧和 B 帧创建 I 帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50345831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com