Пакетное слияние аудиофайлов по определенной отметке времени без перекодирования

Я хочу объединить аудиофайлы mp3 в пакетном режиме, где каждый отдельный файл имеет определенное время начала. Итак, ниже приведен порождение fluent-ffmpeg, которое я использую прямо сейчас, чтобы объединить 3 файла, каждый из которых начинается соответственно с 200, 7400 и 10600.

ffmpeg -i firstFile.mp3 -i secondFile.mp3 -i thirdFile.mp3 -filter_complex 
[0]adelay=200[a0];[1]adelay=7400[a1];[2]adelay=10600[a2];[a0][a1] 
[a2]amix=inputs=3:dropout_transition=1000,volume=3 -f mp3 pipe:1

Это работает довольно хорошо, за исключением того, что перекодирование более длинных файлов делает процесс очень долгим. Поэтому я хотел сделать то же самое, используя демультиплексор concat. Поскольку я уже знаю длину каждого аудиофайла, я поместил между ними беззвучные аудиофайлы, чтобы создать задержку до следующего аудиофайла, чтобы он фактически начинался в предполагаемой временной позиции.

#concatfile.txt

file silence.mp3
outpoint 200
file firstFile.mp3
file silence.mp3
outpoint 1500
file secondFile.mp3
file silence.mp3
outpoint 2000
file thirdFile.mp3

ffmpeg -f concat -safe 0 -i concatfile.txt -c copy output.mp3

Это решение также хорошо работает при объединении нескольких файлов, но когда я объединяю большее количество файлов, например 30 или 40, файл результата будет иметь медленно растущую проблему синхронизации, когда аудиофайлы фактически начинаются позже, чем метки времени начала, которые они должны иметь.

Похоже, проблема похожа на этот пост

Я открыт для любых предложений по решению проблемы.


person Saccarab    schedule 07.08.2019    source источник
comment
Проблема с синхронизацией с чем? Кажется, у вас есть только один поток на выходе - вы имеете в виду изменения скорости или высоты тона?   -  person Gyan    schedule 07.08.2019
comment
аудиофайл, который должен начинаться, скажем, в 0:30:25, начинается в 0:30:26, и все остальные аудиофайлы после этого также имеют задержку, как и при каждой операции concat, происходит переполнение 0,02 секунды.   -  person Saccarab    schedule 07.08.2019
comment
поэтому я предполагаю, что вопрос в том, имеет ли демультиплексор concat точность в миллисекундах. Потому что, например, если я объединяю 2 файла продолжительностью 0:01:00 и 0:01:20, результат часто бывает примерно 0:02:22.   -  person Saccarab    schedule 08.08.2019
comment
Хорошо, это не совсем ошибка, а следствие аудиокодека. См. stackoverflow.com/a/42415886. Я не проверял это, но вы можете попробовать добавить inpoint 0.026 для всех MP3 без звука.   -  person Gyan    schedule 08.08.2019
comment
Я пробовал добавлять 0,026, но это тоже не помогло. Я также пробовал inpoint с одним вкладышем ffmpeg для проверки. Я поместил только 2 аудиофайла в текстовый файл и соединил их, но результирующая продолжительность звука была такой же, как если бы я вообще не включал inpoint. Так что я не знаю, может быть, я делаю что-то не так с inpoints.   -  person Saccarab    schedule 08.08.2019
comment
Я внес изменения в текстовый файл с помощью inpoint 0.026, но вывод, который я получаю, имеет точно такую ​​​​же продолжительность, когда я не помещал его на первое место.   -  person Saccarab    schedule 08.08.2019