Вы говорите, что хотите «извлечь аудио из них (mp3 или ogg)». Но что, если аудио в файле mp4 не является одним из них? в любом случае вам придется перекодировать. Так почему бы не оставить определение аудио формата до ffmpeg?
Чтобы конвертировать один файл:
ffmpeg -i videofile.mp4 -vn -acodec libvorbis audiofile.ogg
Чтобы преобразовать много файлов:
for vid in *.mp4; do ffmpeg -i "$vid" -vn -acodec libvorbis "${vid%.mp4}.ogg"; done
Конечно, вы можете выбрать любые параметры ffmpeg для аудио кодирования, которые вам нравятся, установить такие параметры, как битрейт и так далее.
Используйте -acodec libmp3lameи измените расширение с .oggна на .mp3для кодирования mp3.
Если вы действительно хотите извлечь аудио, вы можете просто «скопировать» звуковую дорожку в файл, используя -acodec copy. Конечно, основное отличие состоит в том, что транскодирование выполняется медленно и интенсивно, но копирование выполняется очень быстро, поскольку вы просто перемещаете байты из одного файла в другой. Вот как скопировать только звуковую дорожку (при условии, что она в формате mp3):
ffmpeg -i videofile.mp4 -vn -acodec copy audiofile.mp3
Обратите внимание, что в этом случае формат аудиофайла должен соответствовать тому, что имеет контейнер (т. Е. Если аудио имеет формат AAC, вы должны сказать audiofile.aac). Вы можете использовать ffprobeкоманду, чтобы увидеть, какой кодек у вас есть, это может предоставить некоторую информацию:
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -print_format csv=p=0 "videofile.mp4"
Возможный способ автоматического анализа аудиокодека и присвоения ему аудиофайла соответственно:
mkdir -p output
# current directory has to contain at least one .mp4 file
for vid in *.mp4; do
codec="$(ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -print_format csv=p=0 "$vid")"
case "$codec" in
mp3 ) filetype=mp3 ;;
vorbis ) filetype=ogg ;;
* ) filetype= ;;
esac
if [ "$filetype" ]; then
ffmpeg -i "$vid" -vn -acodec copy output/"${vid%.*}"."$filetype"
else
ffmpeg -i "$vid" -vn -acodec libvorbis output/"${vid%.*}".ogg
done
Примечания: выходные файлы создаются в подкаталоге, который outputон создает в начале (при необходимости). Для других кодеков, кроме mp3 и vorbis, он конвертирует аудио в ogg. Ubuntu 14.04 не имеет ffmpeg в стандартных репозиториях, но вы можете добавить ppa: mc3man / trusty-media repository и установить пакет ffmpeg для получения необходимого программного обеспечения. Смотрите здесь для деталей.