自建视频源教程

70次阅读

共计 4701 个字符,预计需要花费 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 膜拜大佬

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

注册 技术贴必须支持

注册 mark

Occupier1 插眼

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

正文完
 0