DGDecode

**DGDecode**, входящий в пакет DGMPGDec, является плагином декодера MPEG-1/2, разработанным для AviSynth v2.5 или выше. Он способен декодировать любой поток MPEG-1 или MPEG-2, который может быть прочитан DGIndex. Дополнительные функции включают в себя: YV12, I420 и YUY2 цветовые форматы (и RGB24 через DGVfapi), оптимизированные iDCT, последующее деблокирование и замедление, фильтрацию освещенности и многое другое!
DGDecode основан на MPEG2Dec3 v1.10, который сам основан на MPEG2Dec2 в проекте SourceForge «save-oe».

## Требования

* AviSynth 2.5.8 и ниже;
* Поддерживаемые цветовые форматы: YV12, I420 и YUY2;

## Синтаксис

### MPEG2Source

Хотя DGDecode теперь может декодировать как MPEG-1, так и MPEG-2, эта функция по-прежнему называется MPEG2Source ()
для совместимости с существующими скриптами. Вы можете использовать его для потоков MPEG-1 и MPEG-2.

* *str **d2v**=[PATH\]project.d2v*
	+ Файл проекта DGIndex. **Требуемый параметр!**
	+ Примечание 1: PATH можно игнорировать, если «project.d2v» находится в том же каталоге, что и ваш скрипт AviSynth (\* .avs).
* *int **idct**=0*
	+ Алгоритм DCT.
		- **0**;
		- 1: 32-bit MMX;
		- 2: 32-bit SSEMMX;
		- 3: 32-bit SSE2MMX;
		- 4: 64-bit Floating Point;
		- 5: 64-bit IEEE-1180 Reference;
		- 6: 32-bit SSEMMX (Skal);
		- 7: 32-bit Simple MMX (XviD);
* *int **cpu**=0*
	+ Пост-обработка (Y=яркости, C=цветности, H=горизонтали, V=вертикали)
		- **0**: DISABLE POST-PROCESSING;
		- 1: DEBLOCK\_Y\_H;
		- 2: DEBLOCK\_Y\_H, DEBLOCK\_Y\_V;
		- 3: DEBLOCK\_Y\_H, DEBLOCK\_Y\_V, DEBLOCK\_C\_H;
		- 4: DEBLOCK\_Y\_H, DEBLOCK\_Y\_V, DEBLOCK\_C\_H, DEBLOCK\_C\_V;
		- 5: DEBLOCK\_Y\_H, DEBLOCK\_Y\_V, DEBLOCK\_C\_H, DEBLOCK\_C\_V, DERING\_Y;
		- 6: DEBLOCK\_Y\_H, DEBLOCK\_Y\_V, DEBLOCK\_C\_H, DEBLOCK\_C\_V, DERING\_Y, DERING\_C;
* *bool **iPP**=[неуказано]*
	+ Режим пост-обработки. DGDecode автоматически использует флаг PROGRESSIVE\_FRAME для переключения между постобработкой на основе поля/кадра каждого кадра. Если вы хотите заставить DGDecode использовать определенный режим пост-обработки, то укажите следующие параметры:
		- **[неуказано]**: выполнить флаг PROGRESSIVE\_FRAME;
		- true: принудительная пост-обработка (чересстрочная);
		- false: принудительная пост-обработка (прогрессивная);
* *int **moderate\_h**=20, **moderate\_v**=40*
	+ Чувствительность обнаружения блоков. Чем меньше значение, тем больше чувствительность.
		- moderate\_h: **20**;
		- moderate\_v: **40**;
* *str **cpu2**=(Пример: cpu2="ooxxox")*
	+ Пост-обработка пользовательских параметров. Укажите шестизначную строку x и o в соответствии с приведенным ниже списком. (без учета регистра). Каждый «x» позволяет использовать соответствующую функцию пост-обработки. Каждый «o» отключает соответствующую функцию последующей обработки.
		- character 1: горизонтальное деблокирование яркости
		- character 2: вертикальное деблокирование яркости
		- character 3: горизонтальное деблокирование цветности
		- character 4: вертикальное деблокирование цветности
		- character 5: устранение ореолов яркости
		- character 6: устранение ореолов цветности
