NMM视频技术(旧)

 找回密码
 成为会员
搜索
查看: 9654|回复: 18

[AVS技巧] 【求助】关于LanczosResize语句的问题

[复制链接]
发表于 2009-8-28 00:21 | 显示全部楼层 |阅读模式
本帖最后由 herman 于 2009-8-28 00:23 编辑




最近压制一个影片,发生了以下的问题,希望各位朋友能帮忙解决,万分感谢!

这个影片的片源是电视录像,其纵横比是702x572,见下图:



很明显,这个画面是变形的,于是我就在AVS里加入以下语句,修正其画面的纵横比:LanczosResize(640,352)



修改后的画面:



但怪事就出现了,所压制出来的RMVB只有声音,没有图像;但在MPC里播放AVI则是正常的(否则我也不可能截取以上的画面);在调试各个参数语句后,只要去掉LanczosResize(640,352)这条语句,所压制出来的RMVB就“正常”了(当然画面是原来那样变形的);

为了考证,于是我用相同的语句(如上图)压制另外一部影片,却是正常的,有画面有声音;

请问各位大侠,到底是发生了什么情况,为何会这样的呢?

多谢!



发表于 2009-8-28 06:44 | 显示全部楼层
用ERP走dshow,用FFD解码根本不需要用到AVS,直接在FFD里设置好resize,亮度调节即可
另外,LZ为何又动宽又动高,这样对画面的损失是很大的呀
然后,似乎画面左边有一条绿线,不知道是源这样还是解码的问题,如果是源的话还是切掉吧..
如果一定要走AVS的话,可以先拿MPC预览看看AVS是否有声音,以确定不是压制的时候出了问题


最后...其实我是想顺路问下LanczosResize切边的问题
因为crop不支持奇数.所以目前只想到用LanczosResize来切
比如拿720*480的片Lanczos4Resize(720,476,0,3,0,-1)
这样做LanczosResize是否会对画面进行一次resize呢?
 楼主| 发表于 2009-8-28 09:30 | 显示全部楼层
本帖最后由 herman 于 2009-8-28 09:40 编辑

2# 264768502



1,之所以既修改垂直像素,又修改水平像素是因为这个片源出现轻微的拉丝现象,不过肉眼并不察觉,但在片尾出相关信息(例如发行公司,演员列表)的时候,就会非常明显,Resize可以减轻拉丝的现象;而且修改小一点的纵横比,在相同码率的情况下所压制出来的RMVB体积会小一点,毕竟选择RMVB,是因为它的文件体积和画质都符合网路传播的需要。

2,在MPC里(自动)外挂各种解码器播放是完全正常的,有声音有画面,就是压制RMVB后没有画面,而且也只有这个片源是如此,其他片源我尝试压制出来是没有问题的,这才让我够郁闷的……

3,原画面之所以出现绿边,正正就是因为纵横比不对所造成的(在KMPlaper这些内置解码的播放器不会出现),下面修正好的画面就不会出现绿边了。

感谢楼上的帮助,期待楼下的解答……

发表于 2009-8-28 09:49 | 显示全部楼层
本帖最后由 264768502 于 2009-8-28 09:51 编辑

最后的staff很可能是30i的....其实可以直接deinterlace...
rmvb拿来BOB估计太奢侈了.....试试看trim分段,处理staff字幕  TDeint(mode=2)

MPC解码默认都调用自己的东西吧,而不是系统的解码器
LanczosResize会影响音频么? 还真从来没遇到过这情况....这个问题还是等达人来解决吧

另外....还是推广MP4...H.264的编码效率比RV高很多了...
同体积的MP4,只要压制得当,绝对不会比RV差
发表于 2009-8-28 14:06 | 显示全部楼层
楼主的Avisynth是什么版本?
  1. version()
复制代码
 楼主| 发表于 2009-8-28 21:48 | 显示全部楼层
5# diseac




AviSynth 2.5

发表于 2009-8-29 18:27 | 显示全部楼层
本帖最后由 diseac 于 2009-8-29 18:34 编辑

6# herman

AVS 2.5 有好几个版本,看版本信息用version()函数,楼主把我在5楼写的代码当签名看了吧……
AVS有时候的确会无缘无故出一些问题,这里是奇妙问题总结帖。我现在能确定的一个BUG是,插件目录下如果有LoadPluginEx.dll的话,AVS可能会出现数据流中断。
关于切边,PAL的显示分辨率是702x576,楼主的片源纵向分辨率是572,已经被切了4px,所以横向还得切4.875个象素,约等于5。
RV编码我不太会,我假设RV编码器支持YV12输入,并且楼主的片源也是YV12色空间,下面的处理方案可能对楼主有帮助。

1) 让FFDSHOW输出YV12,并且不要打开其他滤镜。
2) 把下面的代码保存为*.avs。
  1. DirectShowSource("你的片源")
  2. LanczosResize(640,360,3,0,-2,0)
  3. 其他滤镜...
复制代码
3) 把上面的avs文件送进编码器,如果RV编码器不支持YV12色空间输入的话,还需要在AVS里转换色空间。
发表于 2009-8-29 19:07 | 显示全部楼层
本帖最后由 diseac 于 2009-8-29 19:12 编辑

to 2楼
resize滤镜的内部切边,是将luma和chroma分开进行resize,所以不一定非得是偶数,甚至可以是小数。但resize之后的分辨率必须是偶数,在YV12色空间下,必须符合宽度4mod,最好符合16mod。

