个人的一点经验,写给需要的 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 小时以上,过期删除,访问量不大对磁盘的要求也不高。有条件的还可以分线解析,有的小鸡对移动友好,有的对电信友好,用户体验又会好些。
只不过这些流程已经跟不上时代了,压制也好,切片也罢权当了解下吧。 |