Почему FLAC кодируется из декодированного MP3 больше, чем MP3?

2877
Ryan Thompson

Если быть более точным, чем в названии, предположим, что у меня есть файл MP3, который составляет 320 кбит / с. Если я распакую его, то, по логике, все данные, кроме примерно 320 килобит из каждой секунды аудио, должны быть избыточными данными, которые можно сжать. Итак, когда я кодирую распакованный файл в FLAC или любой другой кодек без потерь, почему он намного больше?

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

РЕДАКТИРОВАТЬ: Позвольте мне уточнить связанный вопрос и обоснование этого. Предположим, у меня есть файл wav, который был распакован из файла MP3 (и по какой-то причине у меня нет самого mp3). Если я не хочу больше терять качество, я могу перекодировать его с помощью FLAC или любого другого кодера без потерь и получить файл большего размера, чтобы сохранить то же качество. Или я могу снова перекодировать его в mp3 и получить тот же размер, что и оригинал, но потерять больше данных. Очевидно, что ни один из этих случаев не идеален. У меня может быть как оригинальный размер, так и оригинальное качество, но не оба (я имею в виду качество оригинального mp3, а не оригинального источника без потерь). Мой вопрос: можем ли мы получить оба? Возможно ли теоретически восстановить сжатые с потерями данные из распакованных данных с потерями, не теряя даже больше?

Если это возможно, я мог бы представить алгоритм сжатия без потерь, который сжимает звук с помощью FLAC. Затем он также сканирует звук на наличие признаков предыдущего сжатия с потерями и при обнаружении повторно сжимает его без потерь в исходный файл с потерями. Затем он сохраняет тот файл, который меньше.

13
Вот мое любимое руководство по копированию и кодированию аудио. наслаждайтесь, это отличное чтиво: http://mp3.radified.com/ 14 лет назад 0
Декодер не просто дополняет бессмысленные биты от 320 КБ до 1411 КБ, битрейт файла PCM задается значением бита на выборку, количеством каналов и частотой дискретизации. Для стандартного аудио CD это (2 канала) * (частота дискретизации 44,1 кГц) * (16 бит на выборку) = 1411 кбит / с. skelly 14 лет назад 2
Просто, MP3 сжимается, FLAC - без сжатия. Когда вы конвертируете, он распаковывает данные MP3. Moab 11 лет назад 0
Это не правильно. FLAC - это формат сжатия звука. Ryan Thompson 11 лет назад 2

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

31
endolith

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

  • Преобразование WAV в FLAC похоже на преобразование BMP в PNG.
    • Точно такие же пиксели, но без потерь сжаты как ZIP-файл в меньший размер.
  • Преобразование WAV в MP3 похоже на преобразование BMP в JPEG.
    • Вместо того, чтобы хранить точные пиксели, на самом деле хранятся инструкции для создания квадратов с рябью цвета, которые выглядят как оригинал.

Точно так же, MP3 просто хранит инструкции для генерации пульсаций, которые при сложении звучат как оригинал. Но разница между истинным сигналом и генерируемым сигналом (сигналом ошибки) состоит из случайных шумовых артефактов, таких как JPEG неровности . Когда вы затем сохраняете это в перфекционистском формате, таком как FLAC, в нем должны храниться все эти неровности, и случайный шум труднее сжать без потерь, поэтому он увеличивает размер файла. (Истинно случайный шум несжимаем. Когда вы сжимаете файл без потерь, вы устраняете избыточные повторяющиеся шаблоны и делаете его больше похожим на случайный шум.)

Бьюсь об заклад, если вы конвертируете JPEG в PNG, вы увидите такое же увеличение размера, какое вы видите при конвертации MP3 в FLAC, поскольку перфекционистский кодек без потерь должен помнить каждый маленький зазубрины и артефакты, которых не было в оригинальном bmp.

Эта аналогия не идеальна, поскольку звук больше похож на фотографию, чем на линейную диаграмму, но он помогает донести идею:

Оригинальный размер BMP: 29 кБ

Синие точки в виде PNG

Размер PNG: 629 B

Синие точки в формате JPEG с зазубринами

Размер JPEG: 1,7 кБ

Синие точки с зазубринами перекодированы в PNG

PNG создан из JPEG: 6,2 кБ

