Вернуться   Форум > Университет > Аудиораздел > Музыка
Регистрация Справка Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме
Старый 11.04.2024, 11:46   #1
MoyUspeh
Заблокирован
Медаль пользователю. ЗОЛОТОМедаль автору. СЕРЕБРО Завсегдатай
Аватар для MoyUspeh
Регистрация: 18.03.2013
Сообщения: 505
Репутация: 8
Ликбез: MP3 и Lossy Clipping

В этой статье я рассмотрю ГЛАВНУЮ проблему практически всех MP3, независимо от кодировщика, битрейта и прочих "плюшек". Начнем по-порядку.

1. Пример на файле из раздачи.

Для наглядности возьмем трек из одной популярной раздачи MP3 от релизера "1234567890" - https://kinozal.tv/details.php?id=1832778 (38 трек). Откроем его в редакторе Sound Forge - он имеет обычный 16-битный целочисленный декодер mp3, который схож по своим характеристикам 90% декодеров всех устройств, способеных читать этот формат. Вот что мы получили. Как видно - жесткое ограничение сигнала на отметке 0 дБ, так как декодер такого типа "не умеет" обрабатывать значения сигнала выше 0 дБ из-за ограниченности 16 битного целочисленного формата звука. Теперь откроем этот же трек в другом "продвинутом" редакторе iZotope RX10 - он имеет более качественный декодер MP3 формата - 32 битный с плавающей запятой (32 bit float), особенность которого - возможность обрабатывать любые значения амплитуды, от отрицательных до положительных, то есть более 0 дБ. Вот что мы получили. Как видно - сигнал звука теперь заходит за пределы существенно выше значения 0 дБ, для наглядности насколько я сделал следующий скриншот. Как видно по изображению - весь сигнал выше отметки 0 дБ будет срезан в "обычном" 16 битном декодере MP3, как в примере с Sound Forge, что приводит к сильным нелинейным искажениям клиппировки (на слух похоже на хрип). Вот что говорит нам статистика трека в iZotope RX10 - как видно пиковое значение амплитуды звука в этом файле +2.28 дБ(!!!), то есть при воспроизведении происходит клиппировка в 2.28 дБ! Откуда она взялась скажете вы, ведь исходный файл имел пиковую амплитуду не более 0 дБ (так как практически все исходники - целочисленные) - но об этом далее.

2. Источник проблемы.

Возьмем для наглядности звук квадратной формы частотой 100 Гц и амплитудой -3дБ и сожмем его в mp3, то после открытия этого файла получим следующее. Как видно кроме того, что произошли искажения сжатия, появились "выбросы" амплитуды выше -3 дБ аж до значений почти -1.5 дБ (!!!), то есть пиковое значение трека увеличилось на 1.5 дБ. А теперь представьте, что ваш трек записан с максимальным уровнем 0 дБ, тогда после сжатия вы получите пики +1.5 дБ, но так как простые декодеры не могут обрабатывать значения выше 0 дБ происходит клиппировка или срез звука на отметке 0 дБ (как в п.1 статьи), то есть искажения. Чтобы это предотвратить перед сжатием необходимо делать звук тише, а вот определить насколько и нужно многопроходное сжатие Level Optimization* с "попытками" подбора значения, чтобы на выходе не было искажений, но и не сделать слишком тихо.

3. Почему так происходит?

Рассмотрим более детально причину этих "выбросов" амплитуды.
Возьмем всё тот же звук квадратной формы частотой 100 Гц. Кто разбирается в теории сигнала, тот знает, что любой сигнал можно разложить на функции частот, при сложении сигналов которых мы получим наш исходный сигнал, это так называемое преобразование Фурье. Его адаптацию используют все современные кодеки сжатия звука, MP3 - не исключение. Так вот, для воссоздания этого "квадратного" сигнала, например, нужна сумма нечетных гармоник основной частоты (100 Гц) с весом обратно пропорциональным номеру гармоники, то есть упрощенно для понимания можно описать сигнал так
F = (100 Гц) + 1/3 (300 Гц) + 1/5 (500 Гц) + 1/7 (700 Гц) + ....
И так до бесконечности. То есть чем больше в данном случае мы "сложим" гармоник - тем точнее воссоздадим исходный звук. Все эти гармоники хорошо видно на спектрограмме этого сигнала, что и подтверждает вышесказанное. Вот тут и появляется источник этих Lossy-потерь: из-за ограниченной точности форматов сжатия, "вес" каждой частоты записывается неточно (например 1/7 или 1/13 не будут точно 1/7 или 1/13, а будут 0.143 или 0.077 например), также и с частотами звука, значения которых указываются с ограниченной точностью, отсюда и ошибки сигнала при декодировании и сложении. Это одна часть проблемы. Вторая заключается в том, что из-за особенностей кодирования звука MP3 (и других Lossy-форматов) происходит банальное отсечение "близких" по частоте сигналов (так называемая психоакустическая избыточность сигнала), что приводит к еще дополнительным потерям, причем их значение тем выше, чем меньше битрейт (то есть количество "сохраненных" частот). В совокупности этих потерь мы и получаем частотные искажения, которые видно на этом скриншоте.

