2

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

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

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

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

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

1 ответ1

1

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

Существует несколько утомительный обходной путь, основанный на тройном мультиплексоре, и определение максимального количества аудиопотоков, с которыми вы можете столкнуться. Допустим, это 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+

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .