查看: 8110|回复: 0
上一主题 下一主题 跳转到指定楼层

[转贴]DGDecode文档

571

主题

497

存在感

167

活跃日
帅哥离线 我的发贴都是你的幻觉
 7 

家中的荣誉团员

发帖: 5981
SOS币: 62063
社团: ※◆♂圈♀ ●▄◣
社团: ※◆♂友♀ ●▄◣
社团: ※◆♂朋♀ ●▄◣
社团: ※◆♂念♀ ●▄◣
社团: ※◆♂纪♀ ●▄◣
注册: 2006-07-01
访问: 2022-06-11

楼主
发表于 2007/01/29 | 编辑
DGDecode v1.4.5



DGDecode是什么?
DGDecode是为AviSynth v2.5或更高版本设计的一款MPEG-1/2解码插件,是DGMPGDec软件包的一部分。它可以解码任何能被DGIndex打开的MPEG-1或MPEG-2流。此外,它还包含以下特点:YV12,I420,和YUY2颜色空间输出(若通过DGVfapi输出则为RGB24),经过优化的反离散余弦变换(iDCT),后处理deblock和dering,亮度过滤等等。

DGDecode基于MPEG2Dec3 v1.0,而MPEG2Dec3 v1.0则基于SourceForge的“save-oe”计划的MPEG2Dec2。

重要提示:为了避免命名混乱,这个滤镜被命名作DGDecode,以表明这个插件与neuron2制作的DVD2AVI(既DGIndex)的关系。Neuron2努力表明DGDecode的来源正如MarcFD在下文中所描述的,是的,尽管Neuron2继续开发并进行了一些修正,但是他仍然站在巨人的肩膀上,下文的工作人员表中将体现这点。

你可以在http://neuron2.net/dgmpgdec/dgmpgdec.html得到最新的编译版和源代码。

这是一个在GNU GPL v2协议限制下传播的免费软件。您在使用本软件及源代码之前必须同意协议中的内容。请阅读License小节获得更多信息。


滤镜语法
MPEG2Source()
MPEG2Source(str "d2v", int "idct", int "cpu", bool "iPP", int "moderate_h", int "moderate_v", str "cpu2", bool "upConv", bool "iCC", bool "i420", int "info", bool "showQ", bool "fastMC")

尽管DGDecode能解码MPEG-1和MPEG-2,但为了与以前的avs脚本保持兼容,仍然被称作MPEG2Source(),它既可以被用于MPEG-1,也可以用于MPEG2。

d2v: "[PATH\]project.d2v"

DGIndex工程文件。必选参数。
提示:当project.d2v与你的AviSynth脚本(*.avs)在同一目录下的时候,可以不指定路径(PATH)。

idct: 0 ~ 7 (默认: 0)

iDCT算法。获得更多关于iDCT算法的信息请参阅附录B。请参阅附录C查看所支持的CPU。
- 0: 使用在DGIndex中指定的方式(DGIndex中没有6和7)
- 1: 32-bit MMX
- 2: 32-bit SSEMMX
- 3: 64-bit SSE2MMX
- 4: 32-bit Floating Point
- 5: 64-bit IEEE-1180 Reference
- 6: 32-bit SSEMMX (Skal)
- 7: 32-bit Simple MMX (XviD)

cpu: 0 ~ 6 (默认: 0)

后处理(Post-Processing)快速选项。
(Y=亮度, C=色度, H=水平, V=垂直)
- 0: 禁用后处理
- 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


iPP: true/false (默认:自动)

后处理模式。
DGDecode将自动根据每一帧PROGRESSIVE_FRAME旗标的标示,在基于场/帧的后处理模式之间进行切换。只在想要强制DGDecode进行某种模式的后处理时才指定这个参数。
- [未指定]: 根据PROGRESSIVE_FRAME旗标决定
- true: 强制使用基于场的后处理模式(交错)
- false: 强制使用基于帧的后处理模式(非交错)

moderate_h, moderate_v: 0 ~ 255 (默认: moderate_h=20, moderate_v=40)

block侦测灵敏度。
(moderate_h=水平, moderate_v=垂直)
值越小越强,小心使用。


cpu2: (默认: "")

后处理自定义设置。
依据下面的列表指定一个由6个“x”或“o”字母组成的字符串。(大小写不敏感)
每个“x”开启对应的后处理功能。每个“o”关闭对应的后处理功能。
第1个字母:亮度水平deblock
第2个字母:亮度垂直deblock
第3个字母:色度水平deblock
第4个字母:色度垂直deblock
第5个字母:亮度dering
第6个字母:色度dering

