【发布时间】:2012-03-12 14:59:43
【问题描述】:
我有所谓的“块”存储一些 MPEG4 (I,p,p,p,p...) 帧。 对于每个“块”,帧以“I”帧开始,并在下一个“I”帧之前结束。 (VOL - "visual_object_sequence_start_code" 总是包含在 "I" 帧之前)
我需要能够在“向后”模式下播放那些“块”帧。 厚的是:
-
不可能只取块中的最后一帧并执行解码,因为它是“P”帧,需要“帧间 (I)”才能正确解码。
我不能只获取我的第一个“I”帧,然后将其传递给 ffmpeg 的“avcodec_decode_video”函数,然后才将我的最后一个“P”帧传递给 ffmpeg,因为最后一个“P”帧取决于前面的“P”帧吧? (嗯..据我测试过这种方法,我最后解码的 P 帧有伪影)
现在我执行向后播放的方式是 - 首先以 RGB 格式解码我的所有“块”帧并将它们存储在内存中。 (在大多数情况下,每块最大约为 25 帧。)但是这种方法确实需要大量内存......(特别是如果帧分辨率很高) 而且我有一种感觉,这不是正确的做法......
所以我想问一下,有人对如何使用 FFmpeg 执行这种“向后”帧解码/播放有任何建议吗?
谢谢
【问题讨论】:
-
我现在以 JPEG 格式存储所有解码的“块”帧,这极大地节省了内存,但仍然......最后,我的输出格式需要是 RGB(执行播放时)所以现在我还需要执行JPEG到RGB的转换......仍然......感觉这不是正确的选择(将所有图像存储在内存中)