FLAC

Список разделов Другое Аудиоформаты

Описание: Аудиоформаты, конвертация и другие связанные вопросы

Сообщение #41 postED » 25.08.2018, 02:24

Провел тут самоликбез по ffmpeg-овскому энкодеру флаки, что основан на наработках альтернативного flake. Имеет степени сжатия 0-12, и 11-12 считаются non-subset (могут возникнуть сложности при воспроизведении на железках). Немного инфы из мануалов:
Код: Выделить всё
Levels 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 and 10 should generate subset-compatible streams, 11 and 12 should not. The difference is that 11 and 12 are allowed to use a much larger predictor (32) order which is not allowed in the subset. Other than that, there is no subset-incompatible behaviour.
Код: Выделить всё
[flac @ 000000000034ff60]  compression: 0
[flac @ 000000000034ff60]  lpc type: Fixed pre-defined coefficients
[flac @ 000000000034ff60]  prediction order: 2, 3
[flac @ 000000000034ff60]  order method: estimate
[flac @ 000000000034ff60]  partition order: 2, 2
[flac @ 000000000034ff60]  block size: 1152
[flac @ 000000000034ff60]  lpc precision: 15

[flac @ 000000000034ff60]  compression: 1
[flac @ 000000000034ff60]  lpc type: Fixed pre-defined coefficients
[flac @ 000000000034ff60]  prediction order: 0, 4
[flac @ 000000000034ff60]  order method: estimate
[flac @ 000000000034ff60]  partition order: 2, 2
[flac @ 000000000034ff60]  block size: 1152
[flac @ 000000000034ff60]  lpc precision: 15

[flac @ 0000000002c2ff60]  compression: 2
[flac @ 0000000002c2ff60]  lpc type: Fixed pre-defined coefficients
[flac @ 0000000002c2ff60]  prediction order: 0, 4
[flac @ 0000000002c2ff60]  order method: estimate
[flac @ 0000000002c2ff60]  partition order: 0, 3
[flac @ 0000000002c2ff60]  block size: 1152
[flac @ 0000000002c2ff60]  lpc precision: 15

[flac @ 0000000002bfff60]  compression: 3
[flac @ 0000000002bfff60]  lpc type: Levinson-Durbin recursion with Welch window
[flac @ 0000000002bfff60]  prediction order: 1, 6
[flac @ 0000000002bfff60]  order method: estimate
[flac @ 0000000002bfff60]  partition order: 0, 3
[flac @ 0000000002bfff60]  block size: 4608
[flac @ 0000000002bfff60]  lpc precision: 15

[flac @ 0000000002b2ff60]  compression: 4
[flac @ 0000000002b2ff60]  lpc type: Levinson-Durbin recursion with Welch window
[flac @ 0000000002b2ff60]  prediction order: 1, 8
[flac @ 0000000002b2ff60]  order method: estimate
[flac @ 0000000002b2ff60]  partition order: 0, 3
[flac @ 0000000002b2ff60]  block size: 4608
[flac @ 0000000002b2ff60]  lpc precision: 15

[flac @ 0000000002b8ff60]  compression: 5
[flac @ 0000000002b8ff60]  lpc type: Levinson-Durbin recursion with Welch window
[flac @ 0000000002b8ff60]  prediction order: 1, 8
[flac @ 0000000002b8ff60]  order method: estimate
[flac @ 0000000002b8ff60]  partition order: 0, 8
[flac @ 0000000002b8ff60]  block size: 4608
[flac @ 0000000002b8ff60]  lpc precision: 15

[flac @ 0000000002b2ff60]  compression: 6
[flac @ 0000000002b2ff60]  lpc type: Levinson-Durbin recursion with Welch window
[flac @ 0000000002b2ff60]  prediction order: 1, 8
[flac @ 0000000002b2ff60]  order method: 4-level
[flac @ 0000000002b2ff60]  partition order: 0, 8
[flac @ 0000000002b2ff60]  block size: 4608
[flac @ 0000000002b2ff60]  lpc precision: 15

[flac @ 000000000034ff60]  compression: 7
[flac @ 000000000034ff60]  lpc type: Levinson-Durbin recursion with Welch window
[flac @ 000000000034ff60]  prediction order: 1, 8
[flac @ 000000000034ff60]  order method: log search
[flac @ 000000000034ff60]  partition order: 0, 8
[flac @ 000000000034ff60]  block size: 4608
[flac @ 000000000034ff60]  lpc precision: 15