to 3楼
resize滤镜绝对不解决interlace问题,建议你还是对interlace的部分做解除交错操作,再进行编码。

to 4楼
LanczosResize绝对不影响音频
发表于 2009-8-29 19:17 | 显示全部楼层
to 2楼
resize滤镜的内部切边,是将luma和chroma分开进行resize,所以不一定非得是偶数,甚至可以是小数。但resize之后的分辨率必须是偶数,在YV12色空间下,必须符合宽度4mod,最好符合16mod。
diseac 发表于 2009-8-29 19:07

还是看不明白
这样做Lanczos4Resize(720,476,0,3,0,-1)究竟是否会对画面进行一次resize呢?
发表于 2009-8-29 19:28 | 显示全部楼层
本帖最后由 diseac 于 2009-8-29 19:31 编辑

9# 264768502

我给你举个例子

比如将64x64(YV12)的图象进行lanczosresize(16,16,16,16,-16,-16)

luma:
横向取样第17个象素,到第48个象素,总共32个象素
纵向,相同
resize为16x16

chroma:
chroma原本为32x32,因此:
横向取样第9个象素,到第24个象素,总共16个象素
纵向,相同
resize为8x8

这样能明白了么?
发表于 2009-8-29 20:16 | 显示全部楼层
亮度与色度的分开处理.这个能明白
但是...
64x64(YV12)的图象进行lanczosresize(16,16,16,16,-16,-16).这个最终肯定还是做了resize
如果是这样
64x64(YV12) lanczosresize(64,64,0,0,0,0)
这样会不会做resize? 实在是没能力看懂其源码..
发表于 2009-8-29 20:48 | 显示全部楼层
不切边,也不变形,为什么要用lanczosresize呢?

64x64(YV12) lanczosresize(64,64,0,0,0,0)
这样做,等于什么都没有,滤镜使用前后的图象数据不变。
发表于 2009-8-29 21:05 | 显示全部楼层
那么,如果只是切
亮度没关系,还是从一个像素到另一个像素
但是色度怎么办? 奇数的话不就无法做到从一个像素到另一个像素的取样了么
64x64(YV12) lanczosresize(64,60,0,3,0,-1)
那色度是如何取样? 像素应该没有小数这么一说的吧?
发表于 2009-8-29 21:26 | 显示全部楼层
本帖最后由 diseac 于 2009-8-29 21:28 编辑

13# 264768502

这么看吧,如果将3x1的图象变形为2x1,是下面这样:

原图:
0x0 1x0 2x0

变形后:
(0x0+1x0)/2 (1x0+2x0)/2

可以看出,变形后的图象是取原图的第1.5个象素和第2.5个象素,组成了2x1的图象。
这只是举个例子,当然lanczos的算法会更复杂一些,不是这么简单。
AVS的变形滤镜是可以切小数边的,如果想具体考证如何切的话,楼主可以自行实验一下。
发表于 2009-8-29 22:10 | 显示全部楼层
哦,大概明白什么意思了
也就是说切奇数边,甚至小数的时候,其边缘那里还是会带来损耗的
只是通过一些复杂的算法,将损耗降低而已,是不是可以这么理解

最后还是感谢diseac耐心的解答
发表于 2009-8-29 22:33 | 显示全部楼层
如果只是切边的话,最好还是按mod来切。
如果切边+变形的话,反正经过变形后所有的象素都会重新计算,也就无所谓切奇数还是小数了。
不同的resize滤镜的算法不同,运算速度也不同,质量也不同。lanczos3是目前公认比较好的,放心用就好了。
 楼主| 发表于 2009-8-29 22:57 | 显示全部楼层
本帖最后由 herman 于 2009-8-29 23:05 编辑

16# diseac




非常非常非常感谢楼上两位朋友的解答,但问题还是没有得到解决;

这个片源真是见鬼了,绝对不能碰(用)LanczosResize这个语句,一旦使用,无论用什么数值,所压制出的RMVB都是有声音无画面。

备注:所压制出来的RMVB文件非常小,我使用500-1000的码率(其他选项默认,没有选择不输出图像),压制出来只有50MB左右,也就是说只输出了音频部分(压制了音频部分),视频部分没有输出。

没有办法下,我只能选择FFD操作了;其实我个人的习惯是倾向使用AVS而非FFD的,因为使用FFD,会令ASS水印很难控制(尤其是使用FFD的Crop功能):



 楼主| 发表于 2009-8-29 23:03 | 显示全部楼层


另外,这个片源最为神奇的地方是:

我使用SimpleResize滤镜进行Resize同样无法输出视频(就是说压制的RMVB一样是没有画面的)。


发表于 2009-8-30 02:28 | 显示全部楼层
看来楼主不太擅长提问,和看别人的回复

到现在我依然不知道楼主的AVS是什么版本…为什么楼主不肯说呢?我本打算先问一下你用的版本,然后去查查相关文档的。

另外,片源究竟是什么编码,什么封装?这些基本的信息楼主也一直不提供出来。

还有我不理解的是楼主为什么一定要坚持在FFDSHOW里调用AVS,7楼的方法楼主有试么?
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

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

GMT+8, 2025-5-6 02:16 , Processed in 0.395280 second(s), 14 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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