Mekozoko
帖子: 3
注册时间: 2019-07-17 22:34

VS插件KNLMeansC用命令行压制x265 10bit时报错

2019-07-17 23:21

在vsedit里面可以正常预览,因此插件应该是正常安装的。
压制一开始没问题,但是在压制到一千帧左右才报错,换源、把插件换成新的也是一样。

报错信息如下
图片

vpy脚本如下(LoliHouse提供)
import vapoursynth as vs
import sys
import havsfunc as haf
import mvsfunc as mvf
import nnedi3_resample as nnrs
import CSMOD as cs

core = vs.get_core(accept_lowercase=True)
source = r"input.mkv" # Web片源输入
source = core.lsmas.LWLibavSource(source,threads=0)
src8 = core.std.AssumeFPS(source, fpsnum=24000, fpsden=1001)
#src8 = core.std.Trim(src8, start=0, end=src8.num_frames-1) # 切割片尾,帧数从0开始记。
src16 = mvf.Depth(src8, depth=16)

down444 = core.fmtc.resample(src16,960,540, sx=[-0.5,0,0], css="444", planes=[3,2,2], cplace="MPEG2")
nr16y = core.knlm.KNLMeansCL(src16, d=2, a=2, s=3, h=0.8, wmode=2, device_type="GPU")
nr16uv = core.knlm.KNLMeansCL(down444, d=2, a=1, s=3, h=0.4, wmode=2, device_type="GPU")
nr16 = core.std.ShufflePlanes([nr16y,nr16uv], [0,1,2], vs.YUV)

debd = core.f3kdb.Deband(nr16,12,24,16,16,0,0,output_depth=16)
debd = core.f3kdb.Deband(debd,20,56,32,32,0,0,output_depth=16)
debd = mvf.LimitFilter(debd,nr16,thr=0.6,thrc=0.5,elast=2.0)

res = debd

# Debug=1,片源与成品对比;Debug=0,输出成品,准备压制。
Debug = 0
if Debug:
compare=core.std.Interleave([src16,res])
compare=mvf.ToRGB(compare,full=False,depth=8).set_output()
else: res = mvf.Depth(res,10).set_output() #输出10bit

参数如下

代码: 全选

-D 10 --preset slower --tune lp++ --ctu 32 --crf 18 --pbratio 1.2 --no-sao --me 3 --subme 4 --merange 44 --limit-tu 4 --b-intra --no-rect --no-amp --ref 4 --weightb --keyint 360 --min-keyint 1 --bframes 6 --aq-mode 3 --aq-strength 0.7 --rd 4 --psy-rd 1.5 --psy-rdoq 1.2 --rdoq-level 2 --no-open-gop --rc-lookahead 80 --scenecut 40 --qcomp 0.65 --no-strong-intra-smoothing --rskip --log-file "%~n1.log" --log-file-level debug

组件版本
Python3.6 64bit,
VapourSynth-R38,
VapourSynthEditor-r19-64bit

best_ostrich
帖子: 3
注册时间: 2018-10-29 10:13

Re: VS插件KNLMeansC用命令行压制x265 10bit时报错

2019-07-18 22:07

VS 版本有点旧,不过这应该不是主要的,要排查原因,一般来说应该用排除法逐步排查,先把
nr16y = core.knlm.KNLMeansCL(src16, d=2, a=2, s=3, h=0.8, wmode=2, device_type="GPU")
nr16uv = core.knlm.KNLMeansCL(down444, d=2, a=1, s=3, h=0.4, wmode=2, device_type="GPU")
这两句注释掉
把nr16 = core.std.ShufflePlanes([nr16y,nr16uv], [0,1,2], vs.YUV)
换成
nr16 = core.std.ShufflePlanes([src16,down444], [0,1,2], vs.YUV)
跑一下试试,如果没出错,那么问题就排除了除KNLMeansCL以外的其他情况了。

然后
只注释掉nr16uv = core.knlm.KNLMeansCL(down444, d=2, a=1, s=3, h=0.4, wmode=2, device_type="GPU")这一句
nr16这句换成
nr16 = core.std.ShufflePlanes([nr16y,down444], [0,1,2], vs.YUV)
看看只调用一次KNLMeansCL会不会出问题。

然后看看是不是显卡驱动太新了,显卡驱动最好不要比KNLMeansCL发布的时间新,特别是不要用beta版的驱动,你没说你的操作系统,如果是win10好像会自动更新显卡驱动。总之可以用旧版驱动试一下,确认是不是显卡驱动的问题。

以上两种可能性最大,如果不是那再考虑其他的可能,比如更新一下源滤镜LWLibavSource、更新VS 以及Python、尝试只输出YUV raw,不喂给x265编码器,看看是不是编码器的问题

Mekozoko
帖子: 3
注册时间: 2019-07-17 22:34

Re: VS插件KNLMeansC用命令行压制x265 10bit时报错

2019-07-19 14:51

