本QC方法中进行PSNR计算的函数来自mawen1250的mvsfunc
获取PSNR最小值的脚本作者为SAPikachu,我只是代为发帖
qc.vpy:
代码: 全选
import vapoursynth as vs
import sys
import mvsfunc as mvf
import functools
core = vs.get_core(accept_lowercase=True)
src = core.dgdecodenv.DGSource(r'source.dgi')
opt = core.lsmas.LibavSMASHSource(r'encoded.mp4', format='YUV420P8')
cmp = mvf.PlaneCompare(opt, src, mae=False, rmse=False, cov=False, corr=False)
def callback(n, clip, f):
print(n, f.props.PlanePSNR)
return clip
cmp = core.std.FrameEval(cmp, functools.partial(callback, clip=cmp), prop_src=[cmp])
cmp.set_output()
代码: 全选
#!/usr/bin/env python3
import sys
frame, min_psnr = -1, 99999.0
for l in sys.stdin:
print(l)
l = l.strip()
if not l:
continue
parts = l.split(" ")
if len(parts) != 2:
continue
cur, psnr = int(parts[0]), float(parts[1])
if psnr < min_psnr:
frame, min_psnr = cur, psnr
print("Min PSNR:", min_psnr, "at frame", frame)
代码: 全选
vspipe -p qc.vpy . | py -3 qc.py > result.txt