# ColorMatrix

## Общая информация

автор: Wilbert Dijkhof и другие
версия: 1.9
загрузка: http://www.avisynth.org/warpenterprises/
категория: Разнообразные другие плагины
требования:

- YV12 & YUY2 цветовой формат
- none / MMX

лицензия: GPL

## Использование

`ColorMatrix` (clip, string "mode", bool "interlaced", bool "mmx", bool "hints", string "d2v", bool "debug")

## Описание фильтра

`ColorMatrix` корректирует цвета потоков MPEG-2 DVD. Более корректно, многие MPEG-2 потоки используют слегка отличающиеся коэффициенты (называемые Rec.709) для хранения цветовой информации, чем это делают подпрограммы преобразования цвета AviSynth или XviD/DivX декодеры (называемые Rec.601), с тем результатом, что клипы DivX/XviD или MPEG-2, закодированные TMPGEnc/QuEnc отображатся со слегка смещенными цветами (что выглядит подобно небольщой разницы в яркости). Это может быть проверено путем открытия потока MPEG-2 прямо в VirtualDubMod.

Данный фильтр пересчитывает YUV величины (используя по умолчанию режим mode = "Rec.709->Rec.601"), предполагая коэффициенты, которые используются AviSynth/VDub/DivX/XviD, со следствием, что Ваше финальное кодирование (MPEG-2 or MPEG-4) отображается корректно. Однако, Вы можете также использовать hints = true вместо указания d2v-file d2v = filename, что делает коррекцию автоматически, если она необходима. Смотри Опции для больщей информации.

В случае, если Вы захватили что-либо, или Вы имеете XviD/DivX (оба кодированы с Rec.601 коэффициентами), и Вы хотите закодировать это в mpeg-2 используя CCE (который предполагает Rec.709 коэффициенты), Вы должны использовать следующий скрипт (прогрессивный материал)

    ColorMatrix(clip, mode="Rec.601->Rec.709")

Следующий скрипт конвертирует YV12/YUY2 поток в RGB, используя Rec.709 коэффициенты (что может быть полезно, если Вы хотите преобразовать DVD в MPEG-2 используя TMPGEnc)

    ConvertToRGB(clip, matrix="Rec.709")

Это должно дать те же результаты как

    ColorMatrix(clip, mode="Rec.601->Rec.709")
    ConvertToRGB()

Заключительное замечание. Данный фильтр будет поджимать=подрезать (clamp=round) входное видео до величин, удовлетворяющих CCIR-601 (эти диапазоны есть 16-235 для компоненты яркости и 16-240 для цветности).

### Опции

mode - режим (по умолчанию "Rec.709->Rec.601")

mode может быть "Rec.601->Rec.709" or "Rec.709->Rec.601", смотри Описание данного фильтра для примеров, когда использовать эти опции. Отметьте, что эта опция будет переопределена при использовании hints = true или d2v = filename.

interlaced (по умолчанию - false)

Для чересстрочного материала используйте

    Mpeg2source("F:\TestStreams\avs\AguileraGrammies.d2v", info=3) # для dgdecode v1.20 или новее
    ColorMatrix(hints=true, interlaced=true)

    или если Вы не хотите использовать подсказки (hints)

    Mpeg2source("F:\TestStreams\avs\AguileraGrammies.d2v")
    ColorMatrix(interlaced=true)

mmx (по умолчанию - true)

Из-за разницы округления, выход MMX (присутствует только для YV12) и C не являются точно одинаковыми. Максимальное отличие на плоскости Y это +-2 и для UV это +-1. Параметр mmx включен, чтобы отменить использование mmx-оптимизации, если вы хотите обойтись.

    ColorMatrix(clip, mode="Rec.601->Rec.709", mmx=false)

hints - подсказки (по умолчанию - false)

DGDecode v1.20 и более новые версии выводят колориметрические подсказки в видео. Колориметрпическая информация (смотри Колориметрия) может быть просмотрена используя

    Mpeg2source("F:\TestStreams\avs\AguileraGrammies.d2v", info=1)

Подсказки используются, если установлено info=3 in Mpeg2source, установлено hints = true в ColorMatrix и если ColorMatrix используется сразу после загрузки видео

Mpeg2source("F:\TestStreams\avs\AguileraGrammies.d2v", info=3)
ColorMatrix(hints=true)

Если подсказки не передаются (например из-за того что используется неверная версия dvd2avi/dgdecode), это приведет к ошибке.

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

d2v

Если указывается d2v файл, то колориметрическая информация будет браться прямо из него самого.

Mpeg2source("F:\TestStreams\avs\AguileraGrammies.d2v")
ColorMatrix(d2v="AguileraGrammies.d2v")

Это полезно, когда колориметрическая информация не меняется на протяжении Вашего видео (как всегда в большинстве случаев), так как это намного быстрее чем использование подсказок. Если произойдет, то это приведет к ошибке. Если d2v- файл помещен в другом каталоге, чем AviSynth скрипт, Вы должны дать полный путь к d2v-файлу.

Для интересующихся людей, это есть данная (и последующие) строка(и) в файле d2v

    800 5 0 8210 0 0 32 32 92 b2 b2 a2 b2 b2 a2 b2 b2 a2

Я сделал колориметрическую информацию жирным шрифтом. Смотри Колориметрия для объяснений этой информации.