例如:开启所有色度对应的后处理功能:

MPEG2Source("project.d2v", cpu2="ooxxox")

upConv: 0 ~ 2 (默认: 0)

将4:2:0转换(Upsample)为YUY2(4:2:2)或RGB24。
- 0: 不转换
- 1: 转换至YUY2 (若源已经是4:2:2则会自动忽略这个选项)
- 2: 转换至RGB24


iCC: true/false (默认:自动)

转换模式
DGDecode将自动根据每一帧PROGRESSIVE_FRAME旗标的标示,在基于场/帧的转换模式之间进行切换。只在想要强制DGDecode进行某种模式的转换时才指定这个参数。
- [未指定]: 根据PROGRESSIVE_FRAME旗标决定
- true: 强制使用基于场的转换模式(交错)
- false: 强制使用基于帧的转换模式(非交错)


i420: true/false (默认: false)

输出I420颜色空间。
一些过去的应用程序或许会要求I420输入。当源不是YV12(4:2:0)的时候,或upConv=1或2时,会忽略这个选项。
- true: 输出 I420
- false: 输出 YV12


info: 0 ~ 3 (默认: 0)

除错信息
- 0: 不生成除错信息
- 1: 在视频上面叠加除错信息
- 2: 通过OutputDebugString()输出除错信息
- 3: 在视频中输出提示(按照utilities.cpp/utilities.h所指定的)


showQ: true/false (默认: false)

显示微块(Macroblock)量化值(Quantizer)
- true: 显示量化值
- false: 不显示量化值

fastMC: true/false (默认: false)

Vlad的快速动态补偿(Fast Motion Compensation)。会带来微小的速度提升,但是会造成精确度下降。仅供测试之用,可能会在将来的版本中移除。要求SSE或3DNow!指令集,请参阅附录C察看适合的CPU。


LumaYV12()
LumaYV12(clip, integer "lumoff", float "lumgain")

这个滤镜与DGIndex的亮度滤镜无关。
公式是: Y = (y * lumgain) + lumoff

LumaYV12()输出0~255的YUV颜色范围,而不是16~235的CCIR-601范围。如果你需要保持16~235的范围,请使用AviSynth的内置滤镜 AviSynth:CoreFilters:ColorYUV 代替。具备更多功能的ColorYUV()完全具备LumaYV12()的功能,但是LumaYV12()对进行基本的亮度调整进行了速度优化。

lumoff: -255 ~ 255 (默认: 0)

亮度偏移。
按照指定值与亮度相加。


lumgain: 0.0 to 2.0 (默认: 1.0)

两度倍数。
按照指定值乘以亮度。



BlindPP()
BlindPP(clip, int "quant", int "cpu", bool "iPP", int "moderate_h", int "moderate_v", str "cpu2")

对任意视频源进行Deblock和/或Dering
需要YUY2或YV12输入。
请参阅附录A获取使用提示。

quant: 0 ~ 31 (默认: 2)

指定Deblock的强度。

cpu: 0 ~ 6 (默认: 6)

功能与MPEG2Source()中的参数相同,只是默认值不同。


iPP: true/false (默认: false)

功能与MPEG2Source()中的参数相同,只是默认值不同。
动模式不可用。


moderate_h, moderate_v, cpu2: (默认: moderate_h=20, moderate_v=40, cpu2="")

功能与MPEG2Source()中的参数相同,只是默认值不同。


Deblock()
Deblock(clip, int "quant", int "aOffset", int "bOffset", bool "mmx", bool "isse")


Manao的H.264 Deblock滤镜(v0.9.5)。
要求YV12输入。
(quant + aOffset) 和 (quant + bOffset)必须大于等于16,否则本滤镜不起作用。

quant: 0 ~ 51 (默认: 25)

指定Deblock的强度。

aOffset: (default: 0)

Deblock侦测的阈值,设置越大就意味着越多的边缘会被Deblock。


bOffset: (default: 0)

Deblock侦测的阈值,同样道理,值越大,Deblock越强。

mmx: true/false (默认: true)

如果CPU不支持MMX优化,将会自动被关闭。
- true: 启用 MMX 优化
- false: 关闭 MMX 优化


isse: true/false (默认: true)

