Вы говорите, что хотите «извлечь аудио из них (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 для получения необходимого программного обеспечения. Смотрите здесь для деталей.