Использование кодека SIF1.

Содержание :


Для начала несколько полезных советов по кодированию видео с помощью SIF1.

Для изменения размеров исходного видео лучше всего использовать наиболее качественные функции интерполяции из доступных. Для получения наилучшего результата я рекомендую пользоваться функцией Spline64Resize из пакета AviSynth вместо функции LanczosResize. Размер сжимаемого изображения должен быть кратен 16 по горизонтали, и 2 по вертикали. Однако если размер изображения по вертикали также кратен 16 кодек работает несколько лучше.

SIF1 слабо чувствителен к шумам на изображении и прекрасно работает с шумными исходниками. При этом психовизуальная модель настроена таким образом, чтобы максимально сохранять исходный вид картинки. Таким образом, при сильном сжатии шумы не отфильтровываются, а в первую очередь режется их динамика. Шумы становятся «стационарными», но картинка от этого не начинает выглядеть «цифровой» или «отфильтрованной». Поэтому фильтровать шумы перед сжатием имеет смысл, только если их наличие раздражает в исходном видео и их хочется убрать.

На данный момент в кодеке реализовано четыре различных режима сжатия. Они выбираются в выпадающем списке "Compression mode". Рассмотрим их по порядку.


Однопроходное кодирование с заданным уровнем визуального качества (Single pass quality based).

Данный режим очень полезен в тех случаях, когда нужно получить заданное качество сжатого видео при минимально возможном его размере. При этом используется вся мощь встроенной в кодек психовизуальной модели. Дело в том, что в самой структуре кодека изначально была заложена возможность чрезвычайно гибкой адаптации к локальным параметрам входного изображения. Такая гибкость недоступна для кодеков, сделанных по традиционной технологии.

В процессе сжатия имеющаяся психовизуальная модель постоянно анализирует сжимаемую картинку, и для каждого сжимаемого участка изображения вычисляет степень чувствительности глаза к искажениям на этом участке. После этого для каждого участка исходного изображения выбираются такие параметры кодирования, чтобы получить максимально возможное сжатие, не превысив при этом заданный уровень визуальных искажений.

Поэтому, кстати, бессмысленно измерять качество сжатого этим кодеком изображения с помощью обычных линейных метрик (PSNR). Психовизуальная метрика SSIM дает несколько лучшие результаты, но она тоже не совсем адекватна, т.к. анализирует каждый кадр независимо, не учитывая движения на изображении. Для SSIM искажения на быстро двигающихся предметах и на стационарных равнозначны, хотя для человеческого глаза это не так. В отличие от SSIM, текущая психовизуальная модель, реализованная в SIF-е, адекватно учитывает локальные движения на изображении, и поэтому она превосходит все другие распространенные метрики. Соответственно единственным объективным критерием качества сжатого изображения могут быть только ваши глаза. Объективные метрики хороши для сравнения кодеков, сделанных с использованием похожих технологий сжатия, но плохо применимы к сравнению кодеков, сделанных по совершенно разным технологиям.

В режиме "Single pass quality based" [1] за качество сжатой картинки отвечает параметр "Visual distortion" [2]. При его увеличении сжатие растет, а качество сжатого видео падает.

Для ориентира можно считать, что:

  • При уровне V.D. в районе 20-25 достигается качество сжатого видео, почти не отличимое от оригинала.
  • При уровне V.D. районе 40-50 получается обычное качество видео.
  • Уровни V.D. вплоть до 60-70 вполне пригодны для использования.

Данные соотношения справедливы для исходника практически любого типа – и на темных и на светлых видеофрагментах, и на статике и на динамике визуальное качество будет примерно одинаковым.

Единственным исключением являются исходники с высоким уровнем шума на изображении, для них нужно повышать уровень V.D. При этом, как уже было сказано выше, в первую очередь режется динамика шума, а не собственно картинка.

Таким образом, если получение точного размера видео для вас не важно, то можно один раз установить приемлемый уровень V.D. и сжимать все с ним, не заботясь о других настройках.


Двухпроходное кодирование с заданным средним битрейтом.

Этот классический режим кодирования полезен тогда, когда нужно получить точные размеры сжатого видео, например для записи его на CD или DVD.

Сначала производится анализирующий проход сжатия - режим (Twopass – 1st pass) [3]. При этом производится запись файла статистики. По умолчанию файл статистики имеет название "sif_stat.sta" [5] и сохраняется в папку со сжимаемым видео.

Имя файла статистики, а также путь к нему задается в поле "Stats filename" [5], которое находится в вкладке "Additional settings".

Файл статистики можно сохранять и использовать для повторных кодирований с разными битрейтами.

Также в настройках первого прохода при двухпроходном кодировании есть одна тонкость – это установка значения "Visual distortion" [4] для первого прохода. Для достижения оптимального качества кодирования уровень V.D. должен быть такой же или несколько выше, чем средний уровень V.D. в окончательно сжатом файле. Соответственно имеет смысл прикинуть уровень качества сжатого фильма и установить V.D. в соответствующее значение. Например, для шумных исходников V.D. первого прохода стоит повысить.

