Как извлечь аудиоканал из видеофайла MP4 в отдельный аудиофайл?

Как извлечь аудиоканал из видеофайла MP4 в отдельный аудиофайл?

Имея видеоклип MPEG4 (контейнер MP4, видео H264 AVC, аудио AAC), загруженный с YouTube, как отделить его аудиоканал в независимый аудиофайл (желательно без де- и повторного сжатия звука) с помощью бесплатных инструментов Linux?

решение1

При рассмотрении видео на Youtube извлечение звука из видео может не потребоваться, посколькуаудиодорожки можно скачать отдельнокак таковой, используя Firefox с последним дополнением Flashgot или используяmps-youtube(это инструмент, предназначенный для воспроизведения и загрузки аудиодорожек с YouTube: подробнеездесь).


Рассматриваем видеофайлы mp4:

Как ответилиздесь, можно использовать более общую команду без необходимости указания конкретных имен файлов и добавить ее в пользовательское меню файлового менеджера, например:

ffmpeg -i "$0" -map 0:1 -c:a copy "${0%%.*}".m4a

(Использование .m4aпредпочтительнее, поскольку оно более широко поддерживается в качестве контейнера для , но при желании .aacвы можете использовать вместо него raw .).aac

Кроме того, эта команда, запущенная в терминале, извлечет аудиодорожки из всех файлов mp4 в текущей папке:

for i in *.mp4; do ffmpeg -i "${i}" -map 0:1 -c:a copy "${i%.mp4}.m4a"; done

(здесьисходный пост)


См. комментарии и сопутствующую информацию в связанных ответах и ​​вопросах о том, как использовать такие команды в контекстных меню файловых менеджеров.


Вышеуказанные и другие подобные команды можно использовать также для извлечения аудио из других типов видеофайлов, заменив соответствующим образом входные и выходные расширения.

Первая команда работает так же для flv; но для других видео просто замените m4aна любой аудиофайл, содержащийся в видеоклипе. Вторая команда требует замены как видео, так и аудиорасширений, если применяется к разным типам видеофайлов.

Обычно, mp4и flvфайлы содержат aacаудио, Webmфайлы содержат oggи aviфайлы содержат mp3аудио. Чтобы убедиться, что аудио содержится в видео, используйте mediainfo:mediainfo-GUI, или просто установите mediainfoи в Терминале: mediainfo <file>.

решение2

Если вы знаете, что есть только 1 аудиопоток и что это aac, то вам нужно только это:

ffmpeg -acodec copy -i "movie.mp4" -y "audio.aac"

Если вы хотите записать идентификатор первого аудиопотока и тип кодека/расширение файла, вы можете использовать это:

eval $(ffmpeg -i "movie.mp4" 2>&1 |awk '/Stream.*Audio/{print "stream=" $2 ";codec=" $4}' |head -n1)
stream=${stream:1}; stream=${stream/:/}
extn=${codec/,/}; [[ $extn == "aac" ]] || 
    { echo "You need to manually set the fiie extension. Codec type is: $codec"; exit 1; } 

ffmpeg -map $stream -acodec copy -i "movie.mp4" "audio.$extn"

Связанный контент