* *int **upConv**=0*
	+ Дискретизация (upsample) от 4:2:0 до YUY2 (4:2:2) или RGB24.
		- **0**: Не использовать дискретизацию;
		- 1: Дискретизация для YUY2 (игнорируется, если изначально 4:2:2);
		- 2: Дискретизацию для RGB24;
* *bool **iCC**=[неуказано]*
	+ Режим Дискретизации. DGDecode автоматически использует флаг PROGRESSIVE\_FRAME для переключения дискретизации между полями/кадрами каждого кадра. Если вы хотите заставить DGDecode использовать определенный режим дискретизации, то укажите следующие параметры:
		- **[неуказано]**: выполнить флаг PROGRESSIVE\_FRAME;
		- true: принудительная дискретизации (чересстрочная);
		- false: принудительная дискретизации (прогрессивная);
* *bool **i420**=false*
	+ Получить на выходе цветовой формат I420. Возможно, потребуются некоторые устаревшие приложения. Игнорируется, если изначально не YV12 (4:2:0), или если дискретизация имеет параметры upConv=1 или 2.
		- true: I420;
		- **false**: Output YV12;
* *int **info**=0*
	+ Отладочная информация.
		- **0**: не создавать отладочную информацию;
		- 1: Наложение отладочной информации на видео;
		- 2: вывод отладочной информации через OutputDebugString ();
		- 3: выходные подсказки в видео (как определено в utilities.cpp / utilities.h);
* *bool **showQ**=false*
	+ Показать квантователи макроблоков.
		- true: Показать квантователи;
		- **false**: не показывать квантователи;
