『漫游』酷论坛>『影音数码技术学习交流』>[测试]AVS自动侦测并记 ..

[测试]AVS自动侦测并记录交错帧 V2(版本更新)

大虾@2006-02-24 22:28

最近做手动IVTC,做完之后实在懒得检查,就弄了个自动检查的AVS脚本。这个脚本是受到某帖子里面某大大回复的启发,改进了AVS文档的ConditionalFilter说明中的脚本,写出来的。去掉了原脚本中关于帧是否有动态的判定、并且只记录被判定为交错的帧。

复制代码
  1. LoadPlugin("F:\AviSynthPlugins\decomb.dll")
  2. [COLOR=red]
  3. v=avisource("xxx.avi")
  4. [/COLOR]
  5. global sep="."
  6. global combedthreshold=70
  7. function CombingInfo(clip c)
  8. {
  9. file = "interlace.log"
  10. global clip = c
  11. c=SeparateFields(c)
  12. c=c.Blur(0.0,1.58).Blur(0.0,1.58).Blur(0.0,1.58).Blur(0.0,1.58)
  13. c=c.Blur(0.0,1.58).Blur(0.0,1.58).Blur(0.0,1.58)
  14. c=c.Blur(0.0,1.58).Blur(0.0,1.58)
  15. c=c.Blur(0.0,1.58)
  16. c=weave(c)
  17. c = FrameEvaluate(c, "global a = IsCombed(clip, combedthreshold)")
  18. c = WriteFileIf(c, file, "a==true", "current_frame", "sep", "a")
  19. return c
  20. }
  21. CombingInfo(v)


说明:
1.上面用红色标记的v是片源,什么源都行,mpeg2source、vfapi(记得转成YV12)、AVISOURCE等等的。
2.需要修改的参数只有combedthreshold,指定被判定为交错帧的阈值,跟telecine的vthresh完全一样。这个值越小,好帧被判定为交错的可能性越大,结果过多,筛选起来困难;值越大,坏帧被判定为非交错的可能性越大,造成本来交错的帧发现不了。自己根据片子调整吧~灭哈哈哈哈~~~~~~~~我做的交响诗篇取70这个值刚好。
顺便说一句,AVS文档中ConditionalFilter的例子里面,这个值用了25,我觉得太小,很多好帧都会被判定为交错;Decomb手册里面Telecine中的vthresh的默认值是50,这个值还是比较合适的,能够尽量避免滥杀无辜并且不放过交错帧。

配置好脚本之后,只要载入VDM,按播放键从头到尾播放一遍,被判定为交错的帧就会被记录在当前目录的interlace.log这个文件中。打开这个文件会看到类似下面的东西:
引用

32268.true
32375.true
32871.true
33048.true
33307.true
33564.true

其中,前半部分是被判定为交错帧的帧号,后半部分不用管。这些就是被脚本判定为交错的帧了,好好检查吧~

注意事项:
1.输入的片源一定要是YV12或者是YUY2的,否则IsCombed会不吃。如果通过VFAPI加载的片源,片源的颜色就是RGB,并且画面是反的,要在“CombingInfo(v)”之前通过FlipVertical()将画面转正并用ConvertToYV12转换为YV12。
2.一定要将片子原汁原味地交给“CombingInfo(v)”。之前不要加任何滤镜(转换颜色空间和反转画面除外),尤其是切边、resize千万不要加(跟IVTC插件的要求相同)。
3.如果是老片噪声特别严重,可能会误判,这时可以在“CombingInfo(v)”之前进行降噪。不过,除非发生很多很多误判,否则尽量不要降噪比较好。

一点感想:
终于做到了手动IVTC+自动验证,以前都是手动检查,一边检查一边昏昏欲睡效率很低反而容易出现漏网之鱼。这样,手动IVTC的准确率和效率都能够有所提高,希望对大家有所帮助。
通过交响诗篇的测试,我发现有很多帧无论如何用自动就是没办法正确匹配,结果走了PP(尝试了很多插件,包括IT、经典的Decomb、TIVTC),匹配的错误率甚至超过了sswroom统计的10场景,尤其是对话场景人物嘴部错误率更高。所以,对于我自己喜欢的作品,我还是坚持会用手动来解决。

提示:
手动IVTC如果搭配“按键精灵”之类的键盘操作软件,会快不少。比如,按数字键盘的0键会自动按ctrl+p并输入10010、回车,按1会自动跳到下一帧并10010等等。将常用的按键组合定义为快捷键,可以大幅提高制作效率。

更新:
V2:根据skywalker大大的建议,用blur做了纵向低通,以减少误判。下面引用skywalker的话:
引用

