Как изменить интервал ключевого кадра в ffmpeg

Я хотел установить интервал ключевого кадра входного видео на 5 секунд. Только тогда я могу достичь постоянной 5-секундной сегментации HLS с использованием FFmpeg. Как установить интервал ключевого кадра на 5 секунд с помощью FFmpeg? (Код строки подсказки FFmpeg оценен)

Ответ 1

Вам нужно переустановить. Установите параметр 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, согласно предложению смеха-мальчика.

Ответ 2

Вздох.

Дезинформация относительно опции no-scenecut продолжается дольше, чем я помню. Никогда не вводите значение без сцен.

Ссылка на документацию можно найти здесь.

Для FFmpeg вам необходимо использовать следующие два переключателя:

-g 120 определит GOP из 120 кадров для создания пятисекундной GOP для содержимого 23.976fps. Это работает в сочетании с опцией no-scenecut..

-x264opts no-scenecut заставит создавать ключевые кадры за значение GOP, которое использует FFmpeg. По умолчанию для libx264 создается ключевой кадр, когда он обнаруживает смену сцены. Если вы проверите выходной файл с помощью MediInfo без этой опции, вы увидите "scenecut = 40". Когда сделано правильно, это будет "scenecut = 0". Если этот параметр не используется, ключевые кадры будут несовместимы для содержимого ABR, а размеры сегментов будут непредсказуемыми.

Не верьте мне на слово, запустите следующую команду под оболочкой bash, где $inputfile - это имя файла, который вы хотите проанализировать. Если вы используете два переключателя, показанных выше, вы увидите очень четное кадрирование ключевых фреймов в командной строке.

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

Вы также можете ссылаться на статью, которую я написал о том, как создать правильный выровненный по кадру ABR-контент здесь.