Есть ли разница между аудио форматами MP3, AAC, FLAC и какой нужно использовать

Некоторое время назад я решил посвятить себя решению экзотической задачи - нарисовать волну wave-файла, как это делают аудио- и видеоредакторы, используя для этого Питон. В результате у меня получился небольшой скрипт, который вполне с этим справляется. Так, картинка выше сгенерирована им из песни «Under Pressure» группы Queen. Для сравнения - вид волны в аудиоредакторе:


Для разбора звука я использовал библиотеку numpy , а для построения графика - . Под катом я изложу основы работы с wav-файлами и алгоритм скрипта.

UPD1: коэффициент прореживания k лучше брать примерно k = nframes/w/32, подобрал эмпирически. Обновил картинки с новым коэффициентом.

WAV - это формат для хранения несжатого аудиопотока, широко используемый в медиаиндустрии. Его особенность в том, что для кодирования амплитуды выделяется фиксированное число бит. Это сказывается на размере выходного файла, но делает его очень удобным для чтения. Типичный wave-файл состоит из заголовочной части, тела с аудиопотоком и хвоста для дополнительной информации, куда аудиоредакторы могут записывать собственные метаданные.

Из заголовочной части извлекаются основные параметры - число каналов, битрейт, число фреймов - на основании которых осуществляется разбор аудиопотока. Wave-файл хранит в себе 1 или 2 канала, каждый из которых кодируется 8, 16, 24 или 32 битами. Последовательность бит, описывающая амплитуду волны в момент времени, называется сэмплом. Последовательность сэмплов для всех каналов в определенный момент называется фреймом.

Например, \xe2\xff\xe3\xfа - это фрейм 16-битного wav-файла. Значит, \xe2\xff - сэмпл первого (левого) канала, а \xe3\xfа - второго (правого). Сэмплы представляют собой целые знаковые числа (исключение - файлы с сэмплами в 8 бит, беззнаковые числа).

В богатой питоновской библиотеке есть модуль wave , предназначенный для парсинга wav-файлов. Он позволяет получить основные характеристики звука и читать его по отдельным фреймам. На этом его возможности кончаются и парсить аудиопоток придется самостоятельно.

Import wave wav = wave.open("music.wav", mode="r") (nchannels, sampwidth, framerate, nframes, comptype, compname) = wav.getparams() content = wav.readframes(nframes)
Этими строками мы создаем объект для чтения wav-файла (если параметр «r» опустить, то будет создан объект для записи, что нам не подходит). Метод getparams() возвращает кортеж основных параметров файла (по порядку): число каналов, число байт на сэмпл, число вреймов в секунду, общее число фреймов, тип сжатия, имя типа сжатия. Я вынес их всё в отдельные переменные, чтобы не обращаться каждый раз к полям объекта.

Метод readframes() считывает указанное число фреймов относительно внутреннего указателя объекта и инкрементирует его. В данном случае, мы за один раз считали все фреймы в одну байтовую строку в переменную content.

Теперь нужно разобрать эту строку. Параметр sampwidth определяет, сколько байт уходит на кодирование одного сэмпла:

  • 1 = 8 бит, беззнаковое целое (0-255),
  • 2 = 16 бит, знаковое целое (-32768-32767)
  • 4 = 32 бит, знаковое длинное целое (-2147483648-2147483647)
Разбор осуществляется следующим образом:

Import numpy as np types = { 1: np.int8, 2: np.int16, 4: np.int32 } samples = np.fromstring(content, dtype=types)
Здесь задействуется библиотека numpy. Ее основное предназначение - математические действия с массивами и матрицами. Numpy оперирует своими собственными типами данных. Функция fromstring() создает одномерный массив из байтовой строки, при этом параметр dtype определяет, как будут интерпретированы элементы массива. В нашем примере, тип данных берется из словаря «types», в котором сопоставлены размеры сэмпла и типы данных numpy.

Теперь у нас есть массив сэмплов аудиопотока. Если в нем один канал, весь массив будет представлять его, если два (или несколько), то нужно «проредить» массив, выбрав для каждого канала каджый n-ый элемент:

For n in range(nchannels): channel = samples
В этом цикле в массив channel выбирается каждый аудиоканал при помощи среза вида , где offset - индекс первого элемента, а n - шаг выборки. Но массив канала содержит огромное количество точек, и вывод графика для 3-минутного файла потребует огромных затрат памяти и времени. Введем в код некоторые дополнительные переменные:
duration = nframes / framerate w, h = 800, 300 DPI = 72 peak = 256 ** sampwidth / 2 k = nframes/w/32

