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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2024, 15:44   #1
MoyUspeh
Главный Кинооператор
Медаль пользователю. ЗОЛОТО Завсегдатай
Аватар для MoyUspeh
Регистрация: 18.03.2013
Сообщения: 427
Репутация: 8
Ликбез: MP3-формат, особенности сжатия

Небольшая статья, которая максимально кратко расскажет об особенностях сжатия и настройках кодировщика LAME.

1. Битрейт.

CBR - режим сжатия с постоянным битрейтом. Из-за особенностей формата, существует несколько "ступенчатых" значений битрейта, а именно: 32 40 48 56 64 80 96 112 128 160 192 224 256 320 кбит/с. Исходя из этого формируются "блоки" с соответствущим потоком данных. Упрощенно при кодировании звука происходит его частотное разложение и те частоты, которые находятся "рядом" маскируются частотой, которая "громче", исключая смежные. То есть весь частотный диапазон раскладывается на "октавы" и выбирается в каждой октаве в порядке громкости те частоты, которые имеют максимальное значение амплитуды. Заполнение информацией об этих коэффициентах происходит в порядке убывания их "веса", то есть например в битрейте 160 кбит/с будет в 2 раза меньше различных частот, чем например в 320 кбитах/с. Естественно алгоритм гораздо сложнее, но я пытаюсь объяснить просто, "на пальцах". Все бы хорошо, если бы не одно но. Существует так называемое "пороговое" значение количества отрезанных частот, при котором звук меняет своё "качество" для восприятия человеком, поэтому, чтобы сохранить приемлимое качество звука, кодировщик начинает отсекать те частоты, слышимость которых не так сильно повлияет на качество, то есть начинает "резать" частоты с верхних значений до 16 кГц. В зависимости от "сложности" звука этот эффект имеет непостоянное зачение. То есть если битрейта "хватает" для полного спектра - то частоты не режутся и идет полное заполнение данных, если битрейта не хватает - происходит "срез".

Для примера и наглядного объяснения рассмотрим один и тот же звуковой файл на разных битрейтах при одинаковых настройках кодирования (с отключенным LowPass фильтром, про это будет другая статья):
Оригинальный файл (исходник) , 320 кбит/с , 256 кбит/с , 128 кбит/с .
Я использовал три постоянных битрейта для наглядности. По спектрограммам хорошо видно, как работает алгоритм "отсекания" частот выше 16 кГц в зависимости от "наполнения" блоков данных.
В этом и состоит различие звука в зависимости от битрейта, и по спектрограммам легко определить эффективность использования данных при сжатии.

VBR режим - это когда каждый блок кодируется на основании определенного качества звука, где пороговое значение "отсечения" частот одинаково, то есть качество звука неизменно на всем файле, а меняется лишь его битрейт, причем это не произвольное значение, а всё те же 32 40 48 56 64 80 96 112 128 160 192 224 256 320 на блок. То есть это не совсем VBR, а "ступенчатый" CBR. Из плюсов - на битрейтах ниже 320 достигается лучшая эффективность сжатия за счет неизменности качества, а не битрейта. К сожалению, не имеет возможности кодировать блоки с битрейтом выше 320, поэтому ВСЕГДА проигрывает в качестве звука по сравнению с режимом CBR 320 кбит/с при прочих равных.

ABR режим переменного битрейта - это когда задано не качество звука, а средний результирующий битрейт для файла (потока), то есть качество "плавает" во время кодирования блоков, чтобы среднее значение битрейта было в пределах заданной величины. Из плюсов - нет ограничений в виде "ступенек", можно например закодировать файл на 300 кбит/с или 200 кбит/с, то есть кодировщик сам будет "подбирать" блоки, исходя из настроек. Грубо говоря это тот же режим VBR, только "качество" задается во время сжатия исходя из уже сжатых данных за определенный момент времени и соответственно либо увеличивая либо уменьшая показатель условного "качества", стремясь выйти на заданную величину битрейта.

Последний раз редактировалось MoyUspeh, 07.04.2024 в 21:43.
  Ответить с цитированием
Старый 07.04.2024, 16:07   #2
MoyUspeh
Главный Кинооператор
Медаль пользователю. ЗОЛОТО Завсегдатай
Аватар для MoyUspeh
Регистрация: 18.03.2013
Сообщения: 427
Репутация: 8
2. Режимы: Stereo, J-Stereo, Force Joint, Dual Chanel.