[flac @ 0000000002bcff60]  compression: 8
[flac @ 0000000002bcff60]  lpc type: Levinson-Durbin recursion with Welch window
[flac @ 0000000002bcff60]  prediction order: 1, 12
[flac @ 0000000002bcff60]  order method: 4-level
[flac @ 0000000002bcff60]  partition order: 0, 8
[flac @ 0000000002bcff60]  block size: 4608
[flac @ 0000000002bcff60]  lpc precision: 15

[flac @ 0000000002b9ff60]  compression: 9
[flac @ 0000000002b9ff60]  lpc type: Levinson-Durbin recursion with Welch window
[flac @ 0000000002b9ff60]  prediction order: 1, 12
[flac @ 0000000002b9ff60]  order method: log search
[flac @ 0000000002b9ff60]  partition order: 0, 8
[flac @ 0000000002b9ff60]  block size: 4608
[flac @ 0000000002b9ff60]  lpc precision: 15

[flac @ 0000000002b2ff60]  compression: 10
[flac @ 0000000002b2ff60]  lpc type: Levinson-Durbin recursion with Welch window
[flac @ 0000000002b2ff60]  prediction order: 1, 12
[flac @ 0000000002b2ff60]  order method: full search
[flac @ 0000000002b2ff60]  partition order: 0, 8
[flac @ 0000000002b2ff60]  block size: 4608
[flac @ 0000000002b2ff60]  lpc precision: 15

[flac @ 0000000002bbff60]  compression: 11
[flac @ 0000000002bbff60]  lpc type: Levinson-Durbin recursion with Welch window
[flac @ 0000000002bbff60]  prediction order: 1, 32
[flac @ 0000000002bbff60]  order method: log search
[flac @ 0000000002bbff60]  partition order: 0, 8
[flac @ 0000000002bbff60]  block size: 4608
[flac @ 0000000002bbff60]  lpc precision: 15

[flac @ 000000000035ff60]  compression: 12
[flac @ 000000000035ff60]  lpc type: Levinson-Durbin recursion with Welch window
[flac @ 000000000035ff60]  prediction order: 1, 32
[flac @ 000000000035ff60]  order method: full search
[flac @ 000000000035ff60]  partition order: 0, 8
[flac @ 000000000035ff60]  block size: 4608
[flac @ 000000000035ff60]  lpc precision: 15
Код: Выделить всё
FLAC encoder AVOptions:
  -lpc_coeff_precision <int>        E...A.... LPC coefficient precision (from 0 to 15) (default 15)
  -lpc_type          <int>        E...A.... LPC algorithm (from -1 to 3) (default -1)
     none                         E...A....
     fixed                        E...A....
     levinson                     E...A....
     cholesky                     E...A....
  -lpc_passes        <int>        E...A.... Number of passes to use for Cholesky factorization during LPC analysis (from 1 to INT_MAX) (default 2)
  -min_partition_order <int>        E...A.... (from -1 to 8) (default -1)
  -max_partition_order <int>        E...A.... (from -1 to 8) (default -1)
  -prediction_order_method <int>        E...A.... Search method for selecting prediction order (from -1 to 5) (default -1)
     estimation                   E...A....
     2level                       E...A....
     4level                       E...A....
     8level                       E...A....
     search                       E...A....
     log                          E...A....
  -ch_mode           <int>        E...A.... Stereo decorrelation mode (from -1 to 3) (default auto)
     auto                         E...A....
     indep                        E...A....
     left_side                    E...A....
     right_side                   E...A....
     mid_side                     E...A....
  -exact_rice_parameters <boolean>    E...A.... Calculate rice parameters exactly (default false)
  -multi_dim_quant   <boolean>    E...A.... Multi-dimensional quantization (default false)
  -min_prediction_order <int>        E...A.... (from -1 to 32) (default -1)
  -max_prediction_order <int>        E...A.... (from -1 to 32) (default -1)
