Требование
Я хотел бы объединить два аудиофайла с предопределенным временем перекрытия.
Например, если определено перекрытие в 10 секунд, то конечные 10 секунд первого аудио и начальные 10 секунд второго аудио будут перекрываться в выходных данных.
|<---- 1st mp3 file --------------------> |
| <-----------2nd mp3 file ------------->|
result:
|<-----------------------(overlap 10 sec )--------------------->|
решение1
Использовать
ffprobe
чтобы получить длительность1-го mp3-файла.Запустить
ffmpeg
с помощьюзадержказадержать звук исмесьчтобы смешать два аудиопотока в один:ffmpeg -i 1.mp3 -i 2.mp3 -filter_complex "[1]adelay=Ns|Ns[a1];[0:a][a1]amix=inputs=2[a]" -map "[a]" output.mp3
Ns
=1.mp3 duration
-overlap duration
. Например, если1.mp3
длительность составляет 30 секунд, а вы хотите наложение длительностью 10 секунд, то используйте20s|20s
.Предполагается,
2.mp3
что это стерео.Если у вас
ffmpeg
версия старше 4.2, то используйте в adelay миллисекунды вместо секунд, как в20000|20000
.-map "[a]"
говоритffmpeg
использовать вывод из amix, который произвольно помечен[a]
. В противном случае,поведение выбора потока по умолчаниюбудет использоваться. Если вас это устраивает и вы понимаете последствия, то можете смело опускать метку и-map
(например,...amix=inputs=2" output.mp3
). Также см.-map
документация.