Для оптимизации сжатия разработчики придумали простой способ как можно сэкономить данные и разместить больше информации о частотах в заданном битрейте. Для этого они используют режим Joint Stereo. Суть его в следующем, возьмем все тот же наш исходный файл, и вместо того, чтобы кодировать каждый канал в отдельности, мы будем кодировать их сумму сигналов и разность. При декодировании процесс будет идти в обратную сторону. То есть фактически мы будем кодировать монозвук и его "стереобазу". Как правило в нижних частотах (ударники, голос певца) звук в обоих каналах одинаковый, это позволяет существенно сократить количество кодируемой информации и достичь лучшего качества при одинаковом битрейте.

Теперь расшифруем ключи кодирования и в чем разница:

-m j - J-stereo - это режим, когда кодировщик сам решает, какой вариант сжатия для текущего блока подходит лучше, Stereo или Joint Stereo и кодирует его по выбранному алгоритму. К сожалению, он принимает решение об эффективности ДО сжатия, то есть не может знать ТОЧНО, какой вариант будет лучше. Анализ происходит лишь на основании исходных данных, а не сжатых по двум вариантам. Это его недостаток. Рекомендуется для "старых" записей с высокими шумами, эмфазисом и различным поканальным уровнем записи.

-m s - Stereo - неэффективный вариант, когда каждый канал кодируется независимо, не рекомендуется.

-m d - Dual Chanel - разница по сравнению с режимом Stereo лишь в том, что кодируются оба канала независимо с РАВНЫМ битрейтом (половине на каждый канал), тогда как в режиме Stereo битрейт распределяется согласно "весу" данных на тот канал, где потребность в данных выше. Например если в одном канале тишина, а в другом есть звук - то весь битрейт в режиме Stereo заберет канал со звуком. Самый неэффективный вариант сжатия, категорически не рекомендуется.

-m f - Force Joint Stereo - это режим, когда все блоки кодируются в Joint-Stereo режиме. Самый эффективный вариант сжатия на данный момент. Рекомендуется для всей качественной современной музыки, у которой, как правило, нет проблем с шумами, эмфазисом и разностью по уровням записи каналов. В этом режиме достигается максимальная эффективность использования данных, соответсвенно максимальное результирующее качество звука.

Вот, насколько эффективнее режим Joint Stereo, по сравнению с Stereo при равных битрейтах. Как видно по спектрограммам гораздо меньше потерь в высоких частотах (смотрим пункт 1. "Битрейт"), что говорит о преимуществе кодирования в режиме Joint.

Последний раз редактировалось MoyUspeh, 07.04.2024 в 22:54.
  Ответить с цитированием
Старый 20.04.2024, 05:25   #3
Arachnid79
Главный Кинооператор
Медаль пользователю. ЗОЛОТО Новичок
Регистрация: 11.10.2013
Сообщения: 56
Репутация: 6
Вот и всё, что нужно для КАЧЕСТВЕННОГО кодирования, без всяких принудительных -m j и -lowpass -1. Режим joint включен по умолчанию, а за отключение фильтра высоких частот надобно сжигать.
Рекомендации и примеры (для конвертера foobar2000)
Рекомендованным режимом является режим VBR, он даёт наилучшую скорость кодирования, меньший размер файлов и стабильное качество звучания для сигналов разной степени сложности.
Оптимальное соотношения размера и качества, прозрачное качество для большей части музыки
--silent -V 2 --noreplaygain - %d
Максимальное VBR качество
--silent -V 0 --noreplaygain - %d
Высокое качество, 320 кбит/с. Качество немного выше, чем у VBR V0, но треки занимают значительно больше места
--silent -b 320 --noreplaygain - %d
Более высокое качество, 320 кбит/с, пониженная скорость кодирования
--silent -q 2 -b 320 --noreplaygain - %d
Максимально возможное качество, 320 кбит/с, CBR. В большинстве случаев не даёт прироста в качестве, очень медленное кодирование
--silent -b 320 -q 0 --noreplaygain - %d
  Ответить с цитированием
Старый 27.04.2024, 17:16   #4
MoyUspeh
Главный Кинооператор
Медаль пользователю. ЗОЛОТО Завсегдатай
Аватар для MoyUspeh
Регистрация: 18.03.2013
Сообщения: 427
Репутация: 8
Arachnid79 сказал(a):
Вот и всё, что нужно для КАЧЕСТВЕННОГО кодирования, без всяких принудительных -m j и -lowpass -1. Режим joint включен по умолчанию, а за отключение фильтра высоких частот надобно сжигать.