Duration - длительность потока в секундах, w и h - ширина и высота выходного изображения, DPI - произвольное значение, необходимое для перевода пикселей в дюймы, peak - пиковое значение амплитуды сэмпла, k - коэффициент прореживания канала, зависящий от ширины изображения; подобран эмпирически.

Скорректируем отображение графика:
plt.figure(1, figsize=(float(w)/DPI, float(h)/DPI), dpi=DPI) plt.subplots_adjust(wspace=0, hspace=0)
Теперь цикл с выводом каналов будет выглядеть так:
for n in range(nchannels): channel = samples channel = channel if nchannels == 1: channel = channel - peak axes = plt.subplot(2, 1, n+1, axisbg="k") axes.plot(channel, "g") axes.yaxis.set_major_formatter(ticker.FuncFormatter(format_db)) plt.grid(True, color="w") axes.xaxis.set_major_formatter(ticker.NullFormatter())
В цикле делается проверка на число каналов. Как я уже говорил, 8-битный звук хранится в беззнаковых целых, поэтому его необходимо нормализовать, отняв от каждого сэмпла половину амплитуды.

Напоследок, установим формат нижней оси
axes.xaxis.set_major_formatter(ticker.FuncFormatter(format_time))
Сохраним график в картинку и покажем его:
plt.savefig("wave", dpi=DPI) plt.show()

Format_time и format_db - это функции для форматирования значений шкал осей абсцисс и ординат.

Format_time форматирует время по номеру сэмпла:
def format_time(x, pos=None): global duration, nframes, k progress = int(x / float(nframes) * duration * k) mins, secs = divmod(progress, 60) hours, mins = divmod(mins, 60) out = "%d:%02d" % (mins, secs) if hours > 0: out = "%d:" % hours return out
Функция format_db форматирует громкость звука по его амплитуде:
def format_db(x, pos=None): if pos == 0: return "" global peak if x == 0: return "-inf" db = 20 * math.log10(abs(x) / float(peak)) return int(db)
Весь скрипт:
import wave import numpy as np import matplotlib.pyplot as plt import matplotlib.ticker as ticker import math types = { 1: np.int8, 2: np.int16, 4: np.int32 } def format_time(x, pos=None): global duration, nframes, k progress = int(x / float(nframes) * duration * k) mins, secs = divmod(progress, 60) hours, mins = divmod(mins, 60) out = "%d:%02d" % (mins, secs) if hours > 0: out = "%d:" % hours return out def format_db(x, pos=None): if pos == 0: return "" global peak if x == 0: return "-inf" db = 20 * math.log10(abs(x) / float(peak)) return int(db) wav = wave.open("music.wav", mode="r") (nchannels, sampwidth, framerate, nframes, comptype, compname) = wav.getparams() duration = nframes / framerate w, h = 800, 300 k = nframes/w/32 DPI = 72 peak = 256 ** sampwidth / 2 content = wav.readframes(nframes) samples = np.fromstring(content, dtype=types) plt.figure(1, figsize=(float(w)/DPI, float(h)/DPI), dpi=DPI) plt.subplots_adjust(wspace=0, hspace=0) for n in range(nchannels): channel = samples channel = channel if nchannels == 1: channel = channel - peak axes = plt.subplot(2, 1, n+1, axisbg="k") axes.plot(channel, "g") axes.yaxis.set_major_formatter(ticker.FuncFormatter(format_db)) plt.grid(True, color="w") axes.xaxis.set_major_formatter(ticker.NullFormatter()) axes.xaxis.set_major_formatter(ticker.FuncFormatter(format_time)) plt.savefig("wave", dpi=DPI) plt.show()
Еще примеры:



Недавно я получил следующее письмо:

Привет, сайт, MP3 является самым популярным аудиоформатом, но есть так много других, таких как AAC, FLAC, OGG и WMA, что я не совсем уверен, какой из них я должен использовать. В чем разница между ними, и какой из них мне следует использовать, чтобы хранить мою музыку?

Вопрос достаточно популярный, попробую ответить на него просто, но понятно.

