
Имея видеоклип 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"