如果CPU不支持MMX优化,将会自动被关闭。
- true: 启用 SSE 优化
- false: 关闭 SSE 优化


使用范例
AviSynth LoadPlugin() 例子
在使用DGDecode的任何滤镜之前必须使用AviSynth的LoadPlugin()函数加载。
请将下面一行代码添加到你的AviSynth(*.avs)脚本的开头:

LoadPlugin("[PATH\]DGDecode.dll")

注意:如果DGDecode.dll在AviSynth的默认插件目录,可以不写路径。否则必须指定路径。


MPEG2Source() 例子
MPEG2Source() 只能用于MPEG-1或MPEG-2视频源。

只进行MPEG-2解码:

MPEG2Source("[PATH\]project.d2v")

提示:当project.d2v与你的AviSynth脚本(*.avs)在同一目录下的时候,可以不指定路径(PATH)。

只进行Deblock:

MPEG2Source("project.d2v", cpu=4)

对交错片源进行Deblock,并增加垂直方向的灵敏度:

MPEG2Source("project.d2v", cpu=4, iPP=true, moderate_v=20)

只进行Dering:

MPEG2Source("project.d2v", cpu2="ooooxx")

使用优化了的32-bit SSE2 iDCT算法,并输出I420颜色区间:

MPEG2Source("project.d2v", idct=5, i420=true)

基于PROGRESSIVE_FRAME转换到YUY2颜色:

MPEG2Source("project.d2v", upConv=1)

在视频上显示信息:

MPEG2Source("project.d2v", info=1)


LumaYV12() 例子
下面的LumaYV12()的设定完全依据主观,请自行调整到自己喜爱的值。

降低亮度:

MPEG2Source("project.d2v")LumaYV12(lumoff=-10, lumgain=0.9)

增高亮度:

MPEG2Source("project.d2v")LumaYV12(lumoff=10, lumgain=1.1)





BlindPP() 例子
当使用MPEG2Source()打开视频的时候,请不要使用BlindPP(),因为BlindPP()的后处理功能不能更好的发挥。
一般的,BlindPP()用于AviSyhtn的AviSource() 或 DirectShowSource()。

使用默认参数进行deblock和dering:

AVISource("my_video.avi")BlindPP()

只进行deblock:

AVISource("my_video.avi")BlindPP(cpu=4)

对交错片源进行Deblock,并增加水平方向的灵敏度:

AVISource("my_video.avi")BlindPP(cpu=4, iPP=true, moderate_h=10)

进行更强的Deblock和Dering:

DirectShowSource("my_video.mpg")BlindPP(quant=12)

只进行Dering:

DirectShowSource("my_video.mpg")BlindPP(cpu2="ooooxx")





Deblock() 例子
Deblock()不应用于MPEG-2视频源。
一般的,用于AviSyhtn的AviSource() 或 DirectShowSource()。

使用默认参数进行deblock和dering:

AVISource("my_video.avi")Deblock()

使用更高的灵敏度进行更强的Deblock:

DirectShowSource("my_video.mpg")Deblock(quant=32, aOffset=16, bOffset=24)


附录A: BlindPP() Notes
Block源于MPEG编码器所使用的8X8像素的DCT(离散余弦变换)。所以首先,你必须确定你要Deblock的Block仍然是由8像素所组成的。就是说,在使用BlindPP()之前不能对画面进行切边或Resize。如果你的源是交错的,那么就设定iPP=true,如果不是交错的,那么保留默认设置就可以了(iPP=false)。

其余的参数是:qunat,cpu2,moderate_h和moderate_v。

quant指定总的Deblock强度。

如果想在亮度和色度的水平和垂直两个方向上进行Deblock,就把cpu2设定为“xxxxoo”;如果想对亮度的水平方向和色度的垂直方向进行Deblock,就设定为“xooxoo”,等等。

moderate_h和moderate_v指定水平和垂直的灵敏度。也就是说,在那里进行Deblock,那里不进行。它控制判断哪里出现了Block的灵敏度。

quant=2, moderate_h=35-45, moderate_v=45-55会进行非常柔和的Deblock,只针对清晰可见的Block。这样会保留很多细节和锐度,但是可能会留下弱一些的Block,并且不能完全清除较强的Block。

quant=16, moderate_h=15-20, moderate_v=20-30会对几乎任何像是Block的地方进行很强的Deblock,但是可能会抹掉很多细节和锐度。

剩下就交给你了,这取决于你的品味,和你的源。

