Lambholl 发表于 2024-10-26 04:29:36

vs批量压制脚本,支持多版本字幕/花屏检查/自动封装等功能

本帖最后由 Lambholl 于 2024-10-26 11:20 编辑

人在做大量重复劳动时,出错的概率永远比机器高 ——题记


以上可以说是经验谈,也可以说是教训,也就是这样的经验使我们LPSub从一开始纯手工压制,到一步步加上自动化、完善自动化——因为人为的错误出现过太多次了。
每集番剧发3个版本,再加上集数众多,总是难以避免百密一疏,所以这个脚本便是减少错误的一环。

此脚本应用了大佬们写的 dual_out,即不使用 vspipe 输出,而是使用 python 的 subprocess 进行 pipe 操作,
之前也提到过,这么做可以在同时输出多个不同字幕的版本时,省去重复的画面预处理,节省算力与时间。

GitHub

这个脚本用了装饰器语法糖,只需要把写完的vs脚本丢进一个函数中,return last就行了,例如:
import vapoursynth as vs
core=vs.core
import lamvsfunc as lamvs
import zvs

@lamvs.encodeProcess(encodeTypes=['JPSC','JPTC','HEVC'], delFiles=True, rpc=True)
def encodeVideo(source=''):
    src=core.lsmas.LWLibavSource(source).fmtc.bitdepth(bits=16,dmode=1)
    last=src
    last=zvs.zmdg(last,thsad=120,thscd1=250,truemotion=True,refinemotion=True,lf=0.2,cs=True)
    last=zvs.bm3d(last,sigma=,sigma2=,radius=1,preset='np',vt=1,mode='cuda_rtc')
    # more produces
    return last

if __name__ == '__main__':
    videos = lamvs.getSources() #得到一个文件名列表
    # 使用此函数,将需要压制的片源文件依次拖拽进窗口回车,一行对应一个文件,输入空行以结束
    for i in videos:
      encodeVideo(i)
以下是对参数的详细说明:
sourceType: 'Web'(默认) 或者 'BD'
ext: 片源文件的扩展名,Web 时默认为 '.mkv' ,BD 时默认为 '.m2ts'
encodeTypes:传入列表,从 'CHS', 'CHT', 'JPSC', 'JPTC', 'HEVC' 中选择一项或多项,分别需要准备与片源文件名相同的字幕文件,后缀分别为.sc.tc.jpsc .jptcNone +.ass
  例如片源文件为 0d00721.mkv,选择压制 CHS,就需要 0d000721.sc.ass
subrender:'libass'(默认) 或者 'vsfiltermod'
chapter:布尔值,往压制完成的视频中封装章节文件,需要提前准备与片源文件名相同的 txt 文件,例如 0d000721.txt
delFiles:布尔值,在压制完成后删除压制过程产生的中间文件
rpc:布尔值,在压制完成后进行花屏检查,带有字幕的压制版本会与在加上字幕后的片源进行对比,以避免误报
xxxx_path:顾名思义;如果在同一文件夹下或在环境变量中,则不需要传入参数
param_x264/param_x265:x264/x265的参数,为避免出现问题,更改参数时请在默认值的基础上进行修改,确保格式一致

同时感谢各位大佬的帮助,具体帮助内容写在了代码注释中)
也欢迎各位提出 issue 或者 pr 等





↑此帖是lam半夜写脚本写上头了的产物,要是有什么问题大概是半夜脑子不好使了(


页: [1]
查看完整版本: vs批量压制脚本,支持多版本字幕/花屏检查/自动封装等功能