В любом случае, если вы не уверены в этих настройках, лучше оставить значение по умолчанию.

Скорость работу кодека на первом проходе можно значительно ускорить, если выбрать режим "Fast 1st pass" [6]. В этом режиме заданные скоростные настройки кодека игнорируются, а вместо них включаются специальные упрощенные настройки для быстрого кодирования. Использование этого режима может незначительно повлиять на качество, но зато позволяет ускорить первый проход приблизительно в 2 раза при кодировании со стандартными настройками качества.

Во время первого прохода, помимо сохранения файла статистики, сохраняется пустой видеофайл, не содержащий полезных данных.

После окончания первого прохода можно приступать к окончательному сжатию видео. Для этого нужно выбрать режим второго прохода (Twopass – 2nd pass) [8] и установить нужное значение битрейта (Target bitrate (kbps:)) [9], либо установив его с помощью ползунка, либо введя его в соответствующее поле. Значение битрейта задается в килобитах в секунду и при этом не учитывается overhead (дополнительные данные) контейнера, в котором будет храниться видео. Например overhead авишного контейнера находится в пределах нескольких килобит в секунду. На это значение увеличится общий битрейт файла.

Для расчета необходимого битрейта можно использовать те же программы-калькуляторы битрейта, что и для обычного DivX кодека. Можно даже воспользоваться родным калькулятором, встроенным в DivX или XviD – они вполне годятся.

Если при первом проходе использовалось особое имя файла статистики, то его нужно указать в окне "Stats filename". Если же это имя не менялось, то и при втором проходе ничего трогать не надо.

Также на качество видео, получающегося при втором проходе, в некоторой степени влияет параметер "Buffer size" [7], который находится во вкладке "Additional settings ". Он определяет диапазон сглаживания данных первого прохода при работе движка контроля битрейта. По умолчанию это значение равно 8 секундам и лучше его не менять, если в этом нет осознанной необходимости ;).

Оставшиеся два режима сжатия предназначены для передачи видео по сети с явно ограниченным максимальным битрейтом. В частности, они могут применяться при потоковом вещании в режиме реального времени.


Режим однопроходного сжатия с адаптивным битрейтом (Single pass ABR).

Данный режим [10] уникален своим механизмом взаимодействия между психовизуальной моделью и движком контроля битрейта.

Процесс сжатия в этом режиме определяется двумя параметрами:

  • Максимальным качеством сжатия изображения, которое задается параметром "Visual distortion" [12],
  • и предельным битрейтом сжатого видео, который устанавливается параметром "Target bitrate (kbps:)" [11].

Логика контроля битрейта в этом режиме работает следующем образом – если видео может быть сжато с заданным уровнем V.D. и битрейтом ниже установленного, то так и происходит. В противном случае битрейт ограничивается на уровне, заданном параметром "Target bitrate".

Режим ABR при правильно выставленных параметрах сжатия позволяет получать гораздо меньшие по размеру файлы, чем файлы, закодированные в режиме "классического" CBR.

При этом качество таких файлов будет не ниже оригинального CBR. В результате, если использовать такой режим при кодировании файлов, выложенных на сервер, то можно получить значительную – 35%-40% и выше – экономию трафика сервера при сохранении высокого качества интернет-вещания.

Поэтому данный режим рекомендуется на замену классического CBR во всех случаях, кроме каких-нибудь специальных.

С параметром "Target bitrate" тесно связан параметр "Buffer size" [13], который определяет, сколько секунд при заданном битрейте нужно буферизировать поток, чтобы стало возможным беспрерывное воспроизведение. Например, целевой битрейт в 300 килобод при размере буфера в 8 секунд означает, что гарантируется бесперебойное воспроизведение с любого ключевого кадра в потоке при пропускной способности канала в 300 килобод и при условии буферизации входного видео в течении 8 секунд. Если реальный битрейт канала выше этих 300 килобод, то время буферизации для гарантированного воспроизведения соответственно снижается.


Режим однопроходного сжатия с постоянным битрейтом (Single pass СBR).

Это классический режим кодирования с постоянным битрейтом, когда кодек пытается постоянно поддерживать один и тот же битрейт на протяжении всего сжатого файла.

На мой взгляд, этот режим [14] сильно проигрывает режиму ABR, который и рекомендуется к использованию во всех случаях, кроме каких-нибудь специальных.

Битрейт сжатого видео устанавливается параметром "Target bitrate (kbps:)" [15]. Так же, как в случае с режимом кодирования ABR, гарантируется бесперебойное воспроизведение сжатого видео с любого ключевого кадра при передаче сжатого видео по каналу с пропускной способностью, равной "Target bitrate", при условии буферизации в течении "Buffer size" секунд.


Дополнительные настройки.

Помимо перечисленных выше настроек, во вкладке "Additional settings" имеются еще несколько дополнительных настроек, которые иногда могут быть полезны.

