如何使用 ffmpeg 向视频添加额外的关键帧?

如何使用 ffmpeg 向视频添加额外的关键帧?

我想在我的视频中添加基于特定间隔(20帧)的关键帧。

因此我使用了以下命令ffmpeg

ffmpeg -i <input> -vcodec libx264 -x264-params keyint=20:scenecut=0 -acodec copy out.mp4

输出是,我每 20 帧获取一次关键帧。

但原始视频有一个关键帧,例如frame 1, 12, 89....

现在我有帧的关键帧1, 21, 41....

我不想替换已经存在的关键帧。我想添加其他关键帧,因此它看起来像这样:

frame 1, 12, 21, 41, 89....

我怎样才能做到这一点?

答案1

force_key_frames有一个选项可以镜像源流的关键帧节奏(尚未记录 - 在我的待办事项中),但是这不能与 f_k_f 中的其他表达式结合。

但是你可以使用

-force_key_frames source -x264-params keyint=20:scenecut=0

如果源帧是关键帧,这将设置一个关键帧。但是,关键帧始终是从最后设置的关键帧开始测量的,因此,如果源在 处有 KF,n=0,34,55,64则结果在 处会有 KF n=0,20,34,54,55,64,84- 请注意 处没有 KF 40,60,80。还请注意 处的连续 KF 54,55,因此最好忽略源 KF 并让场景切换正常工作。

答案2

简短回答:不能

长答案:当使用 FFMpeg 进行重新编码时(即除 之外的任何其他编解码器copy),输入流中的每个单个图像都将被解压缩并作为完整位图提供。这意味着,在管道中的这一点上,帧 1、12 和 89 不再是“特殊的” - 它们与其他图像一样。

现在通过压缩时libx264,您将创建一个具有关键帧的视频 - 这些关键帧将被放置在您配置的位置,在您的情况下每 20 帧一次。

相关内容