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