多电脑+本地NAS网盘轻松自动化压制教程

A@NAZOrip
[email protected] 2021年12月23日
  • 在其它设备中阅读本文章

❀原创教程,转载本页必须注明链接和作者

❀目前本文档处于发布早期,会频繁更新/修bug,出问题求不锤

咳咳, 标题有点吓人, 说明白点就是在拥有一堆各种系统的电脑+NAS的情况下,根据不同电脑的性能分工完成多集视频的压制,而且只要同一套命令文件就可以实现;除非分为Linux和Windows两种系统才需要改做两份,所以应该比之前的大批量压制教程简单很多(⊃‿⊂) ⊂(⋂ヮ⋂)⊃
如果要压缩12集的源,那么两台电脑的性能差理论上可以大到1/12,升级淘汰下来的旧电脑就可以有效利用起来了

提醒:本教程不包含网盘的创建,且仅在Windows10的环境下测试了本地与VPN的可行性

提醒:关于ffmpeg pipe给x265压制的说明省略,请见x265视频压制教程里的第一页

需求:最少两台电脑和一台本地NAS网盘,或者有高速VPN来访问网络另一端的NAS网盘

警告:要备份文件,导出和导入不要放在同一个文件夹里以免数据覆盖

下面正式开始教程(っ╹◡╹)ノ


实现方法(⊙_◎):

这套方案相比于手动指定在哪里导入和储存,要求电脑直接创建临时位置,这样就能减少对命令行的改动,从而让多电脑协同变得容易。主要使用了Unix和Windows中都有的pushdpopd命令,以及功能接近的net usemount\\\٩( 'ω' )و ////

  • pushdpopd被用以创建临时导入的盘符以及路径。相当于cd /dchange drive /drive)命令,但好处是更加工整,主动创建临时盘符,不用给每台电脑添加网盘地址;还解决了CMD不支持UNC路径的问题。
    • 格式为"pushd <路径>"和popd。
  • net use被用来创建临时导出的虚拟盘,毕竟压完视频后要集中到一处导出。
    • 格式为net use \\服务器名\文件夹,注意Net不支持盘符路径,且UNC路径的末尾不允许写"\"
    • 还有个net view用来测验网络位置能不能打开
UNC路径:

Unix社区很早之前发明的路径书写格式,写作//服务器名/文件夹/文件.xxx,在DOS和Windows上写作\\服务器名\文件夹\文件.xxx。用它来添加网络打印机超级方便,搭配VPN还能远程在公司内网打印恐吓信吓人的东西

  • "服务器名"也可以写IP地址,比如\\192.168.2.155\文件夹\
  • Windows系统用"/"代表命令,比如xcopy /S /Q /Y /F \\ix-server\1.txt %USERPROFILE%\Desktop\1.txt就很工整ᕦ(ò_óˇ)ᕤ

DOS和Windows

::Windows CMD下UTF-8特供空行

Net view <服务器名>
pause ::暂停一下看看地址能不能打开,防止有的地址设了访问权限(๑•ૅㅁ•๑)

Net use Q: "\\服务器名\输出文件夹\"
::Net use支持输入用户名和密码,要升级为管理员就直接将"<密码> /USER:<用户名>"加后面
::我没见过Q盘符,而且pushd会从Z开始往A创建盘符,所以选了Q

pushd "\\服务器名\输入文件夹\"

C:\ffmpeg.exe -i [视频1] -an -f yuv4mpegpipe -strict unofficial - | C:\x265-8bit.exe --input-csp i420 --allow-non-conformance [压制参数] --y4m - --output Q:\[新视频1]
::前面pushd直接将当前命令运行位置定在了待压制文件夹,所以ffmpeg直接写视频文件名即可

C:\ffmpeg.exe -i [视频2] -an -f yuv4mpegpipe -strict unofficial - | C:\x265-8bit.exe --input-csp i420 --allow-non-conformance [压制参数] --y4m - --output Q:\[新视频2]

