Прямой ответ
Аудиодорожка извлекается отключением видеопотока, поэтому сохранение без перекодирования сохраняет исходное качество звучания.
| Параметр | Что определяет |
|---|---|
| -vn | Отключение видеопотока |
| -c:a copy | Сохранение потока без перекодирования |
| -map | Выбор конкретной дорожки |
| Формат вывода | Контейнер извлечённого аудио |
ffmpeg -i input.mp4 -vn -c:a copy output.m4a
Поток копируется без декодирования, поэтому качество звучания не меняется, а длительность совпадает с исходным файлом. О командах — в статье про FFmpeg.
Выбор дорожки при нескольких потоках
Источник может содержать несколько аудиодорожек, поэтому выбор дорожки указывается явно, иначе используется поток по умолчанию.
Несколько дорожек. Файл может содержать дорожки на разных языках либо с разным числом каналов, поэтому состав потоков читается до извлечения.
Явный выбор. Номер потока указывается явно, поэтому извлекается нужная дорожка, а не поток по умолчанию.
Проверка состава. Список потоков источника читается отдельно, поэтому число дорожек и их параметры известны до извлечения.
Практическое следствие: извлечение без явного выбора дорожки даёт поток по умолчанию, который может не соответствовать нужному языку либо числу каналов.
Отдельный аспект — число каналов. Дорожка может содержать несколько каналов, поэтому извлечение с сохранением потока сохраняет исходное число каналов, а конвертация может изменить раскладку.
Сохранение без перекодирования и конвертация
Сохранение потока без перекодирования сохраняет исходное качество, поэтому перекодирование применяется только при требовании к формату.
Копирование потока. Аудиопоток переносится в новый контейнер без декодирования, поэтому качество не меняется.
Перекодирование. Поток декодируется и кодируется иным кодеком, поэтому формат меняется, а качество зависит от параметров кодирования.
Ограничение сочетаний. Не каждый кодек допустим в произвольном контейнере, поэтому сочетание аудиокодека и формата вывода проверяется.
Практическое следствие: перекодирование, выполненное без необходимости, снижает качество, поскольку поток кодируется повторно с потерями.
Формат вывода и проверка результата
Формат вывода определяет контейнер извлечённого аудио, поэтому сочетание кодека и контейнера должно быть допустимым.
Контейнер вывода. Формат файла задаёт упаковку аудиопотока, поэтому расширение соответствует контейнеру.
Сочетание с кодеком. Кодек, недопустимый в выбранном контейнере, приводит к ошибке либо к неявному перекодированию.
Проверка длительности. Длительность извлечённого файла сравнивается с длительностью источника, поэтому неполное извлечение обнаруживается.
Практическое следствие: извлечённый файл меньшей длительности, чем источник, указывает на обрыв обработки, который не всегда сопровождается ошибкой.
О нормализации громкости — в статье про обработку аудио; о кодеках — в статье про конвертацию видео.
Частота дискретизации и число каналов
Параметры аудиопотока определяют качество звучания, поэтому сохранение потока оставляет исходные значения без изменения.
Частота дискретизации. Число отсчётов сигнала в секунду определяет детализацию звучания, поэтому значение сохраняется при копировании потока без изменений.
Число каналов. Раскладка каналов определяет объёмное либо стереофоническое звучание, поэтому конвертация может изменить раскладку, а копирование сохраняет её.
Разрядность. Число разрядов отсчёта определяет динамический диапазон, поэтому значение сохраняется при копировании потока.
Практическое следствие: перекодирование аудиопотока меняет параметры звучания, поэтому сохранение без перекодирования оставляет исходную частоту дискретизации и раскладку каналов.
Отдельный аспект — целевое устройство. Проигрыватель может не поддерживать исходную раскладку каналов, поэтому конвертация с изменением числа каналов применяется по требованию устройства, а не по умолчанию.
Практика: извлечение аудиодорожки
1. Читайте состав потоков источника. Число дорожек и их параметры известны до извлечения, поэтому выбор выполняется осознанно.
2. Выбирайте дорожку явно при нескольких потоках. Извлекается нужная дорожка, а не поток по умолчанию.
3. Отключайте видеопоток при извлечении. В выходной файл попадает только аудио, поэтому размер файла сокращается.
4. Сохраняйте поток без перекодирования, когда формат допустим. Качество звучания не меняется, поскольку декодирование не выполняется.
5. Перекодируйте только при требовании к формату. Повторное кодирование снижает качество, поэтому применяется по необходимости.
6. Проверяйте сочетание кодека и контейнера вывода. Недопустимое сочетание приводит к ошибке либо к неявному перекодированию.
7. Сравнивайте длительность результата с источником. Неполное извлечение обнаруживается по расхождению длительности.
Рекомендации:
- Не перекодируйте поток без необходимости. Повторное кодирование вносит потери, поэтому качество снижается.
- Учитывайте число каналов дорожки. Сохранение потока сохраняет раскладку, а конвертация может её изменить.
- Сопоставляйте формат вывода с требованием потребителя. Контейнер должен поддерживать извлечённый кодек.
- Фиксируйте команду извлечения в скрипте. Повторная обработка даёт одинаковый результат.
- Пересматриваем выбор дорожки при изменении источника. Новый файл может содержать иной набор дорожек.
Практический сценарий: извлекалась дорожка не на том языке
Контекст: извлечённое аудио оказалось на ином языке, чем требовалось, при этом файл содержал несколько звуковых дорожек.
- Диагностика. Чтение состава потоков показало, что файл содержал три аудиодорожки на разных языках. Извлечение выполнялось без явного выбора, поэтому использовалась дорожка по умолчанию.
- Причина. Номер потока не указывался, поэтому извлекался поток, помеченный как основной, а не требуемая дорожка.
- Действия. (а) Добавили чтение состава потоков источника в скрипт, чтобы число дорожек и их язык были видны до извлечения; (б) указали номер потока явно, чтобы извлекалась требуемая дорожка; (в) сохранили поток без перекодирования, чтобы качество звучания не менялось; (г) добавили сравнение длительности результата с источником, чтобы неполное извлечение обнаруживалось; (д) проверили несколько файлов с несколькими дорожками и убедились в корректном выборе.
- Результат. Извлекается дорожка на требуемом языке, поскольку номер потока указывается явно после чтения состава.
Вывод: извлечение без явного выбора потока использует дорожку по умолчанию, которая может не соответствовать требуемой. Чтение состава потоков и указание номера дают нужную дорожку без потери качества.
FAQ
Как извлечь аудио без потери качества? Отключением видеопотока и копированием аудиопотока без перекодирования. Декодирование не выполняется, поэтому качество не меняется.
Что делать, если в видео несколько аудиодорожек? Прочитать состав потоков и указать номер дорожки явно. Без явного выбора используется поток по умолчанию.
Когда нужно перекодировать извлечённое аудио? При требовании к иному формату, не поддерживающему исходный кодек. Повторное кодирование вносит потери, поэтому применяется по необходимости.
Как проверить полноту извлечения? Сравнением длительности извлечённого файла с длительностью источника. Расхождение указывает на обрыв обработки.
Источники: FFmpeg documentation, FFmpeg codecs, ffprobe — ссылки в шапке.