找回密码
 立即注册
查看: 233|回复: 0

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

  • TA的每日心情
    无聊
    2023-3-18 18:33
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    23

    主题

    309

    回帖

    1056

    VC币

    星辰大海

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    积分
    406059
    Lambholl 发表于 2024-10-26 04:29:36 | 显示全部楼层 |阅读模式
    本帖最后由 Lambholl 于 2024-10-26 11:20 编辑

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


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

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

    GitHub

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

    5. @lamvs.encodeProcess(encodeTypes=['JPSC','JPTC','HEVC'], delFiles=True, rpc=True)
    6. def encodeVideo(source=''):
    7.     src=core.lsmas.LWLibavSource(source).fmtc.bitdepth(bits=16,dmode=1)
    8.     last=src
    9.     last=zvs.zmdg(last,thsad=120,thscd1=250,truemotion=True,refinemotion=True,lf=0.2,cs=True)
    10.     last=zvs.bm3d(last,sigma=[2,1,1],sigma2=[0.8,0.5,0.5],radius=1,preset='np',vt=1,mode='cuda_rtc')
    11.     # more produces
    12.     return last
    13.   
    14. if __name__ == '__main__':
    15.     videos = lamvs.getSources() #得到一个文件名列表
    16.     # 使用此函数,将需要压制的片源文件依次拖拽进窗口回车,一行对应一个文件,输入空行以结束
    17.     for i in videos:
    18.         encodeVideo(i)
    复制代码

    以下是对参数的详细说明:
    sourceType: 'Web'(默认) 或者 'BD'
    ext: 片源文件的扩展名,Web 时默认为 '.mkv' ,BD 时默认为 '.m2ts'
    encodeTypes:传入列表,从 'CHS', 'CHT', 'JPSC', 'JPTC', 'HEVC' 中选择一项或多项,分别需要准备与片源文件名相同的字幕文件,后缀分别为.sc  .tc  .jpsc .jptc  None +.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活跃度 +1000 收起 理由
    铁皮厚厚 + 1000 赞一个!

    查看全部评分

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表