C:\ffmpeg.exe -i [视频n] -an -f yuv4mpegpipe -strict unofficial - | C:\x265-8bit.exe --input-csp i420 --allow-non-conformance [压制参数] --y4m - --output Q:\[新视频n]
# 照此把所有视频集数用的命令写出来就行了
# 还可以整一台电脑正序压制,一台电脑倒序压制的骚操作哦 ~>゜)~~~~

Net use q: /delete
popd&pause
::丢弃掉pushd临时建立的盘符以清空内存占用,当然重启电脑也能实现
::使用一个&以同时启用暂停,因为不需要确认上个命令是否成功运行
压制-批处理.bat
Unix - 没试过
#!/bin/bash
echo 'su密码' | sudo -S mkdir /mnt/挂载文件夹/ && echo 'su密码' | sudo -S mount -t cifs -w //服务器名/输出文件夹 /mnt/挂载文件夹/
read -p "暂停一下看看地址能不能跑,按Enter继续哦"
::Unix 没net use,但是据说装个cifs mount就行了
::超级用户没密码的话不用写"echo 'su密码' | "

pushd "//服务器名/输入文件夹/"

ffmpeg -i [视频ssr] -an -f yuv4mpegpipe -strict unofficial - | x265-8bit --input-csp i420 --allow-non-conformance [压制参数] --y4m - --output /mnt/挂载文件夹/[新视频ssr]

echo 'su密码' | sudo -S umount /mnt
popd&read -p "按Enter继续哦"
exit
压制-shell.sh

Unix mount 来源: Khaled AbuShqear
没有mount的话先用$ sudo apt-get install cifs-utils装上CIFS工具 ○(・x・)


以上例子中,文件导入ffmpeg里的速度取决于网速,所以会比本地文件导入ffmpeg慢。当然,导出也可以再写个pushd加一栈路径存入网盘里别的位置。只要在用完的时候命令popd丢弃即可

以上例子中,直接写UNC路径到压制命令行里面不是不行,而是因为总是根据视频改写导入路径,导出路径,压制参数,文件名什么的,每次都要重写一遍实在太麻烦,比如C:\ffmpeg.exe -i Goodnight.mp4 -an -f yuv4mpegpipe -strict unofficial - | C:\x265-8bit.exe --input-csp i420 --allow-non-conformance --rect --amp --ctu 64 --min-cu-size 8 --limit-tu 1 --tu-intra-depth 4 --tu-inter-depth 4 --max-tu-size 16 --me star --subme 6 --merange 48 --analyze-src-pics --max-merge 4 --early-skip --b-intra --no-open-gop --radl 3 --min-keyint 5 --ref 3 --keyint 240 --fades --bframes 14 --b-adapt 2 --scenecut 42 --scenecut-aware-qp 3 --masking-strength 500,5,1,500,5,1 --crf 16.5 --qcomp 0.6 --rdoq-level 2 --psy-rdoq 4 --aq-mode 4 --qg-size 16 --rd 5 --limit-modes --limit-refs 1 --rskip 1 --rc-lookahead 70 --rd-refine --splitrd-skip --deblock 0:-1 --no-sao --tskip --cu-lossless --opt-qp-pps --opt-ref-list-length-pps --y4m - --output C:\test.hevc就很麻烦,再加上各种路径就更长了


其它

关于各种log和输出啥的都和本地压制一样不变,2pass的话临时文件写个本地地址,或者用net use/mount再弄一个盘符/挂载出来就可以了

echo.     ::输出空白行让命令输出窗口更工整
@ [命令行] ::避免批处理中的命令行重复一遍输入的命令
color E1   ::CMD中使用好看的蓝字黄底窗口
color B0   ::CMD中使用美观的黑字浅蓝底窗口
color F6   ::CMD中使用优雅的黄字灰白底窗口(ノ´д`)

救命为什么我闲的没事要写这么个东西那么就这样