NMM视频技术(旧)

 找回密码
 成为会员
搜索
查看: 8082|回复: 19

[复制链接]
发表于 2005-4-16 20:36 | 显示全部楼层 |阅读模式
是关于“Use VHQ for bframes too”这一设置(VHQ mode 设置为4)
把这项选上后是不是输出的B帧比不选前的质量要好点?
发表于 2005-4-16 21:57 | 显示全部楼层
可以这么理解,实际上是将VHQ模式应用在BF上。以前只应用在IF和PF上。
引用一下《XVID 1.0参数详解》里面的话~使用VHQ(特别是VHQ4)可以降低Q值、使画面更干净、保留更多的细节,但这些都只是VHQ的副作用,VHQ的主要功能是提高压缩效率(当Q值一定时,令文件体积更小),以便更好的达到目标文件大小。
发表于 2005-4-17 08:46 | 显示全部楼层
教程里还有句话好像是说:源文件画质高的哈,不开启BF效果会比开启好些。
可我实际测试,则相反:开启了BF,激烈场景马赛克少了很多。
 楼主| 发表于 2005-4-17 16:35 | 显示全部楼层
今天开着跑了1下1-pass,比没开前报告少了足足有30多M~!
顺便问下AviSynth有没有类似ffdshow里面的那种“后处理”滤镜?
发表于 2005-4-17 17:28 | 显示全部楼层
最近在翻译bond大大写的MPEG-4标准简明介绍系列~正好有关于后处理和前处理的内容。把相关的内容先发上来一小段:
……
预处理(比如通过avisynth,作用于输入端)
后处理(通过解码器,作用于最终输出)
……
所以说,与处理和后处理的概念不同。

楼上说说要达到什么目的?或许我可以给你推荐几款AVS插件。
 楼主| 发表于 2005-4-17 23:03 | 显示全部楼层
我说的可能包含2种可能把~我先前没说清楚
原文件(未处理前的文件)→解码(Xvid、WMV9、DIVX等)→①→编辑工具(VirtualDubMod之类的)→编码(Xvid、WMV9、DIVX、RV10等)→②→输出视频——————这过程可以看图3

我的想法:
①、这里是原文件解码后AviSynth处理(降噪滤镜或柔化滤镜等)的地方——预处理~这里的处理目的主要是针对一些原文件品质不太好的,要是原文件的品质好的这里处理就形如虚设了
②、这里是编码器重编后输出的地方~由于重编码画面多多少少都会出现noise(噪声)在这里用上滤镜是很有必要的——后处理

我认为ffdshow里的“后处理”应该也是属于预处理一部分~看图1
不知道没有办法在“②”的地方用上“降噪滤镜和柔化滤镜”再进行输出
我在“①”想找的是类似解色块的滤镜(就是解决图2圈圈的地方问题的滤镜)

[attachmentid=51]
           图1


[attachmentid=52]
           图2


[attachmentid=53]
           图3
发表于 2005-4-18 19:40 | 显示全部楼层
block artifact可能由于编码质量不好引起。如果编码质量良好,应该不会出现明显的artifact才对。
在ffdshow中可以设置降噪啊。
 楼主| 发表于 2005-4-18 23:39 | 显示全部楼层
你可能错误理解我的意思了
那个色不均匀和出现马赛克的图片本来就是一个原文件来的~不是我编码压出来的东西啊

可能我写得有点难明了?
还有我写的这些不单是围绕“图2”写的而主要想问的是在不用FFDSHOW情况下能在“②”的地方用滤镜对XVID刚输出的视频流进行处理