4. Заключение.

Исходя из вышеописанного строго стоит вопрос о создании "правильных" MP3 без перегрузки сигнала выше 0 дБ, чтобы ВСЕ устройства воспроизведения могли декодировать качественный звук. Для этого я и создал программное обеспечение Level Optimization* чтобы решить эту проблему, и применяю его на всех своих Lossy-раздачах.

С уважением, Александр, MoyUspeh. Надеюсь Вам было интересно, а главное понятно :)
 
Старый 01.05.2024, 04:28   #2
MoyUspeh
Заблокирован
Медаль пользователю. ЗОЛОТОМедаль автору. СЕРЕБРО Завсегдатай
Аватар для MoyUspeh
Регистрация: 18.03.2013
Сообщения: 505
Репутация: 8
Немного продолжу первый свой пост.
Просили привести пример, как будет отображаться и декодироваться файл MP3, если его "правильно" сжимать. Вот, пример того, как работает мой софт Level Optimization* для коррекции уровня звука при сжатии, как видите - идеальная характеристика получаемого файла, ни единого семпла за пределами 0 дБ, то есть отсутствие дополнительных искажений MP3-клиппинга. В данном случае коррекция амплитуды при сжатии составила -0.87 дБ, программа четко её расчитала, этого хватило для того чтобы "выйти" за отметку ниже 0 дБ. Я взял за исходник тот же трек, только с FLAC-раздачи 1234567890 (https://kinozal.tv/details.php?id=1832778).

Смотреть здесь или здесь и напомню, как было в MP3-файле у релизера 1234567890 - думаю комментарии излишни...

Вот MediaInfo получившегося файла, кому интересно, там как раз можно увидеть в метаданных ReplayGain данные, подверждающие отсутствие уровня 0 дБ, а также уровень коррекции Level Optimization*, мой софт дополнительно прописывает эту информацию, кому интересно :) Примерно так, к слову, во всех моих раздачах MP3.

General
Complete name : 038 Days Like This.mp3
Format : MPEG Audio
File size : 18.6 MiB
Duration : 8 min 7 s
Overall bit rate mode : Constant
Overall bit rate : 320 kb/s
Album replay gain : -6.64 dB
Album replay gain peak : 1.000000
Album : 120 Best Slow Songs For Relax
Album/Performer : VA
Track name : Days Like This
Track name/Position : 38
Track name/Total : 120
Performer : Danny Bryant's RedEyeBand & Walter Trout
Genre : Blues
Recorded date : 2021
Writing library : LAME MOD
Comment : Release by 1234567890
Level Optimization* : by MoyUspeh
Optimization Gain : -.87dB

Audio
Format : MPEG Audio
Format version : Version 1
Format profile : Layer 3
Format settings : Joint stereo / MS Stereo
Duration : 8 min 7 s
Bit rate mode : Constant
Bit rate : 320 kb/s
Channel(s) : 2 channels
Sampling rate : 44.1 kHz
Frame rate : 38.281 FPS (1152 SPF)
Compression mode : Lossy
Replay gain : -11.06 dB
Replay gain peak : 0.999880
Stream size : 18.6 MiB (100%)
Writing library : LAME MOD


p.s.: - А почему коррекция вышла всего лишь -0.87 дБ, тогда как у автора первой MP3 (от 1234567890) была перегрузка в 2.28 дБ? - скажете Вы - Ответ прост - более качественный кодировщик, который использую я. Если бы я сжимал, используя программу сжатия и настройки кодировщика, которые использовал 1234567890 - то по-видимому уровень коррекции был бы в пределах -2.0...-2.5 дБ, чтобы создать качественный MP3, из-за существенно бОльших потерь в кодировании.

p.s.s. Вариант "исправлять" MP3 настройками плеера в разделе ReplayGain, выкрутив преампинг трека на +20 дБ о многом говорит (https://forum.kinozal.tv/showpost.ph...02&postcount=2) :)
Думаю грамотные люди "оценили решение". Даже не вижу смысла комментировать что-то....

Последний раз редактировалось MoyUspeh, 01.05.2024 в 12:49.
 
Закрытая тема


Здесь присутствуют: 1 (пользователей - 0 , гостей - 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск



Часовой пояс GMT +3, время: 16:48.