Для дальнейшего увеличения сжатия можно попробовать ключем -lpc_type сменить алгоритм LPC с levinson на cholesky ценой незначительного падения скорости кодирования. Ключ -lpc_passes регулирует количество проходов cholesky - чем выше значение, тем ниже скорость кодирования. Стандартно 2, разумные значения от 2 до 10.
Ключ -exact_rice_parameters 1 еще мизерно увеличивает сжатие
Ключ -multi_dim_quant 1 для самых мазохистов терпеливых. Скорость словно при серьезном видеокодировании :insane:.
FLAC -8 // Storage
Opus --bitrate 96 // Portable
postED M
Аватара
Откуда: Криворіжжя
Репутация: 108
С нами: 11 лет 10 месяцев

Сообщение #42 Azaza » 07.09.2018, 00:22

postED:block size: 4608
Такие файлы хоть и не являются non-subset, но на деле могут вызывать проблемы у некоторых железных плееров, которые не поддерживают размер блока больше 4096. Пример1, пример 2

А какую команду в ffmpeg нужно использовать, чтобы увидеть эту информацию?
[flac @ 000000000034ff60] compression: 0
[flac @ 000000000034ff60] lpc type: Fixed pre-defined coefficients
[flac @ 000000000034ff60] prediction order: 2, 3
[flac @ 000000000034ff60] order method: estimate
[flac @ 000000000034ff60] partition order: 2, 2
[flac @ 000000000034ff60] block size: 1152
[flac @ 000000000034ff60] lpc precision: 15
Аудиофилия - это болезнь,поражающая головной мозг.Набор профилактически-превентивных мер против аудиофилии крайне скуден - техническое образование, умение мыслить логически и наличие здравого смысла.
Azaza M
Аватара
Репутация: 271
С нами: 5 лет

Сообщение #43 postED » 07.09.2018, 03:41

Azaza:А какую команду в ffmpeg нужно использовать, чтобы увидеть эту информацию?
Не знаю. Нашел я эту инфу на xiph'овском mailing list. Наиболее достоверную инфу можно получить читая исходники энкодера.
FLAC -8 // Storage
Opus --bitrate 96 // Portable
postED M
Аватара
Откуда: Криворіжжя
Репутация: 108
С нами: 11 лет 10 месяцев

Сообщение #44 postED » 24.01.2021, 06:43

Нужно пояснение по поводу оконных функций и как они работают вместе. Хоть в мануале и написано "When more than one function is specified, then for every subframe the encoder will try each of them separately and choose the window that results in the smallest compressed subframe", при перетасовке функций результат поменялся.

Параметры, принятые в текущей версии как -8
Код: Выделить всё
flac -l 12 -b 4096 -m -r 6 -A tukey(5e-1);partial_tukey(2);punchout_tukey(3) test.wav -o test1.flac
test.wav: wrote 31598469 bytes, ratio=0,499
Если тукей отправить в конец
Код: Выделить всё
flac -l 12 -b 4096 -m -r 6 -A partial_tukey(2);punchout_tukey(3);tukey(5e-1) test.wav -o test2.flac
test.wav: wrote 31595058 bytes, ratio=0,499

Второй файл оказался даже слегка меньше, чем со стандартными параметрами. Так как все же это работает?..
FLAC -8 // Storage
Opus --bitrate 96 // Portable
postED M
Аватара
Откуда: Криворіжжя
Репутация: 108
С нами: 11 лет 10 месяцев

Сообщение #45 postED » 24.08.2021, 05:06

Решил еще раз потестить энкодер пакета ffmpeg - и он вполне хорош. Если массовую (насыщенную) музыку он сжимает несколько хуже референсного энкодера, то эмбиент может лучше. А иногда заметно лучше, достигая уровня максимального сжатия wavpack - чтобы получить хотя бы близкую степень сжатия на референсном энкодере, нужно добавлять -e -p и увеличивать значения partial_tukey и punchout_tukey, что снижает скорость сжатия до совсем уж неприличных значений.

Строки для фубара (ключи -lpc_type cholesky, -lpc_passes 10 и -exact_rice_parameters 1 улучшают сжатие за счет уменьшения скорости, все три вместе на моем пк замедляют кодирование примерно в 5-6 раз):

Уровень 10 (subset), размер блока 4096. Файл, сжатый этими параметрами, просто обязан читаться любым железным плеером.
Код: Выделить всё
-i - -compression_level 10 -frame_size 4096 %d
-i - -compression_level 10 -frame_size 4096 -lpc_type cholesky -lpc_passes 10 -exact_rice_parameters 1 %d

