自建视频源教程

63次阅读

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

个人的一点经验,写给需要的 mjj,大佬轻喷
什么是视频源?
顾名思义,视频站的视频资源。不少网上流传的视频站源码,默认是不带视频源,拿到手后要么自建,要么采集。
为什么需要自建视频源?
毕竟天下没有免费的午餐,为了稳定和可控最终还是要走向自建。
那么如何自建?
这里默认站点已经搭好,至少为视频源准备一台大盘机,要求口子大,流量越多越好,回国线路可反代,对性能没什么要求,有条件可以上独服。准备一台高性能计算机(建议 8c16t),用于视频压制,这里我用良心云 448 替代。
找资源
诸如RARBGnyaa.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,然后右键粘贴路径,回车转到该目录。
根据需要进行测试
仅加字幕:

  1. ffmpeg -i test.mp4 -c:v libx264 -filter_complex “subtitles=test.ass” output.mp4

复制代码

加字幕与水印:

  1. 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 像素,坐标可自定。

  1. 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 的详细参数,根据视频的具体情况设置,这里给个参考项。

  1. “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 下的批量脚本

  1. 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,代码如下

  1. 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,应该大差不差(手上没卡,你们跑下吧):

  1. 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

切片
切片的优势: 方便回源,节省流量 ,有助于应对网络波动,甚至可以加密防盗链(需要程序支持)
切片的劣势:不利于兼容,不方便管理,增加调用频率,增加工作量
切片不会影响画质(体积略微增大)
代码比较简单(代码简单,不是切片简单)

  1. 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 可以包含所有片段
建议写两个脚本,执行会方便些
先根据文件名新建文件夹

  1. for %%a in (“*.mp4”) do md “%%~na”

复制代码

同样的,将脚本保存在 压制好的视频目录 执行
执行完后再切片

  1. 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

小猪佩奇 顶一顶

BigSite mark

总统 帮顶

NoctuG 支持技术分享   大家一起吃饭

三丫的 收藏了,谢楼主分享

kmbeer 感谢分享

3351239779

钱宗鑫 这些都容易,视频站点难点在于带宽和负载均衡,如果像 netflix 一样能够自适应设备播放高画质的更难

注册

注册 又饭一起吃

小猪佩奇 make~

ZhènJīngBù 虽然我看不懂,但我还是占个位

forg 感谢分享

中本聪 手动更新吗,那不累死?

切片压制都是小事,关键还是得找大厂的接口。不然消耗不起啊。

hjvn2211445 ** 大厂 cdn 最香

siyi 谢谢楼主分享,好人一生平安

牛顿 mk

注册 可刑啊

注册 支持技术分享   大家一起吃饭

zerone110 支持技术分享 , 正研究建影视站自己看

Antony 技术贴 必须 mark 一下

yunlikanwu 你说这些。。。根本就不难。。。难就难在变现难。。。

caicaiwuguo

mjj 大军 标记。

mjj666zzz   好贴顶

theoneman 膜拜大佬

正文完
 0