Мы уже говорили о различии между lossless и lossy, но если кратко, есть два типа качества звука:

  • без потерь: FLAC, ALAC, WAV;
  • с потерями: MP3, AAC, OGG, WMA.

Lossless формат сохраняет полное качество звука, в большинстве случаев, это уровень CD, в то время как формат с потерями сжимает файлы для экономии места (конечно, качество звука ухудшается).

Форматы хранения данных без сжатия: FLAC, ALAC, WAV и другие

  • WAV и AIFF : Оба WAV и AIFF хранят звук без сжатия, что означает, что они являются точными копиями исходного аудио. Эти два формата по существу имеют одинаковое качество; Они просто хранят данные немного по-другому. AIFF сделан Apple, поэтому вы можете увидеть его чаще в продуктах Apple, а WAV в значительной степени универсален. Однако, поскольку они несжаты, они занимают много ненужного пространства. Если вы не редактируете аудио, вам не нужно хранить аудио в этих форматах.
  • FLAC : Free Lossless Audio Codec (FLAC) — самый популярный формат хранения звука без потерь, что делает его хорошим выбором. В отличие от WAV и AIFF, он немного сжимает данные, поэтому занимает меньше места. Тем не менее, он считается форматом, который хранит звук без потерь, качество музыки остается таким же, как и у оригинального источника, поэтому эффективнее использовать его, чем WAV и AIFF. Он бесплатный, с открытым исходным кодом.
  • Apple Lossless : Также известный как ALAC, Apple Lossless похож на FLAC. Это формат с лёгкой компрессией, тем не менее, музыка сохраниться без потерь качества. Его сжатие не так эффективно, как FLAC, поэтому ваши файлы могут быть немного больше, но они полностью поддерживаются iTunes и iOS (в то время как FLAC — нет). Таким образом, если вы используете iTunes и iOS в качестве основного программного обеспечения для прослушивания музыки, вам придется использовать именно этот формат.
  • APE : APE — имеет самый агрессивный алгоритм сжатия, для хранения музыки без потерь, то есть вы получите максимальную экономию места. Его качество звука такое же, как у FLAC, ALAC, однако часто возникают проблемы с совместимостью. Кроме того, проигрывание этого формата гораздо сильнее нагружает процессор для его декодирования, так как данные сильно сжаты. Вообще, я бы не рекомендовал использовать этот формат, если только вы не ограничены в свободной памяти и не имеете проблем совместимости с программным обеспечением.

Форматы хранения звука с сжатием: MP3, AAC, OGG и другие


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

  • MP3 : MPEG Audio Layer III, или MP3, является наиболее распространенным форматом хранения звука с потерями. Настолько, что он стал синонимом загружаемой музыки. MP3 — не самый эффективный формат из всех, но, безусловно, наиболее хорошо поддерживаемый, что делает его лучшим выбором для хранения аудио с сжатием.
  • AAC : Advanced Audio Coding, также известный как AAC, похож на MP3, хотя он немного эффективнее. Это означает, что вы можете иметь файлы, занимающие меньше места, но с тем же качеством звука, что и MP3. Лучшим евангелистом этого формата сегодня является iTunes от Apple, сделавший AAC настолько популярным, что он стал почти так же широко известен, как MP3. За очень долгое время у меня было только одно устройство, которое не могло играть AAC, и это было несколько лет назад, так что вы можете смело использовать этот формат для хранения своей музыки.
  • Ogg Vorbis : формат Vorbis, известный как Ogg Vorbis из-за использования контейнера Ogg, является бесплатной альтернативой MP3 и AAC. Его главная черта состоит в том, что он не ограничен патентами, но на вас, как на конечного пользователя, это совершенно не влияет. Фактически, несмотря на его открытость и сходное качество, он гораздо менее популярен, чем MP3 и AAC, это значит, что меньшее количество программ его поддерживают. Таким образом, мы не рекомендуем его использовать, чтобы избежать проблем с совместимостью программного обеспечения.
  • WMA : Windows Media Audio — собственный фирменный формат Microsoft, похожий на MP3 или AAC. Он не дает никаких преимуществ перед другими форматами, и также не очень хорошо поддерживается за пределами платформы Windows. Мы не рекомендуем вам копировать компакт-диски в этот формат, если только вы не будете точно знать, что всю музыку будут слушать на платформе Windows, или на совместимых с этим форматом проигрывателях.

Так что вы должны использовать?

