Я хочу добавить ключевые кадры на основе определенного интервала (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....

Как я могу это сделать?

2 ответа2

2

Краткий ответ: вы не можете

Длинный ответ: при использовании FFMpeg с повторным кодированием (т. Е. Любым другим кодеком, кроме copy), каждое отдельное изображение во входном потоке будет распаковано и доступно в виде полного растрового изображения. Это подразумевает, что в этой точке конвейера кадры 1, 12 и 89 больше не являются "особенными" - они являются изображениями, как и любые другие.

Когда вы теперь сжимаете с помощью libx264 , вы создаете видео с ключевыми кадрами - они будут помещаться в те места, которые вы настраиваете, в вашем случае каждые 20 кадров.

1

force_key_frames есть возможность отразить каденцию ключевого кадра исходного потока (пока не документировано - на моем задании), однако это не может быть объединено с другими выражениями в f_k_f.

Однако то, что вы можете использовать, это

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

Это установит ключевой кадр, если исходный кадр был ключевым кадром. Однако keyint всегда измеряется по последнему набору ключевых кадров, поэтому, если ваш источник имел KF при n=0,34,55,64 то результат будет иметь KF при n=0,20,34,54,55,64,84 - примечание отсутствие KFs на 40,60,80 . Также обратите внимание на последовательные KF на 54,55 , так что лучше игнорировать исходные KF и позволить сценарию работать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .