Конкатенация FFmpeg, нет звука в окончательном выводе

У меня есть следующая команда, работающая в ffmpeg, которая добавляет 1 секунду черного кадра в начало видео. Однако я теряю звук исходного видео в выходном видео. Как я могу настроить команду, чтобы убедиться, что исходный звук остается с окончательным выводом, или, что еще лучше, есть 1 секунда «пустого» звука в начале, чтобы он соответствовал новому выходному видео.

ffmpeg -i originalvideo -f lavfi -i color=c=black:s=1920x1080:r=25:sar=1/1 -filter_complex "[0:v] setpts=PTS-STARTPTS [main]; [1:v] trim=end=1,setpts=PTS-STARTPTS [pre]; [pre][main] concat=n=2:v=1:a=0 [out]" -map "[out]" finaloutputvideo.mp4

person user4889724    schedule 12.09.2016    source источник


Ответы (1)


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

ffmpeg \
-i originalvideo \
-f lavfi -i color=c=black:s=1920x1080:r=25:sar=1/1:d=1 \
-t 1 -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 \
-filter_complex \
"[0:v]setpts=PTS-STARTPTS[mainv]; \
 [0:a]asetpts=PTS-STARTPTS[maina]; \
 [1:v][2:a][mainv][maina]concat=n=2:v=1:a=1[v][a]" \
-map "[v]" -map "[a]" -movflags +faststart output.mp4
  • Вы можете удалить фильтры (a) setpts для исходных фильтров color и anullsrc, поскольку их временные метки начинаются с 0.

  • Вы можете избежать обрезки фильтра, потому что вы можете установить продолжительность для каждого фильтра.

  • Значение -t для длительности anullsrc должно быть только меньше или равно продолжительности черного видео: фильтр concat автоматически дополнит остальную часть тишиной.

  • С помощью anullsrc убедитесь, что вы соответствуете правильной компоновке каналов и частоте дискретизации звука вашего основного видео; в противном случае concat может автоматически выбрать «общий» макет и рейтинг, который может быть не тем, что вам нужно.

person llogan    schedule 12.09.2016
comment
Как бы то ни было, мне было проще добавить пустой звук в мой файл и делать простой concat вместо того, чтобы печатать что-то вроде этого. - person Hendy; 04.05.2018
comment
@Hendy Это тоже допустимый метод, особенно если фильтрация не требуется, а пользователь просто хочет объединить с помощью демультиплексора concat и избежать повторного кодирования. Однако, если для всех сегментов требуется дополнительная фильтрация, тогда потребуется перекодирование, и все можно сделать одной командой с помощью фильтра concat. Просто зависит от потребностей пользователей. На этом сайте много примеров использования обоих методов. - person llogan; 04.05.2018