如何更改关键帧间隔?

问题描述 投票:0回答:2

如何使用FFmpeg将关键帧间隔设置为5秒?

ffmpeg keyframe
2个回答
38
投票

您需要重新编码。将 x264 的 keyint 参数设置为 5*fps 并禁用场景剪切。例如,如果您的 fps 是 24 :

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

这显然不是最佳的质量,但它会满足您的需求。

根据叹息男孩的建议,将

no-scenecut
更改为
scenecut=0


27
投票

叹气。

关于

no-scenecut
选项的错误信息已经持续了很长时间,超出了我的记忆。切勿输入
no-scenecut
的值。

可以在此处找到文档链接。

对于 FFmpeg,您需要使用以下两个开关:

  • -g 120
    将定义 120 帧的 GOP,为 23.976fps 内容创建 5 秒的 GOP。这与
    no-scenecut
    选项结合使用。

  • -x264-params no-scenecut=1
    (以前的
    -x264opts no-scenecut
    )将强制根据 FFmpeg 使用的 GOP 值创建关键帧。
    libx264
    的默认设置是在检测到场景变化时创建关键帧。如果您使用 MediInfo 检查输出文件而不使用该选项,将会看到
    scenecut=40
    。如果做得正确,这将是
    scenecut=0
    。如果不使用此选项,则 ABR 内容的关键帧将错位,并且片段大小将不可预测。

不要相信我的话,请在 bash shell 下运行以下命令,其中 $inputfile 是您要分析的文件的名称。如果您使用上面显示的两个开关,那么您将看到关键帧转储到命令提示符的节奏非常均匀。

ffprobe -select_streams v -show_frames -show_entries \
  frame=pict_type -of csv $inputfile | grep -n I | cut -d ':' -f 1

您还可以参考我写的一篇关于如何创建正确的 ABR 框架对齐内容的文章这里

© www.soinside.com 2019 - 2024. All rights reserved.