TA的每日心情 | 无聊 2023-3-18 18:33 |
---|
签到天数: 3 天 [LV.2]偶尔看看I
星辰大海
- 积分
- 406059
|
本帖最后由 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=[2,1,1],sigma2=[0.8,0.5,0.5],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 .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半夜写脚本写上头了的产物,要是有什么问题大概是半夜脑子不好使了(
|
评分
-
查看全部评分
|