Используя FFmpeg, я пытаюсь объединить много аудиофайлов в один длинный, с перекрестным затуханием между каждым из них. Для простоты, скажем, у меня есть 10 входных файлов, каждые 5 минут, и я хочу 10-секундное перекрестное затухание между каждым. (Итоговая продолжительность будет 48:30.) Предположим, что все входные файлы имеют одинаковый кодек / битрейт.
Я был приятно удивлен, обнаружив, как просто было смешать два файла:
ffmpeg -i 0.mp3 -i 1.mp3 -vn -filter_complex acrossfade=d=10:c1=tri:c2=tri out.mp3
Но фильтр acrossfade
не допускает более 3 входов. Поэтому мое наивное решение состоит в том, чтобы повторно запустить ffmpeg
, смешивая предыдущий промежуточный вывод со следующим входным файлом. Это не идеально. Это приводит меня к двум вопросам:
1. acrossfade
ли без потерь без потерь потоки? (За исключением случаев, когда они активно затухают, конечно.) Или все входные потоки перекодируются?
Если входные потоки полностью перекодированы, то мой наивный подход очень плох. В приведенном выше примере (вызовы acrossfade
9 раз) первые 4:50 первого файла будут перекодированы 9 раз! Если я объединяю 50 файлов, первый файл перекодируется 49 раз!
2. Чтобы избежать многократных запусков и проблемы перекодирования, могу ли я добиться многопереходного поведения в одном вызове ffmpeg
?
Я предполагаю, что мне понадобится какой-то длинный фильтр-график, но я еще не понял этого. У кого-нибудь есть пример кроссфейдинга всего 3 входных файлов? Исходя из этого, я могу автоматизировать графы фильтров для более длинных цепочек.
Спасибо за любые советы!