freesilent
帖子: 35
注册时间: 2012-02-03 14:01

nnedi3和fmtc做resize的问题

上周再home群里挖的坑,今天终于到家可以填坑了。
片源是《春宵苦短,少女前进吧》的00006.m2ts,截了一小段,供没有下这盘的大佬看看。
代码如下:

代码: 全选

## core
import vapoursynth as vs
import havsfunc as haf
import mvsfunc as mvf
import vsTAAmbk as taa
import nnedi3_resample as nnrs
import functools
core = vs.get_core()
core = vs.get_core(accept_lowercase=True)

video = core.lsmas.LWLibavSource(r'f:\ACG\NIS\KUROKAMINOOTOME_BONUS\BDMV\STREAM\00006.m2ts')

ds_video = core.resize.lanczos(clip = video, width = 960, height = 540)
ds_video.set_output()
ds_video是downscale的功能,主要就是调整这行。
用自带的resize.lanczos不会抖动,与raw一致。
前面那么多import都是代码里曾经用过的,就没#掉,下面改了就不会忘了上面。

使用nnedi3或者fmtc做resize,ds之后就会抖动。

代码: 全选

ds_video = core.fmtc.resample(clip = video, w = 960, h = 540, kernel = "lanczos")
ds_video = core.fmtc.bitdepth(clip = ds_video, bits = 8)

代码: 全选

ds_video = nnrs.nnedi3_resample(video, 960,540)
片源和我做的测试:
链接:https://pan.baidu.com/s/1wqFkVUAImPAKBP2tktilcg 密码:4a4x

说明一下,因为源太大了,所以就一小段,我的测试都是完整的,所以时间不一样。

求大佬指点,难道代码写错了?
头像
Muonium
帖子: 42
注册时间: 2016-06-18 8:48

Re: nnedi3和fmtc做resize的问题

视频 00006.split.1.m2ts 大概是一个错标成 30i 的 30p

fmtconv 在 resize 时,默认会自动检测视频是 progressive 还是 interlaced 并进行相应处理,而从文档来看 resize (zimg) 没有这项特性

由于该视频的扫描方式标错了,因此 fmtconv 也就自动判断错了,表现为重采样后上下抖动,而 resize 大概是误打误撞做对了

一种解决方法是,刚读入视频后,加上
video = mvf.AssumeFrame(clip = video)
这一行把标记修正过来

另一种是在用 fmtconv 缩小时手动设置
interlaced=0
强制视频为 progressive(这种方法大概蠢一点
被噪点番支配的噩梦
被Waifu2x吊打的噩梦
不会写代码不会写脚本的我连咸鱼都不如了orz
eedi3好慢啊…………
为什么某SSIM的计算值大于1……
被一个月前自己写的脚本吊打,很爽
CropAbs上也能掉坑……
不要乱搞什么对数亮度作图…
魔幻炼丹主义
freesilent
帖子: 35
注册时间: 2012-02-03 14:01

Re: nnedi3和fmtc做resize的问题

Muonium 写了: 2018-04-30 23:27 视频 00006.split.1.m2ts 大概是一个错标成 30i 的 30p

fmtconv 在 resize 时,默认会自动检测视频是 progressive 还是 interlaced 并进行相应处理,而从文档来看 resize (zimg) 没有这项特性

由于该视频的扫描方式标错了,因此 fmtconv 也就自动判断错了,表现为重采样后上下抖动,而 resize 大概是误打误撞做对了

一种解决方法是,刚读入视频后,加上
video = mvf.AssumeFrame(clip = video)
这一行把标记修正过来

另一种是在用 fmtconv 缩小时手动设置
interlaced=0
强制视频为 progressive(这种方法大概蠢一点
扫描方式 : MBAFF
存储的扫描方式 : 隔行扫描的域
扫描顺序 : 奇数场(前场TFF)优先
确实是这样,前面的几个特典是隔行,就deinterlace,到了后面发现不是了就直接处理了。

回到 “VapourSynth”