整理下使用VapourSynth进行压制的相关流程 时间: 2019-11-07 23:42 分类: 技术笔记 # 前言 VapourSynth是代替长久未更新的AVS的帧服务器工具。用于视频画面处理与压制准备工作。由于在撰稿时尚没有找到一个类似小丸工具箱的简易化的懒人实现,因此暂时整理下整个配置流程,以方便后续使用。 # 1.环境配置 1. VapourSynth R38版本依赖Python3.6。 2. 配置好Python3.6后,安装VapourSynth。 3. 安装好后,下载解压VapourSynth Editor作为可浏览效果的编辑器。(地址:https://bitbucket.org/mystery_keeper/vapoursynth-editor/downloads/) 4. 配置安装插件。这里可以使用萝莉屋整理好的插件:https://share.dmhy.org/topics/view/478666_LoliHouse_LoliHouse_1st_Anniversary_Announcement_and_Gift.html 主要位置为```Python目录/Lib/site-packages``` 以及```vs目录/plugins64``` 5. 配置后续工具 如x264等 # 2.脚本编写 vs脚本虽然采用Python编写,但为了浏览脚本效果,建议通过标准IDE如PyCharm编写,并复制到VS Editor中浏览。 下面我使用的一段脚本如下 ```python import vapoursynth as vs import sys import havsfunc as haf import mvsfunc as mvf import nnedi3_resample as nnrs core = vs.get_core(accept_lowercase=True) source = r"Grand Escape(Live).ts" # ts片源输入 logo = r"NHKG 1440x1080.lgd" # logo文件,下载地址:https://down.7086.in/lgd/ source = core.lsmas.LWLibavSource(source, threads=0, repeat=True) src = source # ivtc反胶卷过带/deint反交错 # src = core.vivtc.VFM(src, order=0, mode=5, mi=64, cthresh=7) # src = core.vivtc.VDecimate(src) src = haf.QTGMC(src, TFF=True, FPSDivisor=2, Preset="medium", FftThreads=12) # 去台标 dlg = core.delogo.EraseLogo(src, logo) src8 = haf.logoNR(dlg, src, chroma=True, l=1272, t=80, r=72, b=952) # # 切左右黑边 # src8 = core.std.CropRel(src8, left=0, right=0) # src16 = core.resize.Bicubic(1920, 1080, format=vs.YUV420P16, filter_param_a=0, filter_param_b=0.5) # 重整分辨率至1920x1080,并16bit化 src16 = core.fmtc.resample(src8, 1920, 1080, kernel="Spline", taps=4) # 画面处理 debd = core.f3kdb.Deband(src16, 8, 48, 32, 32, 0, 0, output_depth=16) debd = core.f3kdb.Deband(debd, 16, 36, 24, 24, 0, 0, output_depth=16) debd = mvf.LimitFilter(debd, src16, thr=0.5, thrc=0.5, elast=2.0) # 输出 res = debd # Debug=1,片源与成品对比;Debug=0,输出成品,准备压制。 Debug = 0 if Debug: compare = core.std.Interleave([down, res]) compare = mvf.ToRGB(compare, full=False, depth=8).set_output() else: res = mvf.Depth(res, 8) # 输出8bit res = core.sub.TextFile(res, "target.ass") res.set_output() ``` 如果碰巧处理1440x1080i的TV源,直接套用这套脚本以及根据注释修改就可以了。 注意执行顺序,先用`qtgmc`反交错,然后`logoNR`去台标。接着拉回1920x1080。(TV源直接拉回1920就可以了,不要通过修改SAR DAR)至于拉的算法可以考虑考虑 再一个就是字幕滤镜的问题。我这里用的是`sub.TextFile`。如果没有mod代码,不要用mod系字幕滤镜,因为vs的mod系滤镜表现不佳。普通字幕的话这个滤镜足够。 另外是这个滤镜需要8bit420使用。 # 3. 过编码器(压制) vs采用`vspipe.exe`和管道命令`|`给编码器传递视频帧。 `vspipe.exe`位于`vs安装目录/core64`,可以直接加path里 一般命令类似 ```cmd vspipe --y4m "preview.vpy" - | x264 --demuxer y4m 后面接264参数 --output "输出文件名.h264" - ``` 特别注意 为了正确传递视频帧 管道左边和命令最后的两个短线`-`一定不能漏写 x264编码用的最多无非就是CRF模式和2pass模式 `CRF`按上述格式正常写参数就可以了 `2pass`模式比较坑,需要手动两次pass。 即: 第一次: ```cmd vspipe --y4m "preview.vpy" - | x264 --demuxer y4m --preset veryslow --bitrate 5800 --pass 1 --slow-firstpass --stats "E:\disc_1_1.stats" 后面接标准参数 --output "输出文件名.h264" - ``` 这里几个坑讲一下:首先`--pass 1`代表首次pass。 `--slow-firstpass`我还没有查什么用先照搬过来。 `--stats`一定要写(保存画面分析信息的),而且后面跟的**必须是绝对路径!!!** 第二次: ```cmd vspipe --y4m "preview.vpy" - | x264 --demuxer y4m --preset veryslow --bitrate 5800 --pass 2 --stats "E:\disc_1_1.stats" 后面接标准参数 --output "输出文件名.h264" - ``` 可以看到除了`pass`改成2,删掉`firstpass`与之前一致。记得不要误删stats文件。 # 4. 压制音轨与混流封装 小丸走起! # 5. TODOs 1. 具体研究下这个手动2pass还有什么值得关注的细节 比如上面说的slow first pass 2. 研究一下几套264参数的作用 3. 如果可行,将上述过程直接封装到GUI里,至少也写到一个CMD里方便无脑操作 # 附录 备份几个264参数 ``` vspipe --y4m “walkure2018.vpy” - | x264 --demuxer y4m --preset veryslow --crf 24 --pass 1 --slow-firstpass --stats "E:\disc_1_1.stats" --tune film --deblock -1:-1 --keyint 180 --min-keyint 1 --weightb --ref 13 --vbv-bufsize 24000 --vbv-maxrate 23000 --aq-mode 1 --mbtree --me umh --subme 7 --merange 16 --psy-rd 0.7:0.1 --no-fast-pskip --colormatrix bt709 --output “E:\disc_1_1_pass1test.264” - vspipe --y4m “E:\walkure2018.vpy” - | x264 --demuxer y4m --preset veryslow --bitrate 5800 --pass 2 --stats "E:\disc_1_1.stats" --tune film --deblock -1:-1 --keyint 180 --min-keyint 1 --weightb --ref 13 --vbv-bufsize 24000 --vbv-maxrate 23000 --aq-mode 1 --mbtree --me umh --subme 7 --merange 16 --psy-rd 0.7:0.1 --no-fast-pskip --colormatrix bt709 --output “E:\disc_1_1_pass1test.264” - ``` ``` --level 5.1 --preset veryslow --pass 2 --bitrate 5900 --ref 8 --bframes 12 --vbv-bufsize 24000 --vbv-maxrate 24000 --merange 32 --colormatrix bt709 --qpmax 59 --qcomp 0.7 --aq-strength 0.85 --no-dct-decimate ``` ``` x264 --crf 24 --preset 8 -r 6 -b 6 -I infinite -i 1 --scenecut 60 -f 1:1 --qcomp 0.5 --psy-rd 0.3:0 --aq-mode 2 --aq-strength 0.8 ``` 标签: 压制 视频后期