这样准确率会提高是因为我感觉decomb判断comb帧是看画面纵向高频的强弱, 如果正确的画面的高频本身很强, 就会误判. 用了blur做低通后就把画面纵向高频砍掉了, 剩下的就只能是画面comb所产生的高频. 这样就可以降低combedthreshold来抓comb的帧了.
当然因为是在每个场单独做blur, 所以频率最高的那个砍不到(640x480的话就应该是240HZ?).
不过大部分情况应该够了, 很少会碰到频率这么高的.........


本贴谢绝讨论手动IVTC与自动IVTC!
引用

vempx@2006-02-24 23:21

好!支持大虾的文章!
手动IVTC+自动检测,不错的主意!
占个沙发~
引用

Re: [测试]AVS自动侦测并记录交错帧

sswroom@2006-02-24 23:56

引用
最初由 大虾 发布

一点感想:
终于做到了手动IVTC+自动验证,以前都是手动检查,一边检查一边昏昏欲睡效率很低反而容易出现漏网之鱼。这样,手动IVTC的准确率和效率都能够有所提高,希望对大家有所帮助。
通过交响诗篇的测试,我发现有很多帧无论如何用自动就是没办法正确匹配,结果走了PP(尝试了很多插件,包括IT、经典的Decomb、TIVTC),匹配的错误率甚至超过了sswroom统计的10场景,尤其是对话场景人物嘴部错误率更高。所以,对于我自己喜欢的作品,我还是坚持会用手动来解决。

手動IVTC完後, 通常是壓縮完才檢查, 檢查速度是1:1(用實時播放來檢查), 檢查的出錯率很低........
如果用電腦檢查, 微動的地方、淡入淡出、不明顯的特效等產生的交錯畫面, 也會測不出來, 像KOTOKO - Resublimity, 有些畫面的交錯部分只有十多個像素, 電腦是不可能測得出來, KOTOKO - Suppuration -core-內的不明顯特效更加難測, 所以, 手动IVTC+自动验证 比 手动IVTC+實時驗証所花的時間更多。
引用

Re: Re: [测试]AVS自动侦测并记录交错帧

大虾@2006-02-25 11:24

引用
最初由 sswroom 发布

手動IVTC完後, 通常是壓縮完才檢查, 檢查速度是1:1(用實時播放來檢查), 檢查的出錯率很低........
如果用電腦檢查, 微動的地方、淡入淡出、不明顯的特效等產生的交錯畫面, 也會測不出來, 像KOTOKO - Resublimity, 有些畫面的交錯部分只有十多個像素, 電腦是不可能測得出來, KOTOKO - Suppuration -core-內的不明顯特效更加難測, 所以, 手动IVTC+自动验证 比 手动IVTC+實時驗証所花的時間更多。


恩……这些的确是令人头痛的问题。
不过我认为fade、微动等的问题,应该是在IVTC阶段就加以注意,而不是在后期检查阶段才发现并修正的。至少我是这么处理的,每次遇到fade、微动等的情况,都会打开放大镜进行判断,保证这些地方不出问题。

简单描述一下优点:
1.无人值守检查交错帧,节省人的时间。
2.效率不比ss大提到的实时检查慢。在我的机器上播放这个avs,可以达到23.976的假设fps。
3.能够检查出来大多数交错的情况(当然,ss大提到的微动、fade可能会出现误判),比如:

简单描述缺点:
1.其实上面说过很多次了,自动的正确率终究没有人眼强。
2.用这个脚本实时检查对机器要求较高(ss大提到的实时检查其实也是一样的)。
3.需要自己根据片子的特点调整combedthreshold,开始可能会有些麻烦。

以上就是了~还是理念问题,有时间+有精力+有眼力的人当然肯以手动IVTC+人眼检查,时间少些的可以手动IVTC+自动检查,没时间的人可以全自动~不同方法适合不同的人、不同的作品~各取所需
引用

skywalker@2006-02-25 12:18

有个建议, 在用机器检查的时候, 在前面加上下面这一段, 准确率会提高也说不定:

SeparateFields()
blur(0,1.58).blur(0,1.58).blur(0,1.58).blur(0,1.58).
blur(0,1.58).blur(0,1.58).blur(0,1.58)
blur(0,1.58).blur(0,1.58)
blur(0,1.58)
weave()
引用

大虾@2006-02-25 14:16

引用
最初由 skywalker 发布
有个建议, 在用机器检查的时候, 在前面加上下面这一段, 准确率会提高也说不定:

SeparateFields()
blur(0,1.58).blur(0,1.58).blur(0,1.58).blur(0,1.58).
blur(0,1.58).blur(0,1.58).blur(0,1.58)
blur(0,1.58).blur(0,1.58)
blur(0,1.58)
weave()


哦?请问为什么这样准确率会高呢?能否详细讲一下?

