FFMPEG Как извлечь переменное количество аудиопотоков?

255
MurderOfPoes

Я пытаюсь сделать небольшой пакетный файл, который извлекает все аудио потоки при перетаскивании видео на него.

ffmpeg.exe -i "%1" -map 0:a? -c:a copy "%1~extracted.aac" 

Но это, кажется, перезаписывает один и тот же файл для каждого аудиопотока, который он находит.

Я не хочу указывать количество звуковых дорожек, так как оно может варьироваться.

Заранее спасибо за помощь!

2

1 ответ на вопрос

1
Gyan

Там нет прямого способа сделать это.

Существует несколько утомительный обходной путь, основанный на тройном мультиплексоре, и определение максимального количества аудиопотоков, с которыми вы можете столкнуться. Допустим, это 4.

Итак, команда

ffmpeg -i in.mp4 -c copy -map 0:a? -f tee "[select='a\:0':onfail=ignore]in-0.aac|[select='a\:1':onfail=ignore]in-1.aac| [select='a\:2':onfail=ignore]in-2.aac|[select='a\:3':onfail=ignore]in-3.aac" 

Будут созданы все четыре файла, но если размер равен нулю, то поток не существует. Итак, как только вы удалите все выходные данные нулевого размера, у вас будут все извлеченные потоки. FFmpeg не выбирает автоматически формат вывода, поэтому потоки должны быть AAC. Используйте последнюю версию ffmpeg, 4.0+

Удалил предыдущие комментарии, потому что я не использовал правильную версию ffmpeg. Ваше решение работает, спасибо! MurderOfPoes 6 лет назад 0