Уровень 10 (subset), размер блока по-умолчанию (4608)
Код: Выделить всё
-i - -compression_level 10 %d
-i - -compression_level 10 -lpc_type cholesky -lpc_passes 10 -exact_rice_parameters 1 %d

Уровень 12 (non-subset), размер блока по-умолчанию (4608). Далеко не все железки могут потянуть, но фубар без проблем читает.
Код: Выделить всё
-i - -compression_level 12 %d
-i - -compression_level 12 -lpc_type cholesky -lpc_passes 10 -exact_rice_parameters 1 %d

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

flac -8: 386 kbps. Бинарник версии 1.3.3 из пакета Free Encoder Pack
flac -8 -e -p: 374 kbps. Скорость наверно раз в 30 ниже.

ffmpeg, уровень 10, размер блока 4096: 354 kbps. Скорость где-то в полтора раза ниже flac -8
ffmpeg, уровень 10, размер блока 4608: 353 kbps.

ffmpeg, уровень 10, размер блока 4096, дополнительные ключи: 352 kbps. Скорость где-то в три раза выше flac -8 -e -p
ffmpeg, уровень 10, размер блока 4608, дополнительные ключи: 351 kbps.

ffmpeg, уровень 12: 351 kbps. Скорость по сравнению с уровнем 10 примерно в 4 раза ниже. И в пять раз выше, чем у flac -8 -e -p
ffmpeg, уровень 12, дополнительные ключи: 348 kbps. Скорость сопоставима с flac -8 -e -p

wavpack -hh -x3: 379 kbps. Скорость втрое ниже flac -8
wavpack -hh -x6: 355 kbps. Скорость в полтора раза выше -8 -e -p
FLAC -8 // Storage
Opus --bitrate 96 // Portable
postED M
Аватара
Откуда: Криворіжжя
Репутация: 108
С нами: 11 лет 10 месяцев

Сообщение #46 Azaza » 25.08.2021, 20:19

CUETools (CUETools.Flake) тоже не отстаёт.
-8 даёт почти такое же сжатие (а на некоторых файлах даже лучше), как ffmpeg -compression_level 12 -lpc_type cholesky -lpc_passes 10 -exact_rice_parameters 1. При этом скорость раз в 10 выше и сохраняется полная совместимость с железными плеерами.
-11 - если и попадаются файлы, на которых сжатие хуже, чем у ffmpeg -compression_level 12 -lpc_type cholesky -lpc_passes 10 -exact_rice_parameters 1 то разница совсем минимальна, а скорость раз в 6 выше.
Аудиофилия - это болезнь,поражающая головной мозг.Набор профилактически-превентивных мер против аудиофилии крайне скуден - техническое образование, умение мыслить логически и наличие здравого смысла.
Azaza M
Аватара
Репутация: 271
С нами: 5 лет

Сообщение #47 postED » Вчера, 00:19

Azaza, в CUETools.Flake максимальное subset сжатие -8 -e 32 -s search --window-method search, или еще что-то можно добавить? Подробного мануала конечно не хватает, потому как не ясно, какие параметры приняты за -0 .. -11. Также не ясно, какие оконные функции используются.
FLAC -8 // Storage
Opus --bitrate 96 // Portable
postED M
Аватара
Откуда: Криворіжжя
Репутация: 108
С нами: 11 лет 10 месяцев

Сообщение #48 Azaza » Вчера, 16:36

-8 -e 32 -s search -t search --window-method search -l 12 -r 0,8 -m akaike --max-precision 0,1 должно всё ещё давать subset файлы
Аудиофилия - это болезнь,поражающая головной мозг.Набор профилактически-превентивных мер против аудиофилии крайне скуден - техническое образование, умение мыслить логически и наличие здравого смысла.
Azaza M
Аватара
Репутация: 271
С нами: 5 лет

Сообщение #49 postED » Вчера, 20:18

Azaza, бегло протестировал - дает побитово идентичный результат с моим вариантом. -t search точно входит в -8, так как с -t levinson сжатие немного слабее.
FLAC -8 // Storage
Opus --bitrate 96 // Portable
postED M
Аватара
Откуда: Криворіжжя
Репутация: 108
С нами: 11 лет 10 месяцев

Пред.

Вернуться в Аудиоформаты