![如何使用 ffmpeg 向视频添加额外的关键帧?](https://linux22.com/image/1570135/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20ffmpeg%20%E5%90%91%E8%A7%86%E9%A2%91%E6%B7%BB%E5%8A%A0%E9%A2%9D%E5%A4%96%E7%9A%84%E5%85%B3%E9%94%AE%E5%B8%A7%EF%BC%9F.png)
我想在我的视频中添加基于特定间隔(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 帧一次。