Добавить ключевой кадр в середину видео без перекодирования всего видео

415
pgm

Мне нужно добавить I-кадры в середину mp4s в рекламные паузы, чтобы я мог сегментировать в HLS и иметь I-кадры, когда видео возвращается обратно. Я знаю, как это сделать при перекодировании всего видео и форсировании ключевых кадров, в частности. пятна, но я бы предпочел вырезать место (возможно, 1 секунду видео), где нужен ключевой кадр, добавить ключевой кадр, а затем соединить видео вместе. Это должно значительно сократить время кодирования, поскольку я могу в основном копировать кодеки, за исключением одной секунды видео, где добавляется I-кадр.

Единственная проблема состоит в том, что профиль видео и настройки меняются, когда я добавляю I-кадр, и я не получаю чистую строчку, когда собираю все это вместе. Я понимаю, что могу сделать перекодировку с помощью concat, но я пытаюсь избежать этого времени обработки.

Несколько простых примеров того, что я пытаюсь сделать с помощью ffmpeg:

ffmpeg -i input.mp4 -ss 30 -t 1 -c:a copy -y -copyts clipped2.mp4  ffmpeg -i input.mp4 -t 30 -c copy -y -copyts clipped1.mp4  ffmpeg -i "concat:clipped1.mp4|clipped2.mp4" -c copy -y newOutput.mp4 

Возможно, мне придется использовать ffprobeи указать битрейт, профиль и другие параметры для клипа длительностью 1 секунда, чтобы он не использовался по умолчанию для некоторых случайных вещей, но я все еще не могу заставить это работать правильно.

Кто-нибудь достиг этого? Это специально делается для вставки рекламы на стороне сервера.

1
Смотрите [этот вопрос] (https://stackoverflow.com/q/51995276/2903532) reynoldsnlp 5 лет назад 0

1 ответ на вопрос

0
reynoldsnlp

Я копирую этот ответ :

Вы можете использовать ffmpeg для вставки ключевых кадров туда, где вы хотите, используя эту -force_key_framesопцию.

например:

./ffmpeg -i input.mp4 -c:a copy -c:v copy -force_key_frames 0:05:00,0:10:00 out.mp4 

установит ключевой кадр как можно ближе к отметке 5 и 10 с. Значения времени могут быть в формате чч: мм: сс или в секундах (отдельные значения, без двоеточий).

Вы можете проверить, есть ли вставленные рамки, где вы хотите их использовать, используя:

./ffprobe -select_streams v:0 -skip_frame nokey -show_entries frame=pkt_pts_time out.mp4 

Похожие вопросы