![Как добавить определенные отрезки тишины между треками с помощью ffmpeg?](https://rvso.com/image/1595528/%D0%9A%D0%B0%D0%BA%20%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%BE%D1%82%D1%80%D0%B5%D0%B7%D0%BA%D0%B8%20%D1%82%D0%B8%D1%88%D0%B8%D0%BD%D1%8B%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20%D1%82%D1%80%D0%B5%D0%BA%D0%B0%D0%BC%D0%B8%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20ffmpeg%3F.png)
Я хочу объединить несколько аудиофайлов с фоновым изображением, чтобы создать видео. Я знаю, что могу добавить аудиофайлы с картой, как
-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
опция гарантирует, что кодирование закончится по окончании самого короткого (видео или аудио) потока.