Но, разумеется, после преобразования файла в формат JPG данные теряются и не могут быть восстановлены путем преобразования в формат PNG. Если в FLAC / PNG будет больше данных, большая их часть будет вымышленной. pavium 14 лет назад 3
Да. Значимые данные теряются, и создаются ошибочные данные. endolith 14 лет назад 1
Это ясно показано на примере диаграмм эндолита. hplbsh 14 лет назад 1
Это удивительно тщательный ответ. Хорошая работа! cowgod 14 лет назад 1
Итак, я предполагаю, что это поднимает связанный вопрос: в этом примере, возможно ли восстановить точный 1,7 кБ JPEG из PNG 6,2 кБ? По аналогии, можно ли восстановить оригинальный аудиофайл с потерями из его декодированной формы? Ryan Thompson 14 лет назад 0
Ну, PNG 6,2 кБ содержит точно такую ​​же информацию, что и JPEG 1,7 кБ, но я не думаю, что вы могли бы воссоздать оригинальный JPEG с помощью обычного процесса кодирования. Вы, вероятно, могли бы написать анализатор, чтобы выяснить, что такое оригинальный JPEG, выполнив DCT каждого квадрата 8x8. Но могут быть варианты формата JPEG, которые дают несколько способов кодировать один и тот же шаблон, поэтому я не знаю. endolith 14 лет назад 0
Я думаю, что теоретически было бы возможно создать программу, которая будет полностью противоположна тому, что делал кодировщик MP3, если бы она точно знала, какой алгоритм кодирования использовался, и какие настройки использовались, тогда она просто сделала бы противоположное , Тем не менее, не существует единого алгоритма кодирования MP3 - каждая программа кодирования может делать что-то немного другое. Так что на практике это невозможно сделать. Kevin Panko 14 лет назад 0
Невозможно, даже теоретически, сделать полностью противоположное тому, что делает кодировщик MP3, потому что кодировщик MP3 выбрасывает информацию в процессе. Вот почему это называется «сжатие с потерями». Информация теряется и никогда не может быть восстановлена ​​из закодированного файла. Лучшее, что вы можете сделать, это декодировать его. Если вы знаете настройки кодера, вы, вероятно, можете немного настроить декодер, чтобы получить немного более точное представление, но оно никогда не будет идеальным. endolith 14 лет назад 0
You are right. I don't know what I was thinking. Kevin Panko 14 лет назад 1
Аналогия с линейной графикой работает, если вы слушаете Kraftwerk. kinokijuf 11 лет назад 1
2
skelly

Когда вы декодируете MP3, независимо от того, какой битрейт, вы получаете стандартный звук PCM 1411 кбит / с / 44100 Гц (или каким бы то ни было источником), который имеет все заметные и незаметные эффекты процесса кодирования с потерями, этот формат необходим для воспроизведения и кодирование / перекодирование, любой файл любого кодека распаковывается при его воспроизведении на компьютере, MP3-плеере и т. д.

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

Файл FLAC, созданный из MP3, будет звучать точно так же, как MP3, файл FLAC, созданный из дорожки CD, будет звучать точно так же, как CD.

0
warren

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

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

Это все равно, что спросить, почему преобразование JPG в PNG делает его больше - вы [частично] распаковываете файл, а затем повторно сжимаете без потерь. FLAC, как и PNG, оптимизирован не для пространства, а для качества .

FLAC (и PNG) без потерь, поэтому говорить, что они оптимизированы по качеству, не имеет смысла. Joakim Elofsson 14 лет назад 0
@Joakim: без потерь == максимальное качество, поэтому форматы без потерь оптимизированы для качества * по определению *. quack quixote 14 лет назад 3
это моя точка зрения, по определению, поэтому нет оптимизации. если определение максимального качества, то оптимизировать нечего Joakim Elofsson 14 лет назад 2
0
Joakim Elofsson

Для mp3 требуется, чтобы декодер был пригоден для воспроизведения, результатом декодера является аппроксимация исходной дорожки (обычно с компакт-диска), поэтому декодер добавляет данные, чтобы сделать ее воспроизводимой (и это не бессмысленные данные). Полученное приближение получило тот же битрейт, что и исходная дорожка. Без декодирования mp3 информация не имеет смысла, поэтому не может быть преобразована во что-либо еще (если только не очень похожее кодирование, например, стерео-mp3 в 2X моно-mp3). И FLAC и mp3 даже близко не похожи. При декодировании FLAC результат не является аппроксимацией оригинальных данных, закодированных в FLAC, но он точно такой же.

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