Ну во-первых по умолчанию включен не Joint-Stereo, а просто Stereo для битрейта 320 кбит/с, видимо Вы не в курсе (только в совсем новых версиях 3.100+ его заменили на J-Stereo по умолчанию, до этого режим J-Stereo по умолчанию был лишь для 192 и менее кбит/с).

Во вторых -m j включает не Joint-Stereo, а J-Stereo, где кодировщих на основе входящих сигналов определяет каким способом сжимать блок, Stereo или Joint-Stereo, как описано в моем посте выше, "настоящий" полный Joint-Stereo включается ключом -m f.

В третьих - в режиме VBR V0 - LowPass-фильтр по-умолчанию отключен, работает только PSY, к чему бы это (будем сжигать?) ?

В четвертых: ключа -lowpass -1 не существует

Всё это говорит о вашей "компетентности".

Для пользователей немодифицированной версии LAME мои рекомендации по ключам следующие:
(-V 0 -q 0 -m f) - для максимального качества звука для современных звуковых исходников, кодирование идет в режиме VBR без LowPass-фильтра, но с PSY-фильтром (он неотключаем).
(-q 0 -b 320 -m f) - для битрейта 320 кбит/с, но в этом случае качество уже может быть хуже даже, чем в первом случае, несмотря на бОльший битрейт, из-за дополнительно включенного LowPass-фильтра.

Также рекомендую добавить ключ (--gain -2) - это снизит амплитуду входящего сигнала на 2 дБ, предотвратив возможный MP3-клиппинг (как правило в большистве случаев этого достаточно). У меня для определения величины коррекции работает софт Level Optimization, который подбирает наименьшее значение коррекции для достижения максимально возможного качества при декодировании.

Последний раз редактировалось MoyUspeh, 27.04.2024 в 21:33.
  Ответить с цитированием
Старый 27.04.2024, 18:28   #5
MoyUspeh
Главный Кинооператор
Медаль пользователю. ЗОЛОТО Завсегдатай
Аватар для MoyUspeh
Регистрация: 18.03.2013
Сообщения: 427
Репутация: 8
Небольшой постскриптум к теме.

Пример кодирования моей модифицированной версией LAME и самой новой 3.101 импульса в одну выборку (стандартный тест в аудиосреде).

MOD - идеальное повторение "исходника", искажения полностью отсутствуют.
3.101: -q 0 -b 320 - падение амплитуды импульса (LowPass-фильтр в деле) плюс искажения PSY-оптимизации.
3.101: -q 0 -V 0 - искажения PSY-оптимизации стали еще выше из-за дополнительного уменьшения показателя "качества" для рамок VBR V0 (он неизменен при сжатии).

Как видно по полученным результатам - существенное искажение изначального импульса в новых версиях кодировщика (привет хейтерам моей программы).
  Ответить с цитированием
Старый 27.04.2024, 21:32   #6
1234567890 [ Онлайн ]
Главный Кинооператор
Медаль пользователю. ЗОЛОТОМедаль автору. ЗОЛОТО Великий Гуру
Аватар для 1234567890
Регистрация: 15.03.2008
Адрес: Всеми́рная паути́на
Сообщения: 4,565
Репутация: 490
предложили добавить - для России ссылку "тестирование" открывать под VPN

MoyUspeh сказал(a):
Ну во-первых по умолчанию включен не Joint-Stereo, а просто Stereo
Cкрытый текст -
 
Современные версии LAME самостоятельно выбирают какой режим использовать..
Cкрытый текст -
 
Добавлю немного реального ликбеза в "ликбез" от *успешного 3.93его*: Сравнительное тестирование различных версий LAME @ 320 kbps

Последний раз редактировалось 1234567890, Сегодня в 01:18.
  Ответить с цитированием
Старый Вчера, 07:33   #7
Arachnid79
Главный Кинооператор
Медаль пользователю. ЗОЛОТО Новичок
Регистрация: 11.10.2013
Сообщения: 56
Репутация: 6
MoyUspeh сказал(a):
Ну во-первых по умолчанию включен не Joint-Stereo
Учимся читать
  Ответить с цитированием
Старый Вчера, 07:35   #8
Arachnid79
Главный Кинооператор
Медаль пользователю. ЗОЛОТО Новичок
Регистрация: 11.10.2013
Сообщения: 56
Репутация: 6
MoyUspeh сказал(a):
В четвертых: ключа -lowpass -1 не существует
А как тогда я получил такую красоту в 3.101?
  Ответить с цитированием
