FFMPEG 无需重新编码即可添加关键帧

FFMPEG 无需重新编码即可添加关键帧

如何在不重新编码的情况下为 FLV 文件添加关键帧?我尝试使用此命令,但没有任何效果:

ffmpeg -i file.flv  -vcodec copy -acodec copy -g 0 -y tmp.flv && yamdi -i tmp.flv -o out.flv

无法使用 Flash Player 正确查找(源和此)结果。我有很多 flv 需要“修复”。

答案1

如何在不重新编码的情况下为 FLV 文件添加关键帧?

你不能。

关键帧或 I 帧是独立的帧 - 它不需要任何前或后帧来解码。其他帧是 P 帧(需要解码一个或多个前帧,并且其内容基于对前一帧所做的更改,而不是单独形成完整的画面)和 B 帧(与 P 帧相同,但参考前两帧在他们之后)。

为了将 P 帧或 B 帧更改为 I 帧,您需要解码然后重写视频流。因此,如果不重新编码,则无法添加关键帧。

看看x264 编码指南ffmpeg 维基了解有关如何获得美观编码的一些提示。

答案2

当你这样做时-vcodec copy,你完全复制了视频编解码器。然后没有参数可以影响视频,因此 GOP 大小也不会再次解析。

尝试仅使用 gopsize,而不使用视频编解码器副本:

ffmpeg -i file.flv -acodec copy -g 1 -sameq -y tmp.flv

请注意,该-sameq参数表示相同的量化器,仅当您使用相同的编解码器(如 MPEG-2 到 MPEG-2)进行解码和编码时才应使用它,就像您不想更改编解码器的情况一样。

相关内容