本帖最后由 小猪佩奇 于 2022-8-15 22:30 编辑
个人的一点经验,写给需要的mjj,大佬轻喷 什么是视频源? 顾名思义,视频站的视频资源。不少网上流传的视频站源码,默认是不带视频源,拿到手后要么自建,要么采集。 为什么需要自建视频源? 毕竟天下没有免费的午餐,为了稳定和可控最终还是要走向自建。 那么如何自建? 这里默认站点已经搭好,至少为视频源准备一台大盘机,要求口子大,流量越多越好,回国线路可反代,对性能没什么要求,有条件可以上独服。准备一台高性能计算机(建议8c16t),用于视频压制,这里我用良心云448替代。 找资源 诸如RARBG、nyaa.si都是比较知名的bt站,根据需要尽可能找高质量的mp4,拉回来切片即可;如果还有加水印字幕的需求,那么我们还需要对视频进一步加工,继而我们选择高码率的BDrip,感兴趣还可以下BDMV(蓝光原盘) 找的资源没有字幕怎么办?没关系,相关字幕可以从伪射手获取,建议选择ass,字体和特效文件内指定,感兴趣的可以选择Aegisub进行调整。拿到字幕后别急着开工,先大致校对时间轴,无误后开始压制。 压制工具选择ffmpeg 下载和安装 前面的帖子讲过,将下载好的主程序放到任意文件夹,再把文件路径记录到环境变量中,就可以直接cmd调用ffmpeg了 解压程序包→复制ffmpeg主程序路径(一般在bin文件夹)→右键此电脑→属性→高级系统设置→环境变量→系统变量中的path,双击→新建→复制刚刚的路径 还是倾向于Linux?可以下载官方的静态文件,把主程序放到/usr/bin 文件夹内即可 最后在控制台输入ffmpeg,检查是否安装到位。 下载地址(选GPL且不建议10XXXX版) WIN https://github.com/BtbN/FFmpeg-Builds/releases Linux静态文件 https://johnvansickle.com/ffmpeg/
开始压制 将准备好的视频与字幕重命名,放在对应文件夹内。 win+r 打开cmd,复制文件夹路径,输入cd /d,然后右键粘贴路径,回车转到该目录。 根据需要进行测试 仅加字幕:
- ffmpeg -i test.mp4 -c:v libx264 -filter_complex "subtitles=test.ass" output.mp4
复制代码
加字幕与水印:
- ffmpeg -i test.mp4 -i logo.png -c:v libx264 -filter_complex "overlay=10:10,subtitles=test.ass" output.mp4
复制代码
#自备水印图片 解释下,libx264:使用avc编码,也就是所说的x264,为啥不用x265,当然也可以用,浏览器兼容性差些。 利用组合滤镜filter_complex,可以实现许多功能,比如新建幕布(color),叠加视频(overlay),导入视频(movie),拼接视频(concat)等。这里用到了overlay和subtitles,"overlay=10:10"即离左边界10像素,上边界10像素,坐标可自定。
- ffmpeg -i test.mp4 -ignore_loop 0 -i logo.gif -c:v libx264 -filter_complex "overlay=10:10,subtitles=test.ass" image_out.mp4
复制代码
#如果水印是动图,请加上"-ignore_loop 0"这个参数,否则动图播完一个循环就会停止。
优化参数 为了达到更理想的压制效果,仅用默认参数肯定是不够的。 转换色彩空间 -pix_fmt yuv420p,通通yuv420 设定压制速率为更慢 -preset:v slower 建议选慢,更慢,再不济也是中。画质将更好,压缩率也会更高。 设定等级-profile:v high -level 5.0 也就是high 5.0,等级越高支持的参数越多,理论压缩率越高,但兼容性越差。蓝光原盘,几乎都是main4.0。 接下来设定x264的详细参数,根据视频的具体情况设置,这里给个参考项。
- "cabac=1:ref=6:deblock=-2,-2,:me=tesa:me-range=32:subme=10:psy=1:bframes=8:b-adapt=2:keyint=300:keyint_min=1:scenecut=60:rc_lookahead=41:crf=19:qcomp=0.50:qpmin=0:qpmax=80:aq-mode=2:aq_strength=0.6"
复制代码
具体每个参数不一一解释,个人能力有限,难以科普到位。 了解下比较重要的几个选项: crf=19,一般前面会接rc=crf(软件经常报错干脆不加了)CRF:恒定质量,只需知道由x264按需分配码率。默认23,值越大体积越小平均码率越低,值越小体积越大平均码率越高。 bframes=8,b帧也是影响体积的重要因素,数量越多压缩率越高,针对画面变动幅度小的视频,比如动画/人文/记录,应当尽量提高。画面波动越大,比如动作片科幻片,应当慎重使用,尽量调低。 keyint=300:keyint_min=1,即最大关键帧(I帧)与最小关键帧距,帧距越大压缩率越高,体积越小,但兼容性/流畅性可能越差,对于动画而已keyint_min可以设置为1,但真人电影,尤其是动作片,建议23(依具体效果而定) me=tesa:me-range=32:subme=10,高质高压参数,就是非常慢 最后音频,统一设定为aac即可,质量按需调整 -c:a aac -q:a 6 整理成win下的批量脚本
- for %%a in ("*.mkv") do ffmpeg -i "%%~a" -i mjj.png -filter_complex "overlay=10:10,subtitles=’%%~na.ass’" -pix_fmt yuv420p -c:v libx264 -preset:v slower -profile:v high -level 5.0 -x264-params "cabac=1:ref=6:deblock=-2,-2,:me=tesa:me-range=32:subme=10:psy=1:bframes=8:b-adapt=2:keyint=300:keyint_min=1:scenecut=60:rc_lookahead=41:crf=19:qcomp=0.50:qpmin=0:qpmax=80:aq-mode=2:aq_strength=0.6" -c:a aac -q:a 6 "%%~na.mp4"
复制代码
新建记事本,把代码粘贴上去,保存为xx.bat,放在视频文件夹双击运行即可。建议输出视频为绝对路径,"%%~na.mp4"可以改成"D:完成/%%~na.mp4" 上面的绿色的内容,提示字幕中字体的调用情况,左边为设定字体,右边为实际调用字体(系统中缺少相应字体) 最下方则是进度,依次为:帧数;当前帧率;当前质量;体积;已用时间;码率;速率(参考播放速率)
硬件编码 上述软件编码对CPU性能要求很高,想快也不是不可以,只不过得牺牲点画质和体积。 基本套路不变 编码器由libx264改为h264_qsv(英特尔核显),色彩空间换成nv12,代码如下
- for %%a in ("*.mkv") do ffmpeg -i "%%~a" -i mjj.png -filter_complex "overlay=10:10,subtitles=’%%~na.ass’" -pix_fmt nv12 -c:v h264_qsv -preset:v slower -q:v 19 -c:a aac -q:a 6 "%%~na.mp4"
复制代码
如果是英伟达,则调用h264_nvenc,应该大差不差(手上没卡,你们跑下吧):
- for %%a in ("*.mkv") do ffmpeg -i "%%~a" -i mjj.png -filter_complex "overlay=10:10,subtitles=’%%~na.ass’" -pix_fmt nv12 -c:v h264_nvenc -preset slow -quality best -rc vbr -cq 18 -c:a aac -q:a 6 "%%~na.mp4"
复制代码
N卡支持情况,有必要看下 https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new
切片 切片的优势:方便回源,节省流量,有助于应对网络波动,甚至可以加密防盗链(需要程序支持) 切片的劣势:不利于兼容,不方便管理,增加调用频率,增加工作量 切片不会影响画质(体积略微增大) 代码比较简单(代码简单,不是切片简单)
- ffmpeg -i input.mp4 -c:v copy -c:a copy -hls_time 6 -hls_list_size 0 -f hls "output/video.m3u8"
复制代码
-c:v copy -c:a copy:复制音视频流,故不影响画质 -hls_time 6 时长为6秒 -hls_list_size 0 设置0可以包含所有片段 建议写两个脚本,执行会方便些 先根据文件名新建文件夹
- for %%a in ("*.mp4") do md "%%~na"
复制代码
同样的,将脚本保存在压制好的视频目录执行 执行完后再切片
- for %%a in ("*.mp4") do ffmpeg -i "%%~a" -c:v copy -c:a copy -hls_time 6 -hls_list_size 0 -f hls "%%~na/video.m3u8"
复制代码
切出的ts文件与video.m3u8放在同一个目录。
后续流程 打包压缩,建议直接zip/tar,win端od同步,rclone到大盘机,解压到相应位置。 没有特别的需要,建个默认站点,签个证书,把视频资源放进去。 视频站直接调用目标m3u8即可播放。 利用手中线路好的小鸡反代,开缓存,时间设置为12小时以上,过期删除,访问量不大对磁盘的要求也不高。有条件的还可以分线解析,有的小鸡对移动友好,有的对电信友好,用户体验又会好些。
只不过这些流程已经跟不上时代了,压制也好,切片也罢权当了解下吧。 |