Старый Вчера, 07:37   #9
Arachnid79
Главный Кинооператор
Медаль пользователю. ЗОЛОТО Новичок
Регистрация: 11.10.2013
Сообщения: 56
Репутация: 6
1234567890 сказал(a):
хотя пользователи версии 3.93 в курсе быть точно не могут..
в данном случае не желают
  Ответить с цитированием
Старый Вчера, 07:51   #10
Arachnid79
Главный Кинооператор
Медаль пользователю. ЗОЛОТО Новичок
Регистрация: 11.10.2013
Сообщения: 56
Репутация: 6
Я придумал свою методику кодирования, более успешную. VST-плагинами накручиваем чётные гармоники, объем, конечно-же отключаем фильтр и параметр -q выставляем 7-9. Спектр будет лучше исходника +ламповое звучание с искажухой %5-8, но приятной уху
  Ответить с цитированием
Старый Вчера, 20:19   #11
MoyUspeh
Главный Кинооператор
Медаль пользователю. ЗОЛОТО Завсегдатай
Аватар для MoyUspeh
Регистрация: 18.03.2013
Сообщения: 427
Репутация: 8
Arachnid79 сказал(a):
Учимся читать

А что у меня неверно? Читаем последний обзац картинки [-m -j] (или адаптивный J-Stereo в приложении по умолчанию): "JOINT STEREO.... jstereo means the encoder..." - все как и у меня по тексту (#2), что кодировщик в этом режиме сам определяет каким способом сжимать каждый блок, исходя из ВХОДНЫХ данных, Stereo (L/R stereo) или Joint-Stereo (он же mid/side), но этот анализ не совсем корректно работает, о чем я также написал. Полный и постоянный Joint-stereo (mid/side) включается [-m -f] ключем. Либо вы не читали мои посты выше либо просто не понимаете текст и процесс кодирования MP3. Путаница происходит на подмене понятия полного Joint-Stereo и J-Stereo (адаптивного), который по умолчанию в новых версиях кодировщика. У меня нет ни единой ошибки в тексте.

Еще раз объясню попроще. Есть 3 основных режима:
1. Forced Stereo (L/R Stereo) [-m -s] - постоянный стереорежим кодирования.
2. J-stereo (по умолчанию сейчас, начиная с LAME v3.100) [-m -j] - автоматический выбор сжатия блока по алгоритму (1) или (3). В версиях LAME до 3.100 по-умолчанию для 256-320 кбит/c был режим (1).
3. Forced Joint stereo (mid/side) [-m -f] - постоянный Joint Stereo, который я рекомендую, так как более эффективный и не создающий эффекта "плавания" звука из-за постоянной смены режима кодирования (в режиме 2).
Может так будет понятнее?
  Ответить с цитированием
Старый Вчера, 23:55   #12
ZenitFan
Главный Кинооператор
Медаль пользователю. ЗОЛОТОМедаль автору. СЕРЕБРО Завсегдатай
Аватар для ZenitFan
Регистрация: 04.10.2010
Адрес: Расчленинград
Сообщения: 599
Репутация: 171
MoyUspeh сказал(a):
2. J-stereo (по умолчанию сейчас, начиная с LAME v3.100) [-m -j] - автоматический выбор сжатия блока по алгоритму (1) или (3). В версиях LAME до 3.100 по-умолчанию для 256-320 кбит/c был режим (1).
J-stereo это типа как J-pop и J-rock ?
  Ответить с цитированием
Старый Сегодня, 00:13   #13
MoyUspeh
Главный Кинооператор
Медаль пользователю. ЗОЛОТО Завсегдатай
Аватар для MoyUspeh
Регистрация: 18.03.2013
Сообщения: 427
Репутация: 8
ZenitFan сказал(a):
J-stereo это типа как J-pop и J-rock ?

Очень смешно и остроумно, хахаха, если б не было фактом, надеюсь вопросы отпали?:



и как видно по скриншоту процесса, ^ кодер выбирает режим сжатия каждого блока (LR - 80.4%, MS - 19.6% уже сжатых), как я и описывал выше. Но этот "выбор" не очень корректно работает, к сожалению.
  Ответить с цитированием
Старый Сегодня, 00:30   #14
ZenitFan
Главный Кинооператор
Медаль пользователю. ЗОЛОТОМедаль автору. СЕРЕБРО Завсегдатай
Аватар для ZenitFan
Регистрация: 04.10.2010
Адрес: Расчленинград
Сообщения: 599
Репутация: 171
MoyUspeh сказал(a):
Очень смешно...
То есть J-stereo это не сокращение от Joint stereo? Поясните диванному эксперту, а то я запутался
  Ответить с цитированием
Старый Сегодня, 00:33   #15
MoyUspeh
Главный Кинооператор
Медаль пользователю. ЗОЛОТО Завсегдатай
Аватар для MoyUspeh
Регистрация: 18.03.2013
Сообщения: 427
Репутация: 8
ZenitFan сказал(a):
То есть J-stereo это не сокращение от Joint stereo? Поясните диванному эксперту, а то я запутался

https://forum.kinozal.tv/showpost.ph...7&postcount=11
все описано, опять в пятый раз объяснять или как? Не вижу смысла, если даже не читаете. Те, кто писал ту инструкцию на картинке сами запутали в понятиях режимов, что и выливается в недоразумении пользователей. Я же обьяснил на понятном языке, даже в #2, но почему-то холивар продолжается до сих пор. Изначально Joint-Stereo был всегда mid/side, но те, кто писал ту "инструкцию" запутали всех (хоть она и с официального сайта).
Кстати, то о чем я и писал, чем хорош режим (3), битрейта 320 покрыть все частоты - вполне достаточно, даже на сильной "стереобазе" в пиковые моменты, режим (2) имеет смысл только на средних и низких битрейтах либо для записей с эмфазисом (сдвигом фазы по каналам, чего нет в современных цифровых источниках):

"Too much switching between mid/side and L/R stereo can also sound bad." - это для режима (2), "переключения" режимов кодирования блоков создают специфические призвуки, что ухудшает "монотонность" качества звука.
https://svn.code.sf.net/p/lame/svn/trunk/lame/USAGE

Надеюсь в этот раз уже разобрались? Или опять будут вопросы? Думаю на этом и остановимся.
  Ответить с цитированием
Старый Сегодня, 00:57   #16
ZenitFan
Главный Кинооператор
Медаль пользователю. ЗОЛОТОМедаль автору. СЕРЕБРО Завсегдатай
Аватар для ZenitFan
Регистрация: 04.10.2010
Адрес: Расчленинград
Сообщения: 599
Репутация: 171
MoyUspeh сказал(a):
все описано, опять в пятый раз объяснять или как?
У меня (как у диванного эксперта) складывается впечатление, что вы бахвалитесь тем, что включили режим Joint stereo на старой версии LAME. В то время как на современных версиях дополнительного рукоблудства не требуется...
  Ответить с цитированием
Старый Сегодня, 00:58   #17
MoyUspeh
Главный Кинооператор
Медаль пользователю. ЗОЛОТО Завсегдатай
Аватар для MoyUspeh
Регистрация: 18.03.2013
Сообщения: 427
Репутация: 8
ZenitFan сказал(a):
У меня (как у диванного эксперта) складывается впечатление, что вы бахвалитесь тем, что включили режим Joint stereo на старой версии LAME. В то время как на современных версиях дополнительного рукоблудства не требуется...


ясно, не читаете... зачем я тогда пишу? Кодируйте как вам нравится, хоть вообще без ключей, это ваше право... я же не заставляю... А если интересно - сравните сами, если имеете возможность. Удачи!
  Ответить с цитированием
Старый Сегодня, 01:03   #18
ZenitFan
Главный Кинооператор
Медаль пользователю. ЗОЛОТОМедаль автору. СЕРЕБРО Завсегдатай
Аватар для ZenitFan
Регистрация: 04.10.2010
Адрес: Расчленинград
Сообщения: 599
Репутация: 171
MoyUspeh сказал(a):
Удачи!
И вам не хворать.
  Ответить с цитированием
Старый Сегодня, 01:22   #19
1234567890 [ Онлайн ]
Главный Кинооператор
Медаль пользователю. ЗОЛОТОМедаль автору. ЗОЛОТО Великий Гуру
Аватар для 1234567890
Регистрация: 15.03.2008
Адрес: Всеми́рная паути́на
Сообщения: 4,565
Репутация: 490
MoyUspeh сказал(a):
Удачи!
ZenitFan сказал(a):
И вам не хворать.
"на колу висит мочало начинаем всё сначала"
  Ответить с цитированием
Ответ


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

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



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