我想了一种方法不过实现起来有点问题:
问下管理员(不知道怎么称呼你)一些问题
我通过VirtualDubMod打开我写的AVS先看下我写的AVS:
LoadPlugin("D:\Program Files\AviSynth 2.5\plugins\convolution3d.dll&quot
LoadPlugin("D:\Program Files\AviSynth 2.5\plugins\UnDot.dll&quot
AVISource("X:\XXX.avi",false,"YUY2&quot
UnDot()
ChangeFPS(24)
UnDot()
convolution3d(1, 8, 16, 8, 8, 2.8, 0)
接着我打开VirtualDubMod“文件信息”就是图1所展示
问题1:有么有办法解码YUY2时不用系统(WINXP)自带YUV 4:2:2~可不可以用XVID或者DIVX解码~要是可以怎么操作?(这个问题不用答了我刚才修改注册表尝试用XVID或DIVX解码是行不通的,答下面那个就算了)
问题2:管理员通常用什么编码模式处理动画的用H.263还是MPEG-Custom+hvs-best(better)-picture?
[attachmentid=54]
        图1

我看了一下管理员的资料~有个怪疑问~1987年5月的现在不是应该读高2?
怎么这么快就高考了~?本人可是1987年的人~现在可就读高2~!
 楼主| 发表于 2005-4-19 17:49 | 显示全部楼层
我也快中段考啦~努力点先~过了再说
发表于 2005-4-23 12:46 | 显示全部楼层
读了几遍你的问题,还是没读懂T_T
现就我看懂的地方说说我的看法吧。
问下管理员(不知道怎么称呼你)一些问题
我确实是管理员没错,但是叫我大虾或者dgwxx便可以了
我认为ffdshow里的“后处理”应该也是属于预处理一部分~
首先呢,FFDSHOW确实属于后处理,因为解码的时候直接作用于输出的。不知道你为什么认为FFDSHOW里面是预处理
我猜想,你可能误解AVS里面AviSource的原理了,贴一段AviSynth官方文档里面的说明吧,或许你会了解一些:
AVISource takes as argument one or more file name in quotes, and reads in the file(s) using either the Video-for-Windows "AVIFile" interface, or AviSynth's built-in OpenDML code (taken from VirtualDub). This filter can read any file for which there's an AVIFile handler. This includes not only AVI files but also WAV files, AVS (AviSynth script) files, and VDR (VirtualDub frameserver) files. If you give multiples filenames as arguments, the clips will be spliced together with UnalignedSplice. The bool argument is optional and defaults to true.

The AVISource filter examines the file to determine its type and passes it to either the AVIFile handler or the OpenDML handler as appropriate. In case you have trouble with one or the other handler, you can also use the OpenDMLSource and AVIFileSource filters, which force the use of one or the other handler. Either handler can read ordinary (< 2GB) AVI files, but only the OpenDML handler can read larger AVI files, and only the AVIFile handler can read other file types like WAV, VDR and AVS.

也就是说,AviSource开启AVI的时候,用的是VfW解码器,而不是DirectShow解码器。举个例子,AviSource开启XviD编码的AVI文件的时候,是调用XviD本身而不是调用FFDSHOW来解码。当XviD解码并完成一系列你指定的处理之后,再将帧交给VDM。
所以说,除非你用DirectshowSource来载入AVI,否则AviSynth是不受FFDSHOW影响的。

不知道这个是不是你想要的答案。
在不用FFDSHOW情况下能在“②”的地方用滤镜对XVID刚输出的视频流进行处理
这个问题,你没办法决定。因为这个是看片子的人的问题,跟播放器、解码器都有关系,你不能强迫看片子的人去干什么

有么有办法解码YUY2时不用系统(WINXP)自带YUV 4:2:2~可不可以用XVID或者DIVX解码~要是可以怎么操作?(这个问题不用答了我刚才修改注册表尝试用XVID或DIVX解码是行不通的,答下面那个就算了)
yuv2与yv12时颜色格式而不是编码格式,跟xvid或者divx没有关系。如果你对颜色的知识不是很了解,可以看看我翻译的《The Chroma Upsampling Error》,里面对于4:2:0、4:2:2、4:4:4各是些什么咚咚说得非常明白地址是:http://nmm.dns0755.net/nmm/list.php?id=82。
如果不了解YV12和YUV2之间的差别,可以看看Silky神样的解释。DRL有net1999整理的[SilkyBible]视频知识系列,里面讲得很好,我也就不多啰嗦了。
问题2:管理员通常用什么编码模式处理动画的用H.263还是MPEG-Custom+hvs-best(better)-picture?
我常用的是H.263~对付动画这个已经很好了
 楼主| 发表于 2005-4-24 18:45 | 显示全部楼层
先说说我近来发现的东西
1、XVID 1.1里的Quantizer ratio不能填“1.13-1.16”这范围的数值
2、Convolution3D(0, 8, 16, 8, 8, 2.8, 0)下划线的地方~可以用“1”或“0”用“1”那时还会给画面蒙上一层红色(很浅的红色几乎看不见的)


现在说白点我的想法吧:
我要用XVID重编码的是一些用WMV3编码的片子~由于片子是用做片源的那种(码率2000kbps)体积过于的大~要把其体积降低,但用XVID重编码(把码率降低)后画面肯定有损失的~我的目是用滤镜处理由XVID重编码后
的视频流(以降低画面的噪点)然后再封装成AVI~这样就比单纯XVID重编码直接封装为AVI的画质要好~不知道有没有方法?(用FFDSHOW里的XVID做编码器可以到这种效果~可是FFDSHOW里的XVID处理速度奇慢,而且里面的设置有些跟纯版的XVID有所不同)

我看预处理和后处理可以这样解释:
预处理:就是解码前先对片子的帧先处理再转移给解码器?(我想不是这样)
后处理:就是解码器处理=后处理?
也就是说,AviSource开启AVI的时候,用的是VfW解码器,而不是DirectShow解码器。举个例子,AviSource开启XviD编码的AVI文件的时候,是调用XviD本身而不是调用FFDSHOW来解码。当XviD解码并完成一系列你指定的处理之后,再将帧交给VDM。
所以说,除非你用DirectshowSource来载入AVI,否则AviSynth是不受FFDSHOW影响的。

要是用DirectshowSource载入就会受到FFDSHOW的干预啦?

※用B帧时要求P帧的Q数值等于B帧还是小于?
发表于 2005-4-26 12:39 | 显示全部楼层
实在不好意思,昨天发了一天烧,上午又去医院打吊瓶,没有回答你的问题。

关于C3D,引用一段官方文档里面的话:
Convolution3d (matrix=0, ythresh=3, cthresh=4, t_ythresh=3, t_cthresh=4, influence=3, debug=0)

Matrix choice :
0 : original matrix :
1 2 1   2 4 2   1 2 1
2 4 1   4 8 4   2 4 1
1 2 1   2 4 2   1 2 1
This matrix is useful for normal movie (not anime) because it keep more details
1 : bb idea of full 1 matrix (great idea)
1 1 1   1 1 1   1 1 1
1 1 1   1 1 1   1 1 1
1 1 1   1 1 1   1 1 1
This matrix is much usefull with animes or bad quality sources because it blur a little more (so removing more noise)

所以,第一个参数是用来选择矩阵的。0通常用于电影,保留更多细节,1通常用于动画,会去掉更多的噪声。
颜色有问题,通常可能因为颜色区间不对造成。以前我也遇到过这种问题,比如用了某些滤镜之后画面会突然变绿、突然变暗等等问题。在C3D的官方文档中,作者指出C3D支持YV12,在某些版本中提供YUV2的支持。所以,在遇到颜色问题的时候,注意一下颜色区间是否正确。
我没有遇到过这种问题~HOHO~不知道这点建议对于楼主有没有用。
XVID 1.1里的Quantizer ratio不能填“1.13-1.16”这范围的数值
WOW……真的啊~HOHO~你要不说我还真不知道呢。是不是bug呢……
用B帧时要求P帧的Q数值等于B帧还是小于

没有类似要求
要是用DirectshowSource载入就会受到FFDSHOW的干预啦?
不一定。要看你指定用那种解码器来解码。如果你指定用ffdshow来解码,那就会受到ffdshow影响。
我要用XVID重编码的是一些用WMV3编码的片子~由于片子是用做片源的那种(码率2000kbps)……
我没有“好办法”~
因为不知道你要压的是什么片子,或许片子本身就要求大吗率呢?如果要强行降低码率来压,势必会对画面造成较大损伤。不知道这样对你来说是否划算……我做二次压缩的时候一般都是保持原容量不变的~HOHO~
 楼主| 发表于 2005-4-26 18:18 | 显示全部楼层
好在过了考试才发烧~真好运

[QUOTE=><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->所以,第一个参数是用来选择矩阵的。0通常用于电影,保留更多细节,1通常用于动画,会去掉更多的噪声。
颜色有问题,通常可能因为颜色区间不对造成。以前我也遇到过这种问题,比如用了某些滤镜之后画面会突然变绿、突然变暗等等问题。在C3D的官方文档中,作者指出C3D支持YV12,在某些版本中提供YUV2的支持。所以,在遇到颜色问题的时候,注意一下颜色区间是否正确。
我没有遇到过这种问题~HOHO~不知道这点建议对于楼主有没有用。[/QUOTE]

在YV12和YUY2(都属于YUV)转为RGB才会出现色彩的损失,因为看下面的公式:
Y = 0.299R , 0.587G + 0.114B
U = -0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B

R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U

因而我觉得不太可能是颜色空间的问题~因为不跟当然颜色空间的C3D是不能用的(例如:当前是YUY2就不能用YV12~它会提示用不了的)
管理员你试下同时用2条C3D命令就知道选“1”那时是会给画面蒙红了(命令数越多就会越明显)
试下下面的命令:
LoadPlugin(&quot;D:&#092;Program Files&#092;AviSynth 2.5&#092;plugins&#092;convolution3d.dll&quot
Convolution3D(1, 8, 16, 8, 8, 2.8, 0).Convolution3D(1, 8, 16, 8, 8, 2.8, 0)

<!--QuoteBegin]我没有“好办法”~
因为不知道你要压的是什么片子,或许片子本身就要求大吗率呢?如果要强行降低码率来压,势必会对画面造成较大损伤。不知道这样对你来说是否划算……我做二次压缩的时候一般都是保持原容量不变的~HOHO~[/QUOTE]

我要压的是动画片子(ED上下回来的)~而且没有很大的动态变化
动画实际上要用不到2000kbps的码率~而且体积过于的庞大~!
虽然降低码率再压次~势必会对画面造成较大损伤(同意,例如:出现噪点)~但可以在经过降噪再输出成片(一定程度上弥补降低码率造成的损失)

※关于Quantizer ratio和Quantizer offest
填上:1.10和0.6跟填上0.9和0.8是不是没有分别(P的Q值是2)
要是这样XVID的B帧管理也太简单了
发表于 2005-4-26 21:36 | 显示全部楼层
<!--QuoteBegin-bert+Apr 24 2005, 06:45 PM--><div class='quotetop'>QUOTE(bert &#064; Apr 24 2005, 06:45 PM)</div><div class='quotemain'><!--QuoteEBegin-->我的目是用滤镜处理由XVID重编码后
的视频流(以降低画面的噪点)然后再封装成AVI
[/QUOTE]

滤镜只能处理解码后的raw信息(不管是ffdshow的滤镜,还是avisyth的滤镜,或者是VDM的滤镜),你要xvid重编码后再用滤镜再封装成avi,那意味肯定要再编码一次了。那第一次xvid编码等于什么事都没干!我建议通过avs来处理吧,可以用avs的滤镜,或者也通过在avs里靠directshow来利用ffdshow的滤镜,然后用xvid一次编码完成。

这个处理跟现在很多的dvdrip-&gt;rmvb的过程类似,楼主可以去这类网站看看。其实如果要二次压缩,而且源码率都只有2000而已,倒不如压缩成700k,800k的rmvb算了;压成1000k的xvid不一定有这个大小的rmvb质量好,要是压缩成1500k,那也没有压缩的意义。

关于“预处理和后处理”,预处理是编码前的操作,后处理是解码后的操作
发表于 2005-4-26 22:15 | 显示全部楼层
汗……我不想再回答这个问题了,楼主的目的我是在搞不明白,我能想到的情况、能解答的问题都写出来了。剩下的问题还是请其他高手继续研究吧……
(偷懒逃跑)

加个精,鼓励一下楼主的刻苦钻研的精神~希望对其他朋友有所帮助~
 楼主| 发表于 2005-4-26 22:39 | 显示全部楼层
滤镜只能处理解码后的raw信息(不管是ffdshow的滤镜,还是avisyth的滤镜,或者是VDM的滤镜),你要xvid重编码后再用滤镜再封装成avi,那意味肯定要再编码一次了。那第一次xvid编码等于什么事都没干!我建议通过avs来处理吧,可以用avs的滤镜,或者也通过在avs里靠directshow来利用ffdshow的滤镜,然后用xvid一次编码完成。

的确是可以不过要详细的试下才知道效果

※关于Quantizer ratio和Quantizer offest
填上:1.10和0.6跟填上0.9和0.8是不是没有分别(P的Q值是2)

管理员给我答了着个问题先闪啊~!!!
发表于 2005-5-3 23:22 | 显示全部楼层
“VHQ mode 设置为4”
用BF尝到甜头了,文件体积小多了。(看到网上有个2小时18分长度的电影用XviD编码,才710MB……而且很清晰)

教程里大概说过场面激烈的设为1、2,那么低动态可以设到10甚至100会怎样呢?我实际实验没画面没怎么变坏,但我想听听原理~

(题外话。站长在高三似乎蛮轻松的(还能经常上网、学术研究等),我这个学校的高三恐怖死了,高三学生个个无精打采,走路低头不语,还在校内晕倒了几个人……)
发表于 2005-5-4 12:16 | 显示全部楼层
教程里大概说过场面激烈的设为1、2,那么低动态可以设到10甚至100会怎样呢?我实际实验没画面没怎么变坏,但我想听听原理~
哪项……
发表于 2005-5-4 12:50 | 显示全部楼层
这个
发表于 2005-5-4 19:09 | 显示全部楼层
Originally posted by zys4416 at 2005-5-3 11:22 PM:
“VHQ mode 设置为4”
用BF尝到甜头了,文件体积小多了。(看到网上有个2小时18分长度的电影用XviD编码,才710MB……而且很清晰)

教程里大概说过场面激烈的设为1、2,那么低动态可以设到10甚至100会怎样呢?我实 ...


你真的有认真读文章吗……
我引用一段文章里面的话,这段话我在文章中还特意用黑体标出:
请注意:多少个BF连续出现,没有数量限制(你可以设置成1,也可以设置成1000)。具体用多少XVID自行判断,这个地方只设定最大值。

也就是说,连续用多少BF是XviD的事情。XviD会自行在容量允许的情况下,采用最高质量的方案来进行压缩。这个最大BF连续数量,只是限定一个最大值,比如我设置2,那么XviD在编码过程中发现“啊~原来已经用了2个bf了啊”于是就“那我就插一个PF进来吧”。就是这样子。如果你将这个值设置得很大,那么XviD就会在质量允许的情况下,插入尽量多的BF,但是实际上也不会很多。事实上我也遇到过连续5个IF的情况,所以说,各种帧用多少、用多好是XviD自己决定的事情,我们只是为它限制一个上/下限制。

现在还有一种说法,就是同Q的IPB的质量是相同的,也就是说,在Q保持不变的情况下,BF越多越好,可以有效降低压缩率。对于这种说法还没有人经过试验来证实。不过我觉得真的面大一些。
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

小黑屋|手机版|NMM视频技术

GMT+8, 2025-5-6 00:01 , Processed in 0.049351 second(s), 14 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表