Как добавить дополнительные ключевые кадры к видео, используя 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....

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

2 ответа

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

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

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

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

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

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

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

Другие вопросы по тегам