best_ostrich 写了:
2019-07-18 22:07
VS 版本有点旧,不过这应该不是主要的,要排查原因,一般来说应该用排除法逐步排查,先把
nr16y = core.knlm.KNLMeansCL(src16, d=2, a=2, s=3, h=0.8, wmode=2, device_type="GPU")
nr16uv = core.knlm.KNLMeansCL(down444, d=2, a=1, s=3, h=0.4, wmode=2, device_type="GPU")
这两句注释掉
把nr16 = core.std.ShufflePlanes([nr16y,nr16uv], [0,1,2], vs.YUV)
换成
nr16 = core.std.ShufflePlanes([src16,down444], [0,1,2], vs.YUV)
跑一下试试,如果没出错,那么问题就排除了除KNLMeansCL以外的其他情况了。

然后
只注释掉nr16uv = core.knlm.KNLMeansCL(down444, d=2, a=1, s=3, h=0.4, wmode=2, device_type="GPU")这一句
nr16这句换成
nr16 = core.std.ShufflePlanes([nr16y,down444], [0,1,2], vs.YUV)
看看只调用一次KNLMeansCL会不会出问题。

然后看看是不是显卡驱动太新了,显卡驱动最好不要比KNLMeansCL发布的时间新,特别是不要用beta版的驱动,你没说你的操作系统,如果是win10好像会自动更新显卡驱动。总之可以用旧版驱动试一下,确认是不是显卡驱动的问题。

以上两种可能性最大,如果不是那再考虑其他的可能,比如更新一下源滤镜LWLibavSource、更新VS 以及Python、尝试只输出YUV raw,不喂给x265编码器,看看是不是编码器的问题
感谢大大解答!
关于VS我更新到了R44,x265-10bit-full.exe用的是3.1
不用KNLMeansCL时是可以正常压制的,但是只用一次的话,经多次尝试,几分钟后百分百会自动关机……这是什么奇怪的BUG {:xiaocry}
关于显卡驱动,我一直是更到最新的,有空试一下旧版的。

Mekozoko
帖子: 3
注册时间: 2019-07-17 22:34

Re: VS插件KNLMeansC用命令行压制x265 10bit时报错

2019-07-19 20:01

best_ostrich 写了:
2019-07-18 22:07
VS 版本有点旧,不过这应该不是主要的,要排查原因,一般来说应该用排除法逐步排查,先把
nr16y = core.knlm.KNLMeansCL(src16, d=2, a=2, s=3, h=0.8, wmode=2, device_type="GPU")
nr16uv = core.knlm.KNLMeansCL(down444, d=2, a=1, s=3, h=0.4, wmode=2, device_type="GPU")
这两句注释掉
把nr16 = core.std.ShufflePlanes([nr16y,nr16uv], [0,1,2], vs.YUV)
换成
nr16 = core.std.ShufflePlanes([src16,down444], [0,1,2], vs.YUV)
跑一下试试,如果没出错,那么问题就排除了除KNLMeansCL以外的其他情况了。

然后
只注释掉nr16uv = core.knlm.KNLMeansCL(down444, d=2, a=1, s=3, h=0.4, wmode=2, device_type="GPU")这一句
nr16这句换成
nr16 = core.std.ShufflePlanes([nr16y,down444], [0,1,2], vs.YUV)
看看只调用一次KNLMeansCL会不会出问题。

然后看看是不是显卡驱动太新了,显卡驱动最好不要比KNLMeansCL发布的时间新,特别是不要用beta版的驱动,你没说你的操作系统,如果是win10好像会自动更新显卡驱动。总之可以用旧版驱动试一下,确认是不是显卡驱动的问题。

以上两种可能性最大,如果不是那再考虑其他的可能,比如更新一下源滤镜LWLibavSource、更新VS 以及Python、尝试只输出YUV raw,不喂给x265编码器,看看是不是编码器的问题
安装旧版驱动之后,不报错而是直接自动关机了,包括17年的旧版驱动
室友的电脑没问题,应该是机器问题了,没办法了,谢谢大大!

best_ostrich
帖子: 3
注册时间: 2018-10-29 10:13

Re: VS插件KNLMeansC用命令行压制x265 10bit时报错

2019-07-21 16:38

注意笔记本的温度,有可能由于CPU和显卡同时高负荷运行导致散热出现问题,以前遇到过压制时显卡温度过高导致的KNL出错。还有一种可能是CPU和显卡的功耗问题。可以安装aida64监测运行时的温度,如果运行时温度没有超过CPU和显卡的安全运行温度,大概在90-100度以下,
那么再使用aida64自带的显卡拷机测试或者aferburner这样软件单独测试显卡满载是否会出现问题,
如果没有问题再使用aida64自带的fpu拷机测试CPU单独满载是否会出现问题,
如果都没有问题那么说明机器应该没有问题,有可能是适配器的问题,可以想办法寻找接口相同但是额定供电功率更大的适配器试一下,
除此之外也可以尝试重新安装系统,比如一些稳定版本的系统,比如win 10 LTSB 2016、win 8.1 with update3、win 7 sp1

回到 “VapourSynth”