debug - отладка

Вы можете использовать debug = true, чтобы проверить, что подсказки обнаруживаются. Выводит отладочную информацию через OutputDebugString() (используйте утилиту DebugView для просмотра этой информации).

### Колориметрия (Colorimetry)

Это список всех возможностей согласно спецификациям mpeg-2 и DGDecode, и после этого как GSpot называет это

1 ITU-R BT.709 | I709
4 FCC (почти то же самое как ITU-R BT.601) | FCC
5 ITU-R BT.470-2 (точно как ITU-R BT.601) (рекомендации BT.601 это обновление BT.470-2) | I470
6 SMPTE 170M (точно как ITU-R BT.601) | S170
7 SMPTE 240M (почти такое же как ITU-R BT.709) | S240

Для ColorMatrix мы предполагаем I709 = S240 и I470=FCC=S170, так как ошибка будет очень малой.

## Фоновая информация

Существуют несколько способов преобразования поток YUV в RGB. Наиболее хорошо известный способ использует коэффициенты Rec.601. Это например используется в функциях цветовых преобразрваний AviSynth, VirtualDub и XviD/DivX. При проигрывании XviD/DivX поток преобразуется в RGB с использованием коэффициенты Rec.601. Основной вопрос в том, что иногда используются другие коэффициенты для преобразования YUV в RGB conversion (два других есть коэффициенты Rec.709 и коэффициенты FCC). Проблема происходит, если поток кодируется с использованием одного набора коэффициентов (Rec.709 для многоих dvd потоков например), и где-то в цепочке перекодирования-обработки-проигрывании предполагается другой набор коэффициентов (Rec.601 для XviD/DivX декодера или FCC коэффициенты для TMPGEnc/QuEnc или Rec.709 коэффициенты для CCE). Вы получите небольщое искажение цвета, которое выглядит подобно изменению в яркости (это в действительности не является изменением яркости, цвета просто слегка не те).

Как вы узнаете, какой набор коэффициентов используется при кодировании MPEG-2 потока? Иногда коэффициенты хранятся в заголовке MPEG-2 файла (поле "matrix coefficients" в расширении отображения последовательности ("sequence display extension")). Новые версии GSpot способны прочитать эту часть заголовка, но также и DGDecode (с Mpeg2source(info=1)) может быть использовано чтобы просмотреть их. Если данное расширенное поле не присутствует в заголовке MPEG-2 файла, спецификация говорит, что мы предполагаем использовать по умолчанию коэффициенты Rec.709 (0.2126, 0.7152, 0.0722).

## Ссылки

пользователи сообщают проблему - получение разной яркости при сравнении скрипта avs с открытием mpeg2 прямо VDubMod.
фоновая информация - doom9 ветка о проблеме.
Поле "matrix coefficients" указывает набор коэффициентов данный в Table 6-9 ISO/IEC 13818-2, раздел 6.3.6 (Rec.709 не совсем корректен).
ITU-R_BT.709 - вы можете получить три свободных рекомендации на существующий email адрес.

## Версии

v1.9, 23th February 2005 (by tritical)

- Исправлено переполнение в rec.601->rec.709 mmx преобразовании.

v1.8, 13th February 2005 (by tritical)

- Можно использовать подсказки от dgdecode.dll (dgdecode v1.2 и выше) если hints=true.
- Можно использовать информацию в d2v если задано d2v=filename.
- Поддержка чересстрочности (interlaced=true).
- Отдадочная информация (debug).

v1.7, 30th January 2005 (by tritical)

- mmx и другие оптимизации.

v1.6, 29th January 2005 (by Wilbert)

- Небольшие исправления (исправлено Rec.601->Rec.709 в режиме YV12).

v1.5, 30th October 2004 (by Wilbert)

- Исправлены mpeg2-коэффициенты (из ITU-R_BT.709, ISO/IEC 13818-2 слегка неверны).
- mpeg2-коэффициенты переименованы в Rec.709.
- mpeg1-коэффициенты переименованы в Rec.601.
- Удалено rgb=true, так как внутренняя ConvertToRGB(clip, matrix="Rec.709") быстрее.

v1.4, 26th October 2004 (by Wilbert)

- Добавлен режим "mpeg1->mpeg2" .
- Добавлено rgb=true, что преобразует в RGB24 используя mpeg2 коэффициенты.

v1.3, 4th of October 2004 (by Manao)

- Заменены плавающие float на целые вычисления. Почти в 2 раза быстрее.

v1.2, 12th September 2004 (by Sh0dan)

- Использованы float вместо double. Они имеют достаточную точнось и много быстрее. Это может однако быть изменено обратно путем змены typedef в ColorMatrix.h
- Более простые алгоритмы.
- Использован внутренний ограничитель также для выхода, вместо очень медленного if-then.
- Лучшее округление (добавление 0.5 для более точного преобразования float в int).

v1.1, 12th September 2004

- Использован ограничитель сначала, чтобы получить удовлетворяющее CCIR-601 цифровое видео.
- Также возвращает удовлетворяющее CCIR-601 цифровое видео.

v1.0, 11th September 2004

- Начальный выпуск.

`$English Date: 2005/07/10 16:11:01 $
Русский перевод 02.10.2005 Fizick http://bag.hotmail.ru`