自建视频源教程

74次阅读

共计 4793 个字符,预计需要花费 12 分钟才能阅读完成。

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

前排占位,M自建视频源教程自建视频源教程顶一顶 mark 帮顶支持技术分享 大家一起吃饭收藏了,谢楼主分享自建视频源教程感谢分享顶这些都容易,视频站点难点在于带宽和负载均衡,如果像 netflix 一样能够自适应设备播放高画质的更难

spotlight 发表于 2022-8-15 22:29
这些都容易,视频站点难点在于带宽和负载均衡,如果像 netflix 一样能够自适应设备播放高画质的更难 …

嗯又饭一起吃 make~ 虽然我看不懂,但我还是占个位感谢分享手动更新吗,那不累死?切片压制都是小事,关键还是得找大厂的接口。不然消耗不起啊。** 大厂 cdn 最香谢谢楼主分享,好人一生平安 mk 可刑啊支持技术分享 大家一起吃饭支持技术分享 , 正研究建影视站自己看技术贴 必须 mark 一下

spotlight 发表于 2022-8-15 22:29
这些都容易,视频站点难点在于带宽和负载均衡,如果像 netflix 一样能够自适应设备播放高画质的更难 …

你说这些。。。根本就不难。。。难就难在变现难。。。^-^ 标记。好贴顶膜拜大佬

spotlight 发表于 2022-8-15 22:29
这些都容易,视频站点难点在于带宽和负载均衡,如果像 netflix 一样能够自适应设备播放高画质的更难 …

切片可以同时切多种分辨率的版本,生成一个 M3U8 文件,支持 HLS 的播放器都会自动选择最适合的码率。均衡负载和带宽没啥好办法,可以选择支持 P2P 的播放器利用好用户的带宽技术贴必须支持 mark 插眼

mjj 大军 发表于 2022-8-16 00:26
你说这些。。。根本就不难。。。难就难在变现难。。。

敢吃菠菜就好办。不敢吃就很难了。

正文完
 0