FFMPEG — объединение двух аудиофайлов с заданным временем перекрытия

FFMPEG — объединение двух аудиофайлов с заданным временем перекрытия

Требование

Я хотел бы объединить два аудиофайла с предопределенным временем перекрытия.

Например, если определено перекрытие в 10 секунд, то конечные 10 секунд первого аудио и начальные 10 секунд второго аудио будут перекрываться в выходных данных.

|<---- 1st mp3 file -------------------->                       |
|                        <-----------2nd mp3 file ------------->|

result:
|<-----------------------(overlap 10 sec )--------------------->|

решение1

  1. Использоватьffprobeчтобы получить длительность1-го mp3-файла.

  2. Запустить 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документация.

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