此外还有一个例子,因为很棒的降噪滤镜PixieDust()有时会在动态的画面产生Block,所以我有时会这样:

PixieDust(2).BlindPP(quant=8, cpu2="xxxxoo", moderate_h=45, moderate_v=55)

这样会清除不少PixieDust()产生的可见Block。剩下的PixieDust()没有产生Block的99.8%,BlindPP()也几乎不会对画面产生任何影响。




附录B: 关于iDCT算法
FlasKMPEG的说明文件包含了一段很棒的对iDCT的技术描述。它提到:

MPEG中的视频信息是以频率域而不是空间域存储(即我们看到的图像)。通过这种方式,信息量被压缩,而这种压缩可以被用来减少所需要传输的数据量。MPEG使用DCT(离散余弦变换,Discrete Cosine Transform)来将空间信息转换为频率信息。要将MPEG流还原为空间信息,就必须进行iDCT(反离散余弦变换,Inverse Discrete Cosine Transform),来还原编码时进行的DCT运算。
尽管MPEG几乎是完全规定好的(“理论上”所有解码器解码的结果应该完全相同),但是MPEG标准仍然给了解码器选择iDCT算法的自由。因此,解码器能够更好地在执行它们的硬件上工作。MPEG标准要求解码器所采用的iDCT算法必须符合IEEE-1180的规定,简单来说,解码器所选择的iDCT算法的误差不得大于IEEE-1180中所规定的范围。
选择哪个iDCT算法主要取决于你使用的CPU,此外,还有少部分取决于你对iDCT算法精确度的要求。大多数人不能区分这些算法在质量上的差异,但是这些差异可以通过在AviSynth中使用Subtract()和Levels()简单地进行观察。所有可用选项中,除了SSE/MMX (Skal)之外都兼容IEEE-1180。

质量上:IEEE-1180 Reference > 64-bit Floating Point > Simple MMX (XviD) > 其预算法.

速度上:SSE2/MMX和SSE/MMX (Skal)总是最快的,同样,IEEE-1180 Reference总是最慢的。




附录C: SIMD介绍
SIMD是Single Instruction, Multiple Data的缩写,可以理解成一个为更有效处理大量并行数据的指令的集合。特别是它对于处理视频或音频的程序非常有用。也就是说通常情况下,需要通过重复的连续指令才能做到的事情,现在只需要一个指令便能完成。

在INTEL和AMD的CPU中有7种不同的指令集,但不是每个CPU都支持这些高级指令集。这也是很多DGDecode的功能都提供选择CPU指令集的选项的原因。下面的表格列出了DGDecode支持的指令集,以及提供它们的CPU。

{| border=1
|+ Table 1: SIMD Instructions supported by DGDecode
|
| MMX
| 3DNow
| SSE
| SSE2
|-
| Required Intel CPUs
| All Intel CPUs
| Unsupported by Intel CPUs
| Pentium 3, Pentium 4
| Pentium 4
|-
| Required AMD CPUs
| All AMD CPUs
| All AMD CPUs
| Athlon XP, Athlon 64
| Athlon 64
|}


制作人员
按字母顺序排列:

"ARDA", for the LumaYV12() filter
Mathias Born, author of original MPEG2Dec
"Cyberia", for Appendices B and C, and users manual modernization
"Didée", for 附录A: Notes on BlindPP() Usage
"fccHandler", MPEG decoding fixes/improvements, good advice
Donald Graft ("neuron2"), frame loss fix, accurate indexing, PVA support, and more
Peter Gubanov, author of the MMX/SSEMMX iDCT
Chia-chen Kuo ("jackei"), author of DVD2AVI
"Manao", for his Deblock() filter
"MarcFD", YV12 support and more
"Nic", post-processing and more
Miha Peternel, author of the Floating Point and Reference iDCT
Dmitry Rozhdestvensky, author of the SSE2 iDCT
"sh0dan", code optimizations
"Skal", for his SSEMMX iDCT
"trbarry", transport parsing, and code optimizations
"tritical", upsampling, info overlay, VFAPI enhancements, and lots of bug fixes



许可证
This program is distributed under the terms of the GNU Public License. For details please refer to the file COPYING.TXT included in the distribution package.

关于我们|无图版|SOSG WIKI

Copyright © 2006-2024 SosG.Net
Total 0.011572(s) query 7, Gzip enabled,  沪ICP备07006640号-3