автоматически извлекать звуковую дорожку и имя файла из видео с помощью avconv

Я пишу скрипт bash для автоматического извлечения звуковой дорожки из видеофайла с помощью avconv. Этот скрипт должен работать с любым форматом видео и извлекать только звуковую дорожку без сохранения исходного преобразования кодека. Например:

extract_audio name.flv

где звуковая дорожка файла flv является mp3, должен создать файл с именем name.mp3, но если он содержит и дорожку aac, он должен автоматически создать файл name.aac

Пока мой скрипт выглядит так:

#!/bin/bash
dryname=${1%.*} #get remove video extention
avconv -i "$1" -vn -acodec copy "${dryname}.${audio_extension}"

Единственная часть, которую я пропускаю, - это то, как использовать кодек в звуковой дорожке видеофайла. Я уверен, что это можно сделать с помощью команды avconv, но я не могу понять это на странице справки.


person Antoine Gallix    schedule 18.11.2014    source источник


Ответы (2)


Вы можете сначала выполнить приведенную ниже команду, чтобы проверить информацию о кодеке, а затем выполнить извлечение с правильным суффиксом.

$ avconv -i test.mp4 2>&1 |grep Audio
    Stream #0.0(eng): Audio: aac, 44100 Hz, stereo, fltp, 62 kb/s (default)
person lucky1928    schedule 18.11.2014

person    schedule
comment
Возможно, avprobe будет лучше, чем avconv -i. - person v010dya; 19.11.2014
comment
И avconv -i, и avprobe дают одинаковый вывод о видео и аудио данных. Таким образом, не имеет значения, какой из них вы используете. - person ajaaskel; 20.11.2014
comment
Именно так, но 'avconv -i' выполняет больше операций, поэтому, если все, что вам нужно, это вывод, вы должны использовать правильный инструмент для работы. - person v010dya; 20.11.2014
comment
Вдохновленный вашим ответом, я нашел решение, используя только grep: audio_extention=$(avprobe "$1" 2>&1 | grep -oP '(?<=Audio: ).*?(?=,)') - person Antoine Gallix; 27.11.2014