Конкатенация видеоклипа с изображением stati c приводит к ошибкам в буфере - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь объединить 15-секундный клип видео (MOVIE.mp4) с 5 секундами (без звука) изображения (IMAGE.jpg), используя FFmpeg.

Что-то кажется Неправильно с моим фильтром, хотя я не могу определить, что. Собранная мною команда выглядит следующим образом:

ffmpeg \
-loop 1 -t 5 -I IMAGE.jpg \
-t 15 -I MOVIE.mp4 \
-filter_complex "[0:v]scale=480:640[1_v];anullsrc[1_a];[1:v][1:a][1_v][1_a]concat=n=2:v=1:a=1[out]" \
-map "[out]" \
-strict experimental tst_full.mp4

К сожалению, это, кажется, приводит к некоторым странным результатам:

  1. На моем персональном компьютере (FFmpeg 4.2.1) он правильно объединяет mov ie с изображением stati c; однако изображение stati c сохраняется неограниченное время. (После ввода ctrl-C mov ie все еще отображается, но имеет очень большую длину - например, 35 минут - в зависимости от того, когда я прерываю процесс.)

  2. На удаленной машине, где мне нужно выполнить окончательную обработку видео (FFmpeg 2.8.15-0ubuntu0.16.04.1), команда не завершается, и вместо этого я получаю каскадные ошибки следующего вида:

Past duration 0.611458 too large
...
[output stream 0:0 @ 0x21135a0] 100 buffers queued in output stream 0:0, something may be wrong.
...
[output stream 0:0 @ 0x21135a0] 100000 buffers queued in output stream 0:0, something may be wrong.

Мне не удалось найти много документации, объясняющей, что означают эти ошибки, поэтому я не знаю, что происходит не так.

1 Ответ

2 голосов
/ 15 февраля 2020

Как указал Гьян , вам нужно всего лишь добавить atrim к вашему аудио:

anullsrc,atrim=0:5[silent-audio]

Вместо scale вы можете использовать scale2ref и setsar, чтобы автоматически сделать изображение таким же размером и соотношением сторон, как у видео.

ffmpeg \
-loop 1 -t 5 -i IMAGE.jpg \
-t 15 -i MOVIE.mp4 \
-filter_complex "[0:v][1:v]scale2ref[img][v];[img]setsar=1[img]; \
anullsrc,atrim=0:5[silent-audio];[v][1:a][img] 
[silent-audio]concat=n=2:v=1:a=1[out]" \
-map "[out]" \
-strict experimental tst_full.mp4

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

ffmpeg \
-t 15 -i MOVIE.mp4 \
-loop 1 -t 5 -i IMAGE.jpg \
-f lavfi -t 5 -i anullsrc \
-filter_complex "[1:v][0:v]scale2ref[img][v];\
[img]setsar=1[img];[v][0:a][img][2:a]concat=n=2:v=1:a=1[out]" \
-map "[out]" \
-strict experimental tst_full.mp4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...