Теперь, когда вы понимаете разницу между каждым форматом, что вы должны использовать для копирования или загрузки музыки? В общем, мы рекомендуем использовать MP3 или AAC. Они совместимы почти с каждым проигрывателем, и оба они неотличимы от исходного, если . Если у вас нет особых потребностей, которые предполагают иное, MP3 и AAC — это лучший выбор.

Однако есть кое-что, что можно сказать о том, чтобы хранить свою музыку в формате без потерь, таком как FLAC. В то время как вы, вероятно, не заметите более высокого качества, lossless отлично подходит для хранения музыки, если вы планируете впоследствии ее преобразовывать в другие форматы , поскольку преобразование формата с потерями в другой формат с потерями (например, AAC в MP3) приведет к появлению файлов заметно более низкое качество. Поэтому для архивных целей мы рекомендуем FLAC . Однако вы можете использовать любой формат без потерь, так как вы можете конвертировать между форматами без потерь, не изменяя качество файла.

WAVE или WAV является короткой формой Wave Audio File Format (реже именуемой как Аудио для Windows). Этот формат является стандартом для хранения аудио потока на ПК. Он является сферой приложения формата RIFF для хранения аудио в «цепочках», это очень напоминает форматы 8SVX и AIFF, используемые компьютерами Amiga и Macintosh соответственно. Это также основной формат на системах Windows для хранения обычного несжатого звука. Как правило, для этого применяется кодирование методом линейной импульсно-кодовой модуляции.

Описание

Как WAV , так и AIFF совместимы с операционными системами Windows, Macintosh или Linux. Формат также учитывает некоторые отличия процессоров Intel, такие как порядок байтов от младшего к старшему. RIFF формат выполняет роль обертки для различных кодеков аудио сжатия.

Несмотря на то, что WAV файл может содержать сжатое аудио, наиболее обычным его применением является хранение как раз несжатого аудио в формате линейной импульсно-кодовой модуляции (LPCM). Стандартным форматом Audio-CD, например, является аудио в формате LPCM, с 2 каналами, частотой дискретизации 44 100 Гц и 16 бит на сэмпл. Так как формат LPCM хранит несжатое аудио, которое абсолютно идентично оригиналу, это позволяет использовать его профессиональным пользователям и аудио экспертам для получения максимального качества звучания. WAV аудио файл также может быть изменен практически в любом аудио редакторе. WAV формат работает со сжатым звуком в системах семейства Windows через Audio Compression Manager (ACM) . Любой ACM кодек может быть использован для сжатия WAV файла. Пользовательский интерфейс для ACM может быть доступен через множество программ, включая и стандартную программу для записи звука в некоторых версиях Windows.

Начиная с Windows 2000, появился заголовок WAVE_FORMAT_EXTENSIBLE, который позволял хранить многоканальные аудио данные, учитывал расположение динамиков, исключал неоднозначности в плане типов сэмпла и размеров контейнера в стандартном WAV формате. Также он поддерживал произвольные расширения формата чанка.

Также существует много несоответствий в формате WAV : например, 8-битные данные являются беззнаковыми, в то время как 16-битные – знаковыми.

WAV файлы могут содержать встроенные IFF «списки», которые могут содержать несколько «подчанков».

Метаданные

Будучи форматом, производным от Resource Interchange File Format (RIFF), WAV -файлы могут быть иметь метаданные (тэги) в чанке INFO. В дополнение к этом, в WAV файлы может быть встроены метаданные стандарта Extensible Metadata Platform (XMP).

Популярность

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

Более часто данные сжимаются с помощью форматов с потерями, такими как Ogg Vorbis , MP3 , ATRAC , AAC , Musepack и WMA , которые используются для хранения и обмена музыки (например, среди пользователей Интернета). Небольшой размер файла и возможность быстро скачивать их также является существенным плюсом наряду с тем, что такие аудио данные занимают намного меньше места. Но форматы с потерями жертвуют качеством ради размера, поэтому их алгоритмы не сохраняют первозданное качество звука во всех деталях. Но существуют и кодеки без потерь, такие как FLAC , Shorten, Monkey’s Audio , ATRAC Advanced Lossless , Apple Lossless , WMA Lossless , TTA, WavPack , но ни один из этих кодеков нельзя назвать общепринятым.

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

