Есть ли разница между этими двумя командами для извлечения аудио из видео?
ffmpeg -i input.mp4 -c copy -map 0:a output.wav
ffmpeg -i input.mp4 -vn -acodec copy output.wav
Если ваш файл mp4 содержит только одну звуковую дорожку, то обе команды имеют одинаковый результат.
Есть по крайней мере одно существенное отличие в случае, когда ваш mp4 содержит несколько звуковых дорожек / потоков (я не имею в виду несколько каналов в потоке).
Контейнер WAV допускает только одну звуковую дорожку, поэтому вы используете -map 0:a
он потенциально попытается скопировать более одной звуковой дорожки в ваш файл WAV, что приведет к ошибке, подобной следующей:
Stream mapping:
Stream #0:2 -> #0:0 (copy)
Stream #0:3 -> #0:1 (copy)
Stream #0:4 -> #0:2 (copy)
Stream #0:5 -> #0:3 (copy)
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Ваша команда, которая не указывает отображение, не выдаст ошибку, так как по умолчанию ffmpeg выводит только одну дорожку каждого типа, если отображение не указано.
Кроме того, вам не нужно указывать -vn
при использовании -acodec copy
и указании контейнера WAV, так как ffmpeg автоматически не будет пытаться включить видео в WAV.