另外,AVS死活说blur的参数不正确- -||不知道哪里出问题了
引用

GOD_HIKARU MK2@2006-02-25 16:44

代码:--------------------------------------------------------------------------------
LoadPlugin("F:\AviSynthPlugins\decomb.dll")


v=avisource("xxx.avi")


global sep="."
global combedthreshold=70

function CombingInfo(clip c)
{
file = "interlace.log"
global clip = c
c = FrameEvaluate(c, "global a = IsCombed(clip, combedthreshold)")
c = WriteFileIf(c, file, "a==true", "current_frame", "sep", "a")
return c
}

CombingInfo(v)
--------------------------------------------------------------------------------



把这些贴进AVS里用吗? 收下了.回去手动NANOHA A'S的OP试试
引用

wolfsoft@2006-02-25 18:20

引用
最初由 大虾 发布


哦?请问为什么这样准确率会高呢?能否详细讲一下?

另外,AVS死活说blur的参数不正确- -||不知道哪里出问题了


试试blur(0.0,1.58).参数要求浮点
引用

大虾@2006-02-25 21:39

引用
最初由 wolfsoft 发布


试试blur(0.0,1.58).参数要求浮点


貌似不行
引用

skywalker@2006-02-25 22:37

引用
最初由 大虾 发布


哦?请问为什么这样准确率会高呢?能否详细讲一下?

另外,AVS死活说blur的参数不正确- -||不知道哪里出问题了


那你把1.58改成小的的数字吧......
比如1之类的......
还有就是avs版本换成最新的试试.....

这样准确率会提高是因为我感觉decomb判断comb帧是看画面纵向高频的强弱, 如果正确的画面的高频本身很强, 就会误判. 用了blur做低通后就把画面纵向高频砍掉了, 剩下的就只能是画面comb所产生的高频. 这样就可以降低combedthreshold来抓comb的帧了.

当然因为是在每个场单独做blur, 所以频率最高的那个砍不到(640x480的话就应该是240HZ?).
不过大部分情况应该够了, 很少会碰到频率这么高的.........
引用

Boss_02fj@2006-02-26 00:16

厄……,大大们是会怎么写出这样的AVS啊……

小的俺看已经晕乎乎了得说……[/KH]
引用

大虾@2006-02-26 08:10

引用
最初由 skywalker 发布


那你把1.58改成小的的数字吧......
比如1之类的......
还有就是avs版本换成最新的试试.....

这样准确率会提高是因为我感觉decomb判断comb帧是看画面纵向高频的强弱, 如果正确的画面的高频本身很强, 就会误判. 用了blur做低通后就把画面纵向高频砍掉了, 剩下的就只能是画面comb所产生的高频. 这样就可以降低combedthreshold来抓comb的帧了.

当然因为是在每个场单独做blur, 所以频率最高的那个砍不到(640x480的话就应该是240HZ?).
不过大部分情况应该够了, 很少会碰到频率这么高的.........


怪不得噪声太大会误判~
不过,改成1.57、1.0之类的都不行,AVS我装的是新版的2.56,应该没问题吧?
引用

skywalker@2006-02-26 10:38

居然会不行吗?

You can use 2 arguments to set independent Vertical and Horizontal amounts. Like this, you can use Blur(0,1) to filter only Vertically, for example to blend interlaced lines together. By default amountV=amountH.

说明书写的, 按照这个格式应该没问题吧............
你把你的整段avs贴出来看看.......
引用

大虾@2006-02-26 12:58

改称下面这样就可以了,感谢某卡帮忙改错:

LoadVFAPIPlugin("F:\gk\TMPGEnc Plus-2.521.58.169\TMPGEnc.vfp","Source")
LoadPlugin("F:\gk\AviSynthPlugins\decomb.dll")

v=Source("10.tpr").FlipVertical().ConvertToYV12

global sep="."
global combedthreshold=70

function CombingInfo(clip c)
{
file = "interlace.log"
global clip = c
c = FrameEvaluate(c, "global a = IsCombed(clip, combedthreshold)")
c = WriteFileIf(c, file, "a==true", "current_frame", "sep", "a")
return c
}

v=SeparateFields(v)
v=v.Blur(0.0,1.58).Blur(0.0,1.58).Blur(0.0,1.58).Blur(0.0,1.58)
v=v.Blur(0.0,1.58).Blur(0.0,1.58).Blur(0.0,1.58)
v=v.Blur(0.0,1.58).Blur(0.0,1.58)
v=v.Blur(0.0,1.58)
v=weave(v)
CombingInfo(v)
引用

GOD_HIKARU MK2@2006-02-26 14:29

0_0
更新了.

我的NANOHA A'S OP还未手动完

引用

«12»共2页

| TOP