Назло огромному размеру данных несжатого WAV , этот формат иногда используется для радиовещания, особенно для адаптированных безкассетных систем. Радио BBC (BBC Radio) в Соединенном Королевстве использует 44.1 кГц, 16 бит, стерео аудио данные как стандарт в их системе VCS. Система ABC “D-Cart”, которая разработана Австралийским радиовещателем, использует 48 кГц, 16 бит, стерео аудио данные, что идентично цифровым аудио кассетам (DAT).

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

Факты об MP3

MP3 - это мультимедийный файловый формат записи звука. Характеризуется большой универсальностью: его поддерживают практически все современные операционные системы ПК, мобильных девайсов, многие традиционные устройства для проигрывания музыки - MP3- и CD-плееры, проигрыватели, музыкальные центры.

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

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

Факты о WAV

Формат WAV также используется для цифровой записи звука. В универсальности не уступает MP3 и поддерживается основными типами современных девайсов.

Данный формат предназначен, в свою очередь, для записи аудиоданных без сжатия. Таким образом, размер WAV-файлов практически всегда намного больше, чем MP3 с аналогичным содержимым. По уровню качества WAV-звук приближен к оригинальному - при условии, что он будет воспроизводиться на высокотехнологичном оборудовании.

Формат WAV востребован главным образом в сфере услуг по профессиональной обработке аудио: для фильмов, студийных альбомов, в игровой индустрии - везде, где предполагается работа с высококачественным звуком. Также файлы WAV популярны в среде меломанов, которые, к слову, в большинстве случаев очень легко определяют на слух разницу между мелодиями, записанными в MP3 и WAV.

Сравнение

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

Считается, что несжатый звук в формате WAV имеет битрейт порядка 1400 Кбит/сек. По качеству он примерно соответствует аудио, записанному на CD. В свою очередь, битрейт MP3-файлов может варьироваться: максимальный показатель составляет 320 Кбит/сек, минимальный - около 8-16 Кбит/сек. Те значения, что ниже, как правило, обеспечивают неприемлемый уровень качества звука - человек с трудом способен различать ноты в мелодиях, которые записаны в подобном битрейте.

Насколько могут различаться размеры файлов, записанных в формате MP3 и WAV?

Запись звука в MP3 длительностью в 1 минуту при максимальном качестве - 320 Кбит/сек - имеет объем порядка 2 мегабайт. Соответственно, 1 минута аудиопотока в формате WAV сформирует файл величиной около 9 мегабайт.

Таблица

Итак, теперь мы знаем, в чем разница между MP3 и WAV. Зафиксируем основные критерии, предопределяющие соответствующие различия, в небольшой таблице.

Объявление

Формат файлов WAV Audio

Файлы WAV (WAVE) были созданы компанией IBM и Microsoft. Они содержат различные аудиоданные - звуки, звуковые эффекты, музыку, а также записи голоса. Программы проигрывания медиафайлов (Windows Media Player, QuickTime и т.п.) могут воспроизводить и открывать такие файлы. Файлы WAV значительно больше файлов MP3, и именно поэтому они не пользуются популярностью. Отличительная черта файлов WAV - их технология сжатия звука без потерь. Полученные файлы отличаются высоким качеством и большими размерами, что значительно вредит их популярности. Отправка и загрузка таких файлов требует много времени и дискового пространства.

Технические сведения о файлах WAV

Файлы WAV используют формат файлов для обмена ресурсами, с помощью которого происходит сохранение данных. Данные хранятся в кластерах, которые содержат тег из 4 символов, а также кол-во байт в кластере. Аналог данного формата для ОС Mac - файлы AIFF. Файлы WAV могут иметь семплы от 8 до 16 бит при частотах от 11 025 до 44 100 Гц. Максимальное качество файлов WAV - 16 бит, 44 100 Гц, и именно такой частотой дискретизации обладают дорожки на компакт-дисках, на которых секунда звука "весит" 88 кБ. При кодировании цифрового потока обычно используется формат линейной-импульсно-кодовой модуляции. Системные звуки в ОС Windows при запуске ОС, нажатии на ярлыки, при выдаче ошибок, выключении компьютера и т.п. представляют собой несжатые файлы WAV.

Дополнительная информация о формате WAV

Расширение файла .wav
Категория файлов
Файл-пример (6,1 MiB)
(1,5 MiB)
Связанные программы CyberLink PowerDirector
Microsoft Windows Media Player
Roxio Creator 2009