Вставка кадров в видео с помощью FFMPEG

#video #command-line #ffmpeg #frame

#Видео #командная строка #ffmpeg #кадр

Вопрос:

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

У меня уже есть скрипт для точного определения того, когда эти кадры были удалены, поэтому у меня есть индекс каждого кадра, который нужно вставить и где.

Например, в видео со скоростью 100 с при 100 кадрах в секунду у меня должно быть 10000 кадров. Однако 4 кадра были удалены в кадрах 399, 1205, 4299 и 7891. Итак, я хочу либо вставить черную рамку с тем же разрешением в этих местах, либо удерживать предыдущий кадр ровно один кадр (например, удерживать кадр 398 для дополнительного кадра или 0,01 с).

Есть ли способ сделать это итеративно в FFMPEG? В настоящее время я записываю видео в его составные кадры, добавляю свои пустые изображения, затем повторно объединяю видео из кадров, что является очень неэффективным процессом.

Комментарии:

1. В какой формат сохраняется камера?

2. Кодек MJPEG, контейнер .avi.

Ответ №1:

Давайте возьмем видео со значением частоты кадров FR и вашими пропущенными кадрами с индексом 399, 1205, 4299 и 7891. Первый кадр имеет индекс 0.

 ffmpeg -i in.avi -vf setpts='PTS (1/FR/TB)*(gte(N,399) gte(N,1205) gte(N,4299) gte(N,7891))' -vsync cfr -q:v 1 out.avi
  

Фильтр setpts может корректировать временные метки, и выражение setpts выполняет смещение всех кадров после заданных индексов вперед. Величина смещения вычисляется на основе того, сколько предыдущих кадров пропущено. Это создаст пустые временные интервалы. -vsync cfr Опция затем заполнит эти ячейки клоном предыдущего доступного кадра.

Комментарии:

1. Спасибо! Однако мне пришлось внести одно изменение. Первым номером этого примера должно быть 398 (чтобы учесть, что первый кадр имеет индекс 0). Во-вторых, каждое последующее число должно быть N-k, где N — номер кадра, а k — количество вставок, которые вы включили таким образом. Т. е. мои индексы 398, 1205-1, 4299-2 и 7891-3. Это позволяет упорядочить все видео.