Как извлечь звук из видео без лишней потери качества
Чтобы получить звук из видео без потери качества, скопируйте существующую аудиодорожку в новый файл, не перекодируя её. Это возможно, когда аудиокодек подходит контейнеру нового файла. Если нужен другой формат, например MP3 для приложения, которое принимает только его, звук придётся декодировать и закодировать заново, а формат с потерями немного ухудшит качество. Переименование файла не работает никогда, а сохранение в WAV не вернёт детали, которые исходное сжатие уже отбросило.
Какой способ подойдёт, зависит от того, где видео: файл на компьютере или ролик, который воспроизводится в браузере. Ниже разобраны оба случая.
Извлечение, конвертация, выбор дорожки и отключение звука – разные задачи
Под этим запросом люди имеют в виду разное, и инструмент для каждого случая свой:
- Извлечение вынимает существующий аудиопоток из видео в отдельный файл.
- Конвертация превращает звук в другой формат или кодек. Звук при этом кодируется заново.
- Выбор дорожки – выбор одной из нескольких аудиодорожек видео, например языковой или с комментариями. Это нужно сделать до извлечения.
- Отключение звука убирает звук из видео и оставляет картинку. Это обратная задача.
Из-за путаницы возникают привычные сюрпризы: извлечённый файл не на том языке, файл без звука или звук хуже оригинала.
Копировать или конвертировать: от этого зависит качество
Звук внутри видеофайла уже сжат кодеком вроде AAC, MP3 или Opus. В документации FFmpeg описано два способа обращения с ним:
- Stream copy передаёт закодированный звук из источника в новый файл без декодирования и кодирования. Со звуком ничего не происходит. Описание streamcopy в FFmpeg говорит ровно это: пакеты копируются без декодирования, фильтрации и кодирования.
- Перекодирование декодирует звук и кодирует его снова. В заметках о перекодировании FFmpeg указано, что кодирование затратно и в большинстве случаев ухудшает качество потока, поэтому применять его стоит, когда это необходимо, например когда целевое устройство не может декодировать исходный кодек.
Stream copy требует совместимого результата. Звук AAC, к примеру, обычно можно записать в файл .m4a как есть. Если вы просите MP3, а звук AAC, копирование невозможно: звук придётся конвертировать, а MP3 – формат с потерями. Не всякая конвертация с потерями: целевой формат без потерь, например FLAC, не отбрасывает дополнительной информации. Но он и не возвращает то, что потеряно в оригинале, а файл при том же звуке получается больше.
Это ответ на популярный вопрос: WAV не улучшает качество звука, сжатого с потерями. Если исходник был AAC с умеренным битрейтом, WAV из него содержит куда больший по размеру вариант того же декодированного звука. Формат конвертации выбирайте ради совместимости, а не ради качества.
| Что нужно | Что происходит | Качество |
|---|---|---|
| Исходный звук в файле, который принимает его кодек | Stream copy | Без изменений |
| Другой формат с потерями (например MP3) | Перекодирование | Ещё одно поколение потерь |
| Формат без потерь (например WAV или FLAC) | Декодирование и хранение без новых потерь | Новых потерь нет, но прежние не восстанавливаются; файл больше |
| Видео без звука | Отключение звука, а не извлечение | Не применимо |
Если видео – файл на вашем компьютере
Используйте локальный инструмент, который открывает файл. С FFmpeg сначала выведите список аудиопотоков. В выводе для каждого потока указаны индекс и кодек, а у файла с несколькими дорожками будет несколько строк:
ffprobe -v error -select_streams a -show_entries stream=index,codec_name:stream_tags=language,title -of csv=p=0 input.mp4
Типичный результат выглядит как 1,aac,eng и 2,aac,spa: индекс потока, кодек и языковой тег, если он есть в файле. Индекс считается по всем потокам файла, включая видео. Если нужная дорожка – aac, её можно скопировать. Без -map FFmpeg выбирает аудиопоток по собственным правилам автоматического выбора, поэтому указывайте дорожку явно. -map 0:a:0 означает первый аудиопоток, а -map 0:a:1 – второй, при этом считаются только аудиопотоки:
ffmpeg -i input.mp4 -map 0:a:1 -c:a copy output.m4a
-map выбирает поток, а -c:a copy копирует его без изменений. FFmpeg отбрасывает видео, которое не указано в -map, поэтому -vn здесь не нужен. Если нужен MP3, из той же второй дорожки:
ffmpeg -i input.mp4 -map 0:a:1 -c:a libmp3lame -b:a 192k output.mp3
Это перекодирование. Выберите битрейт под задачу и не ждите, что более высокий битрейт улучшит звук, который уже был сжат с меньшим. Для файла с единственной аудиодорожкой -map 0:a:0 совпадает с выбором FFmpeg по умолчанию и его можно опустить, но вреда от него нет.
Подойдут и графические редакторы. Веб-инструменты вроде Riverside и Descript принимают загруженный файл и экспортируют выбранный формат. Это удобно, но на их страницах акцент сделан на выборе выходного формата, и не всегда ясно, получится ли копия исходного звука или новая кодировка. К тому же файл нужно загружать, а на странице Riverside указан лимит загрузки 100 МБ.
Если видео воспроизводится в браузере
Сначала проверьте, нет ли у издателя собственной загрузки аудио или иного разрешённого способа. Если нужен звук ролика, который страница загружает в браузере, его может сохранить расширение браузера.
MAX Video Downloader может сохранить исходную аудиодорожку из поддерживаемого медиа, найденного на странице, или конвертировать её в другой поддерживаемый формат, не раздувая битрейт. Он также умеет сохранять выбранные дорожки отдельно, а не сливать всё в один файл. Список форматов зависит от текущей версии, поэтому смотрите параметры расширения, а не рассчитывайте на конкретный формат. MAX работает с медиа, которое страница загружает в браузере, и не открывает файлы с диска, поэтому для локального файла используйте инструменты выше.
Если у видео несколько аудиодорожек
Во многих потоках есть несколько аудиодорожек, например языки или комментарии. В HLS альтернативный звук объявляется как отдельные представления, которые выбирает плеер, как описано в RFC 8216, а в DASH звук – поток, отдельный от видео. Поэтому какой звук вы получите, зависит от выбранной дорожки, и при извлечении можно получить не тот язык или, если аудиодорожка не выбрана, вообще никакого звука. Сначала посмотрите список дорожек. Как устроены такие потоки, объясняют статьи Как скачать видео DASH и Как скачать HLS.
Права и ограничения
Извлечение звука из видео, которое вы не вправе копировать, не делает его вашим. Используйте это для контента, которым вы владеете, на который есть лицензия или который издатель разрешает сохранять. MAX не поддерживает YouTube и защищённое DRM медиа, и ничто в этой статье не является способом обойти такие защиты.