Maximum I-frame interval [16] – Максимальное расстояние между ключевыми кадрами. Кодек поддерживает автоматическую расстановку ключевых кадров в местах, где происходит смена сцены. Если же картинка стабильна, то ключевые кадры вставляются с периодом, задающимся данным параметром.

Color quantization scaling [17] – Этот параметр задает отношение уровней сжатия цветовой и яркостной составляющей изображения. Может быть полезен в некоторых случаях. Например, можно улучшить качество передачи цвета, понизив этот параметр, правда, общий битрейт от этого несколько возрастет. А можно, наоборот, повысить этот параметр для исходника с большим уровнем цветовых шумов – тогда можно несколько выгадать в битрейте.

Additional quantizer [18] – Уровень дополнительного квантования. Так как алгоритм SIF-сжатия является простой разновидностью разложения видео на объекты, то в результате работы ядра сжатия возникает два массива данных – "геометрия" и "текстуры". Так вот, эти "текстуры" дополнительно квантуются и сжимаются, а относительный порог сжатия этих "текстур" определяется данным параметром. В принципе данный параметр настроен на оптимальное сжатие, но в каждом конкретном случае небольшая подстройка может несколько улучшить конечный результат. В то же время неправильная настройка этого параметра может результат очень сильно ухудшить. Поэтому если вы не уверены в своих силах, то лучше его не трогать и оставить значение по умолчанию.

Reset to Defaults [19] – Сбрасывает все установки в значения по умолчанию. Полезная кнопка, когда нужно устранить последствия экспериментов с настройками...


Настройки качества и скорости.

Вкладка "Quality and Speed" предназначена для тонкой регулировки между скоростью работы кодека и качеством получаемого результата. В ней есть настройки влияющие на скорость и качество кодирования, а также настройки влияющие на скорость декодирования.

Ползунок ME method [20] позволяет выбрать алгоритм определения векторов движения. Чем правее установлен этот ползунок, тем выше качество определения векторов движения, но ниже скорость работы кодека. Режимы определения векторов движения, более быстрые чем Standard пока сделаны чисто номинально. Т.к. для действительно качественной скоростной оптимизации, нужно писать дополнительный код. А его, пока не произведена мультипоточная оптимизация движка SIF преобразования, писать особого смысла нет. Но в будущем скоростные режимы сжатия несомненно будут сделаны.

Sub-ME method [21] – Задает алгоритм определения оптимального разбиения поля движения на блоки разного размера, и дополнительной субпиксельной подстройки векторов движения. По своей сути этот параметр эквивалентен параметру --subme кодека x264 и также очень влияет на конечное качество. Не рекомендуется устанавливать этот параметр в значение Fastest т.к. это очень сильно снижает качество работы кодека.

Use chroma ME [22] – Этот параметр включает режим определения векторов движения не только по значениям яркости, но и по значениям цвета. Отключение этого режима ускоряет работу кодека, но может ухудшить качество сжатия.

Параметр Entropy codec: Max threads number: [23] – Влияет на максимальное число потоков поддерживаемых энтропийным кодеком при декодировании. Этот параметр предназначен для поддержки эффективного декодирования файлов сжатых с большими и очень большими битрейтами. При этом, данное число является максимально возможным числом потоков декодирования. Если декодирующий процессор имеет меньшее число ядер, чем максимальное, энтропийный декодер будет использовать ближайшее кратное двойки число потоков. Например, при установке Max threads number в 8 потоков, поддерживается эффективная работа с 8,4,2, и 1 потоком. При этом на 6 ядерном процессоре энтропийный кодек будет работать в режиме 4 потоков. Хочу отметить, что этот параметр практически не влияет на скорость кодирования, а при декодировании основная часть декодера использует любое число потоков вплоть до 32. То есть на 6 ядерном процессоре энтропийный кодек будет использовать 4 потока, а остальная часть декодера все 6.

К сожалению, мультипоточные режимы работы энтропийного кодека не являются полностью "бесплатными" относительно эффективности сжатия. Чем ниже битрейт кодируемого файла, тем больше штраф, за использование многопоточности в энтропийном кодеке. Поэтому оптимальным режимом кодирования является такой, когда на один поток в энтропийном кодеке приходится не менее 5-10 мегабит сжатых данных. В таком режиме штраф за использование многопоточности ничтожно мал. Соответственно можно придерживаться таких критериев - для SD видео нужно устанавливать режим 1 потока. Для Half-HD - 1 или 2 потока в зависимости от битрейта, а для Full-HD - 2 или 4 потока. Все 8 потоков нужно выбирать только при кодировании с огромными битрейтами - 40 мегабит и выше.

Если нет желания вникать в подобные технические тонкости, то всегда можно установить параметр Automatically select [24], чтобы кодек сам выбирал режим кодирования, но во многих случаях автоматика может и ошибаться...





Новости СтатьиDownloadsО SIF-е Ссылки

• Идеи, статьи, программы Neiromaster © 2003-2011