Как я могу воспроизвести аудиофайл (.mp3, .flac, .wav), а затем зациклить над ним (микшировать каждые несколько секунд) другой аудиофайл (wav) с помощью ffmpeg - PullRequest
0 голосов
/ 07 марта 2019

Я получил две разные команды.

ffmpeg -i input.mp3 -i second.mp3 -filter_complex "[0:a]atrim=end=10,asetpts=N/SR/TB[begin];[0:a]atrim=start=10,asetpts=N/SR/TB[end];[begin][1:a][end]concat=n=3:v=0:a=1[a]" -map "[a]" output

Эта команда вставляет second.mp3 в input.mp3. Кажется, всегда сохраняются параметры input.mp3. Он вставляет его точно за 10 секунд ввода .mp3.

Вот вторая команда:

ffmpeg -i input.mp3 -i second.mp3 -filter_complex "[1:a]adelay=10000|10000[1a];[0:a][1a]amix=duration:first" output

Эта команда ближе к моей конечной цели. Он воспроизводит input.mp3 и ровно через 10 секунд воспроизводит файл second.mp3 без остановки звука input.mp3 (я думаю, это называется микшированием?)

Моя конечная цель - создать final.mp3.

Его длительность всегда должна быть равна длительности input.mp3. Он должен сохранять частоту дискретизации, количество каналов и т. Д. Input.mp3

При воспроизведении final.mp3 он должен воспроизводить весь input.mp3. Но каждые 10-15 секунд он должен воспроизводить second.mp3 без остановки input.mp3. (Mix) Можно сказать, что я должен использовать «Вторая команда», но в цикле. Было бы здорово, если бы в ffmpeg для этого была команда из одной строки. Я работаю с flac, mp3 и wav, и обе команды были подходящими для этого.

Например:

input.mp3 может длиться 40 секунд.

second.mp3 может быть длиной 2 секунды.

Когда я играю в final.mp3, он будет длиться 40 секунд, но каждые 10-15 секунд (в произвольном порядке) он будет воспроизводить second.mp3 одновременно с input.mp3.

К сожалению, у меня нет опыта работы с ffmpeg, обе команды, которые я получил, являются ответами на вопросы здесь в stackoverflow. Надеюсь, кто-нибудь может мне помочь. Спасибо!

1 Ответ

0 голосов
/ 11 марта 2019

Я добавил, генерируя длинный код ffmpeg, используя php

-i input_mp3.mp3 -i second.wav -filter_complex "[1:a]adelay=2000|2000[1a];[1:a]adelay=19000|19000[2a];[1:a]adelay=34000|34000[3a];[1:a]adelay=51000|51000[4a];[1:a]adelay=62000|62000[5a];[1:a]adelay=72000|72000[6a];[1:a]adelay=85000|85000[7a];[1:a]adelay=95000|95000[8a];[1:a]adelay=106000|106000[9a];[1:a]adelay=123000|123000[10a];[1:a]adelay=139000|139000[11a];[1:a]adelay=154000|154000[12a];[1:a]adelay=170000|170000[13a];[1:a]adelay=184000|184000[14a];[1:a]adelay=197000|197000[15a];[1:a]adelay=212000|212000[16a];[1:a]adelay=224000|224000[17a];[1:a]adelay=234000|234000[18a];[1:a]adelay=248000|248000[19a];[1:a]adelay=262000|262000[20a];[1:a]adelay=272000|272000[21a];[1:a]adelay=288000|288000[22a];[0:a][1a][2a][3a][4a][5a][6a][7a][8a][9a][10a][11a][12a][13a][14a][15a][16a][17a][18a][19a][20a][21a][22a]amix=23:duration=first,dynaudnorm" output_mp3_dynaudnorm.mp3

-i input_wav.wav -i second.wav -filter_complex "[1:a]adelay=1000|1000[1a];[0:a][1a]amix=2:duration=first,dynaudnorm" output_wav_dynaudnorm.wav

-i input_flac.flac -i second.wav -filter_complex "[1:a]adelay=1000|1000[1a];[1:a]adelay=11000|11000[2a];[1:a]adelay=27000|27000[3a];[0:a][1a][2a][3a]amix=4:duration=first,dynaudnorm" output_flac_dynaudnorm.flac

Такой синтаксис работает. Также я добавил dynaudnorm, чтобы свести на нет отрицательный эффект amix ( проблема объема фильтра amix FFMPEG с входами различной длительности ) Даже при том, что утверждается, что dynaudnorm решает проблему amix, это не совсем верно, по крайней мере, в моем случае, где я использую это ~ 30 раз ...

Но последняя команда работает. Я задам новый вопрос, как улучшить результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...