Наложение видео после установленного смещения времени с помощью FFmpeg
Я пытаюсь добавить наложения к входному видео с помощью ffmpeg, которые появляются через некоторое время после начала видео.
Основной способ добавления наложения:
ffmpeg -i in.avi -vf "movie=overlay.avi [ovl]; [in][ovl] overlay" out.avi
Но это добавляет оверлейное видео (или изображение) с начала входного видео до тех пор, пока не закончится одно из видео.
Я знаю, как компенсировать оверлейное видео с помощью movie=overlay.avi:seek_point=1.4
, но как насчет смещения на входном видео?
Я всегда мог закрепить видео в нужную точку, добавить наложение на второй клип, а затем сшить два, но это не очень эффективно.
Ответы
Ответ 1
Расширяясь проницательный, но спекулятивный ответ , видео действительно может быть легко перекрыто с помощью флага -itsoffset
.
Флаг -itsoffset
работает следующим образом:
-этофисное смещение (ввод)
Установите смещение времени ввода в секундах. Синтаксис [-] hh: mm: ss [.xxx] также поддерживается. Смещение добавляется к отметкам времени входных файлов. Задание положительного смещения означает, что соответствующие потоки задерживаются на сдвиговые секунды.
(NB: Несмотря на фразу "входной файл s", флаг действует только на вход, следующий за ним. Примечание: эта ошибка о смещениях, не применяемых к аудиопотокам. H/T attronics.)
Таким образом, наложение со смещением так же просто, как:
ffmpeg -i bg.avi -itsoffset 2 -i over.avi -filter_complex overlay out.avi
Это работает независимо от типа контейнера.
Ответ 2
В соответствии с ограниченной документацией наложения FFmpeg процесс ожидает, что как видео имеют то же значение timestamp
(например, 0: 00: 00: 00), чтобы синхронизировать ситуацию, а предупреждает, если не выполнено, то avi.out
будет иметь нежелательное смещение из видеофайла overlay.avi
.
Однако вы можете использовать этот факт и воспользоваться им!
Тогда можно предположить, что если видео overlay.avi
имеет начальный timestamp
с желаемым смещением, который требуется на входном видео in.avi
, тогда overlay.avi
видео будет срабатывать в том же timestamp
(предоставленном in.avi
), чтобы создать ожидаемый результат для видео out.avi
.
Единственная плохая новость: контейнер .avi
не имеет временных меток, в отличие от форматов файлов .mp4
или .mkv
. Вам нужно будет перейти к файловому формату, поддерживающему *timestamps*
для этого (например, overlay.mp4
или overlay.mkv
) для создания окончательного выходного видеофайла.