gpt4 book ai didi

c++ - 使用 FFmpeg 进行 MPEG 反向帧解码

转载 作者:太空狗 更新时间:2023-10-29 21:05:40 25 4
gpt4 key购买 nike

我有所谓的“ block ”存储一些 MPEG4 (I,p,p,p,p...) 帧。对于每个“ block ”,帧以“I”帧开始,并在下一个“I”帧之前结束。(VOL - “visual_object_sequence_start_code”总是包含在“I”帧之前)

我需要能够以“向后”模式播放那些“ block ”帧。厚的是:

  1. 不可能只取 block 中的最后一帧并执行解码,因为它是一个“P”帧,需要一个“帧间 (I)”才能正确解码。

  2. 我不能只获取我的第一个“I”帧,然后将它传递给 ffmpeg 的“avcodec_decode_video”函数,然后才将我的最后一个“P”帧传递给 ffmpeg,因为最后一个“P”帧取决于它前面的“P”帧,对吗? (好吧.. 就我测试过的这个方法而言,我最后解码的 P 帧有伪影)

现在我执行向后播放的方式是 - 首先解码我所有的 RGB“ block ”帧并将它们存储在内存中。 (在大多数情况下,每个 block 最多 25 帧。)但是这种方法确实需要大量内存......(尤其是在帧分辨率很高的情况下)而且我觉得这不是正确的方法...

所以我想问一下,有没有人对如何使用 FFmpeg 执行这种“向后”帧解码/播放有任何建议?

谢谢

最佳答案

您正在研究的是一个真正的研究问题:要大致了解整体方法,请查看以下论文:

  1. Compressed-Domain Reverse Play of MPEG Video Streams, SPIE International Symposium on Voice, Video, and Data Communications, Boston, MA, November, 1998.

  2. Reverse-play algorithm for MPEG video streaming

  3. MANIPULATING TEMPORAL DEPENDENCIES IN COMPRESSED VIDEO DATA WITH APPLICATIONS TO COMPRESSED-DOMAIN PROCESSING OF MPEG VIDEO.

本质上还是有基于关键帧的高级编码,但是可以将运动补偿的过程倒过来实现倒流。这是通过将 P 帧即时转换为 I 帧来完成的。这确实需要向前看,但不需要那么多内存。也许您可以将其另存为新文件,然后将其应用于具有反向播放要求的标准解码器。

但是,这非常复杂,我见过很少有软件可以实际做到这一点。

关于c++ - 使用 FFmpeg 进行 MPEG 反向帧解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9392152/

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