* *bool **fastMC**=false*
	+ Быстрая компенсация движения (Vlad's). Дает очень небольшое ускорение, но с ухудшенной точностью. В целях тестирования и может быть удален в будущей версии. Требуется SSE или 3DNow!.
		- true: Использовать быструю компенсацию движения;
		- **false**: Не использовать быструю компенсацию движения;

### LumaYV12()

Эта функция не связана с фильтром яркости DGIndex.
Преобразование: Y=(y\*lumgain)+lumoff;
LumaYV12() выводит диапазон 0->255 YUV, а не диапазон CCIR-601 16->235. Используйте вместо этого встроенный фильтр ColorYUV() Avisynth, если вам нужно обеспечить диапазон 16->235. Функциональность LumaYV12() может быть достигнута с помощью ColorYUV(), который имеет больше возможностей, но LumaYV12() оптимизирован для скорости при выполнении базовой регулировки яркости.

* *integer **lumoff**=0*
	+ Смещение яркости. Регулирует яркость всех пикселей на фиксированную величину.
		- Значения от -255 до 255;
* *float **lumgain**=1.0*
	+ Увеличение яркости. Регулирует яркость всех пикселей на пропорциональную величину.
		- Значения от 0.0 до 2.0;

### BlindPP()

Деблокинг и/или Деринг любого видео источника. Требуется видео цветового формата YUY2 или YV12.

* *int **quant**=2*
	+ Эмулированный квантователь. Определяет силу процесса деблокирования.
		- Значения от 0 до 31;
* *int **cpu**=6*
	+ Та же функция, что и в MPEG2Source(), но с другим значением по умолчанию.
		- Значения от 0 до **6**;
* *bool **iPP**=false*
	+ Та же функция, что и в MPEG2Source(), но с другим значением по умолчанию. Автоматический режим НЕ доступен.
		- true/**false**;
* *int **moderate\_h**=20, int **moderate\_v**=40, str **cpu2**=""*
	+ Те же функции, что и в MPEG2Source(), но с разными значениями по умолчанию.

### Deblock()

Деблокирующий фильтр H.264 (Manao's V0.9.5). Требуется видео цветового формата YV12. Оба параметра (quant+aOffset) и (quant+bOffset) должны быть>=16 или фильтр ничего не будет делает.

* *int **quant**=25*
	+ Эмулированный квантователь. Определяет силу процесса деблокирования.
		- Значения от 0 до 51;
* *int **aOffset**=0*
	+ Модификатор порога обнаружения блокировки. Установка его выше означает, что большее количество ребер будет деблокировано.
		- Значения от -6 до 6;
* *int **bOffset**=0*
	+ Модификатор для обнаружения блоков и прочности блокировки. То же самое, чем выше, тем сильнее.
		- Значения от -6 до 6;
* *bool **mmx**=true*
	+ Автоматически отключает, если не поддерживается процессором.
		- **true**: Включает оптимизацию MMX;
		- false: Отключить оптимизацию MMX;
* *bool **isse**=true*
	+ Автоматически отключает, если не поддерживается процессором.
		- **true**: включить оптимизацию SSE;
		- false: отключить оптимизацию SSE;

## Примеры

### MPEG2Source() Examples

MPEG2Source следует использовать только с источниками видео MPEG-1 и MPEG-2.

1) Простое декодирование YV12:

**Примечание:** PATH можно игнорировать, если «project.d2v» находится в том же каталоге, что и скрипт AviSynth (\*.avs).

2) Деблокирование:

3) Деблокирование на чересстрочном источнике с повышенной вертикальной чувствительностью:

4) Устранение ореолов (Deringing):

5) Выбрать оптимизированный 32-разрядный SSE2 iDCT с цветовым форматом I420 на выходе:

6) Для преобразования в YUY2 на основе параметра PROGRESSIVE\_FRAME:

7) Для отображения на экране информации о видео:

### LumaYV12() Examples

Разумеется, следующие примеры LumaYV12() полностью субъективны.
Отрегулируйте их по своему вкусу.

**1)** Сделать темнее:

LumaYV12(***lumoff**=-10, **lumgain**=0.9*)

**2)** Сделать ярче:

*LumaYV12 (**lumoff**=10, **lumgain**=1.1)*

### BlindPP() Examples

BlindPP() не следует использовать при открытии видео с помощью MPEG2Source(), поскольку его параметры постпроцессинга будут работать лучше. Обычно BlindPP() используется при открытии видео с помощью AviSource() AviSynth или DirectShowSource().

1) Деблокирование и устранение ореолов по умолчанию:

*BlindPP ()*

2) Только деблокирование:

*BlindPP (**cpu**=4)*

3) Деблокирование на чересстрочном источнике с повышенной горизонтальной чувствительностью:

*BlindPP (**cpu**=4, **iPP**=true, **moderate\_h**=10)*

4) Увеличить силу деблокирования и устранения ореолов:

*BlindPP (**quant**=12)*

5) Только устранения ореолов:

*BlindPP (**cpu2**="ooooxx")*

### Deblock() Examples

Deblock() может использоваться с видео MPEG-2, источником которого является MPEG2Source(), если вы предпочитаете его после обработки MPEG2Source(), или его можно использовать с другими источниками видео. В последнем случае это обычно означает открытие видео с помощью AviSource() AviSynth() или DirectShowSource().

**1)** Деблокирование по умолчанию:

*Deblock ()*

**или:**

*Deblock ()*

**2)** Сильное деблокирование с повышенной чувствительностью:

*Deblock (**quant**=32, **aOffset**=16, **bOffset**=24)*

## Список изменений

* **DGMPGDec v1.5.8**
	+ Исправлена проблема, приводившая к сбою DGIndex с некоторыми патологическими потоками;

## Внешние ссылки

* Doom9 Forum - DGMPGDec Известные проблемы и ограничения.
* Doom9 Forum - DGMPGDec процесс разработки.
* Doom9 Forum - DGMPGDec процесс разработки версии 1.6.0.
* Doom9 Forum - DVD2AVI/DGIndex поддержка.