Почему преобразование из MP3 в WAV (PCM) без потерь?

2423
Robin Hood

Я понимаю, что при преобразовании между аудиоформатами, в которых не используется потоковое кодирование, например при преобразовании между WAV (PCM), AIFF, FLAC, ALAC, WMA Lossless и т. Д., Процесс обычно выполняется без потерь, поскольку аудиопоток PCM просто копируется в новый контейнер. В зависимости от типа контейнера, он может быть запущен с помощью алгоритма сжатия, чтобы сэкономить место, но это все еще битовые идентичные данные. Вы также можете сделать то же самое с файлом MP4 (AAC), скопировав аудиопоток AAC в файл контейнера MKA; все это без потерь, потому что нет перекодирования аудиопотока.

Я понимаю, что при преобразовании между форматами, такими как ранее перечисленные WAV (PCM), ALAC, FLAC и т. Д., В формат, который не поддерживает кодирование аудиопотока, преобразование должно включать перекодирование. Например, при преобразовании в форматы, такие как MP3, MP4 (AAC), OGG (Vorbis), WMA Lossy и т. Д., Исходный аудиопоток перекодируется и, как таковые, данные отбрасываются. Новый файл будет худшего качества.

Что я не могу обернуть головой, так это то, почему преобразование MP3 в WAV (PCM) без потерь (или ALAC, FLAC и т. Д.). Аудиопоток перекодируется, поэтому новый аудиопоток не может быть хуже, чем аудиопоток MP3? Просветите меня.

6
Вообще говоря, он только декодируется, а затем сохраняется как несжатый. Все потери произошли, когда материал был брошен в MP3. Лучший способ сказать, что «нет больше потерь». Если у вас есть Jpeg, и вы распаковываете его до полного растрового изображения (что происходит в большинстве программ рисования и обработки), у вас не будет добавленных потерь, потому что он просто декодируется. Если вы затем сохраните его как нечто, что делает что-то, чтобы сделать его меньше, то вы перекодируете его, и у вас снова будут потери. Если бы вы перекодировали его в другой формат с потерями, он был бы декодирован и снова закодирован с потерями. Psycogeek 9 лет назад 6
Преобразование между контейнерами PCM в * только * без потерь, если и только если частота дискретизации и разрешение / битовая глубина точно одинаковы. Даже повторная выборка с более высокой частотой или разрешением приводит к результату с потерями. agtoever 9 лет назад 4

2 ответа на вопрос

9
Robin Hood

PCM - один из наиболее часто используемых аудиокодеков; большинство компьютеров (а также многие устройства) используют его по умолчанию для вывода / ввода звука. Весь звук, который слышен на этом устройстве, будь то из файла или с входа микрофона, записан в формате PCM, и он используется для восстановления приближенного значения оригинальных аналоговых звуков.

Когда вы делаете цифровую аудиозапись с помощью микрофона в системе, которая использует PCM для вывода / ввода звука, аудиопоток является PCM. Когда вы без потерь сохраняете эту запись как WAV, FLAC, WMA Lossless, ALAC, AIFF и т. Д., Процесс кодирования не выполняется, аудиопоток просто помещается в новый файл контейнера, это все еще поток PCM, интерпретируемый вашей системой с аналогового звуки реального мира.

Форматы без потерь можно разделить на 2 типа: сжатые и несжатые. Несжатые форматы, такие как WAV и AIFF, просто хранят аудиопоток PCM. Сжатые форматы, такие как FLAC, ALAC и WMA Lossless, управляют потоком данных с помощью алгоритма сжатия для экономии места, например, в виде zip-архива. Данные не меняются, они просто сохраняются более эффективно; это все еще закодировано как PCM.

Если вы затем возьмете экспорт без потерь и конвертируете его в MP3 со скоростью 128 кбит / с, потребуется перекодирование. Кодирование означает организацию данных аудиопотока по-новому; это процесс без потерь. Однако нет никаких кодеков, насколько мне известно, которые делают это, потому что это было бы бессмысленно. Файл будет звучать одинаково, воспроизведение потребует декодирования аудио, что означает, что требуется больше системных ресурсов, и он будет того же размера, что и исходный файл. Поэтому такие кодеки, как MP3, WMA Lossy, AAC, Vorbis (OGG) и т. Д. Также выполняют дополнительные операции. Обычной операцией является удаление данных, которые считаются менее важными. Отказ от данных приводит к меньшему размеру файла.

Нижеследующее не является идеальной аналогией, но я думаю, что это все понятно.

Допустим, что « I hate you Sarah!», написанное на листе бумаги, представляет аудиопоток PCM в файле WAV, который вы без потерь экспортировали после выполнения записи.

Кодирование этих данных в другом формате кодирования было бы эквивалентно смешиванию букв с надписью « h Iyae oSr! haatu». Программное обеспечение для декодирования знает, как этот кодек организует данные, чтобы он мог размешать сообщение.

Однако, как обсуждалось, форматы, такие как MP3, также отбрасывают данные во время процесса кодирования. Таким образом, сообщение MP3 будет больше похоже на " h I Sr! h tu", а при декодировании (без перемешивания) оно будет выглядеть примерно так " I h t u S r h!". Если вы прочитаете это обратно, вы все равно получите сообщение, но исключение букв немного изменит звук. Чем больше вы исключаете, тем хуже становится, пока не достигнете точки, когда вы больше не сможете понять исходное сообщение.

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

Если вы должны были преобразовать MP3 в файл WAV, технически вы декодируете в PCM, а затем сохраняете поток PCM, поэтому WAV больше, чем MP3. Потеря данных не происходит, потому что поток MP3 всегда был просто представлением для потока PCM. Спецификация кодека сообщает декодеру, как декодировать MP3 обратно в формат PCM. Если вы должны были преобразовать MP3 в AAC со скоростью 128 кбит / с, то на самом деле происходит то, что MP3 декодируется в PCM, а затем поток PCM кодируется как AAC. Процесс кодирования из PCM в AAC приводит к дальнейшей потере данных, потому что "I h t u S r h!"рассматривается как исходное сообщение. Обратите внимание, что буквы не сжаты вместе. Когда файл AAC создан, он не будет знать, что пробелы из исключенных букв не являются частью сообщения при попытке выяснить, что безопаснее отбросить Вот почему перекодирование данных с той же скоростью передачи битов приводит к ухудшению качества.

0
Jente

Итак, вы говорите, что если вы перекодируете MP3 в WAV, то это без потерь? WAV - это несжатый формат без потерь, MP3 - это формат с потерями. Форматы с потерями всегда сжимаются. Когда вы преобразуете код с потерями в без потерь, вы получите файл, который выглядит без потерь, но на самом деле это не так.

Вы можете проверить это, применив «спектральный анализ» к файлу. Изображение ниже показывает файл без потерь, который транскодируется из MP3. Вы видите полку на 16 кГц? В несжатом файле без потерь (таком как WAV) полка не должна быть там.

enter image description here

Действительно хорошая информация о транскодировании: https://www.whatinterviewprep.com/prepare-for-the-interview/spectral-analysis/

Небольшая деталь: MP3 - это аудиокодек. WAV - это контейнерный формат, поэтому он не имеет потерь или потерь. Аудио PCM - это то, что обычно хранится в WAV-контейнерах, а PCM без потерь. slhck 9 лет назад 4

Похожие вопросы