Как добавить определенные отрезки тишины между треками с помощью ffmpeg?

Как добавить определенные отрезки тишины между треками с помощью ffmpeg?

Я хочу объединить несколько аудиофайлов с фоновым изображением, чтобы создать видео. Я знаю, что могу добавить аудиофайлы с картой, как

-i audio1.mp3 -i audio2.mp3 -map 0 -map 1 -map 2

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

решение1

Если я правильно понял ваш вопрос, вы можете предоставить несколько входных данных и объединить их:

ffmpeg \
  -loop 1 -i image.jpg
  -i audio1.wav \
  -f lavfi -t 5 -i anullsrc \
  -i audio2.wav \
  -filter_complex "[1:a][2:a][3:a]concat=n=3:v=0:a=1[outa]" \
  -map 0:v -c:v copy \
  -map "[outa]" -c:a aac -b:a 192k \
  -shortest \
  out.mkv

Что это делает:

  • Здесь используется одно изображение в качестве входа № 0 (но вы можете заменить его -f lavfi -i testsrcна ваш реальный видеофайл). Входы № 1 и № 3 — это два аудиофайла, которые вы хотите использовать.

  • Вход №2 — это фильтр, который генерирует пять секунд тишины.

  • Затем вы объединяете все аудиопотоки с помощью concatфильтра.

  • Например, чтобы добавить третий аудиофайл, вам нужно указать два дополнительных аудиовхода (тишину и вашу фактическую дорожку), добавить метку входа для фильтра concat(например, [4:a][5:a]) и увеличить n=3до n=5.

  • Выходной файл использует входное видео как есть ( -c:v copy), а аудио перекодируется с помощью AAC на 192 кбит/с. Требуется перекодировать аудиопоток, поскольку вы применяете фильтр.

  • Эта -shortestопция гарантирует, что кодирование закончится по окончании самого короткого (видео или аудио) потока.

Связанный контент