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
Аватара
Откуда: Криворіжжя
Репутация: 103
С нами: 11 лет 5 месяцев

Сообщение #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
Аватара
Репутация: 252
С нами: 4 года 8 месяцев

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

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

Сообщение #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
Аватара
Откуда: Криворіжжя
Репутация: 103
С нами: 11 лет 5 месяцев

Пред.

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