头像
vempx
管理猿
帖子: 146
注册时间: 2010-09-19 20:45

VS用QC方法

声明:
本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() 
qc.py:

代码: 全选

#!/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)
进行qc命令行,结果保存在txt文件中:

代码: 全选

vspipe -p qc.vpy . | py -3 qc.py > result.txt
1月3日更新:似乎由于VS中源滤镜瓶颈问题导致效率并没有比AVS中Compare()滤镜来的更快……囧,下图是简单测试结果
test.png
test.png (4.7 KiB) 查看 2610 次
在提问前还请仔细查阅公告帖以及各版置顶帖
相信置顶中也许会有您需要的内容


~My Blog~

回到 “VapourSynth”