前言
GitHub + jsDelivr视频切片。利用 jsDeliver + GitHub +PicGo 实现免费 CDN 加速静态资源,例如图片、CSS、JS等,相信大家都知道。Github目前上传没有限制,也就是说无限空间。也想过存放视频,但是 jsDeliver 不支持上传超过 20M 的资源,所以视频需要压缩到 20M 以下。如果想要放部电影,那就需要用到切片了,这里用的ffmpeg工具切割。
ffmpeg用于视频切分,这涉及到HLS技术,解释如下:
HLS 的工作原理是把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的 extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。HLS 只请求基本的 HTTP 报文,与实时传输协议(RTP)不同,HLS 可以穿过任何允许 HTTP 数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。在我们的场景中,可以理解为视频的 url 就是 playlist 的链接地址,而 playlist 可以看做是视频分片的索引,如此大的视频被拆分,即绕过存储的单位件大小限制,同时也符合Jsdelivr对资源的要求,这样存储的视频,就可以“变相”的将Github做为视频床了。
演示阶段
你的名字 4K
准备阶段
Github+jsDeliver+PicGo上传基础
如果这步没有搭建的话,请看下面这篇文章
这里推荐新建一个仓库来存储视频,如果被认定滥用而封禁,也只会影响这一个仓库,所以还是新建一个仓库。
准备ffmpeg工具 官网:ffmpeg,选择各自的电脑系统,我这里以Windows为例
下载完之后,是压缩包,解压之后是如下
然后配置环境变量
右键此电脑–>属性–>高级系统设置–>环境变量–>然后看图
验证是否成功:
cmd窗口输入ffmpeg -version 。如下图则安装成功
到这里准备工作完成了
ffmpeg工具来切片
①对视频进行转码(转为 mp4),将视频文件转为视频编码 h.264,音频编码 aac 格式的 mp4 文件,mp4 视频文件不是 h.264 编码到后面切片的时候可能会遇到很多莫名其妙的问题。(音画不同步之类的)
# infile.mp4 是待转码的文件(可以是其他格式,比如 avi…… 之类的)
# outfile.mp4 是转码输出文件
# libx264 转为 h.264 编码
ffmpeg -i infile.mp4 -c:v libx264 -strict -2 outfile.mp4
②将 mp4 切片,并生成 m3u8 文件
# output.mp4 需要切片的视频文件
# playlist.m3u8 待生成的 m3u8 文件名
# 5 切片时间,表示隔几秒进行切一个文件
# output%03d.ts 生成切割ts文件名,output%03d.ts 代表生成 output001.ts、output002.ts 这样的格式,03d 可以随意修改,占位符
ffmpeg -i output.mp4 -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 5 output%03d.ts
③这样就算切片成功了,视频被切割成你想要长度的 ts 文件。
④上传之前记得
右键编辑m3u8文件
使用编辑文本之类的软件打开m3u8文件,将里面的文件名
output000.ts
全部替换成
https://cdn.jsdelivr.net/gh/用户名称/仓库名称@(master)或者版本号/目录/文件名称.后缀
具体链接样时请根据你自己的存储库进行处理。
就是上传时的ts文件的jsDelivr路径
⑤上传后注意需要可以播放m3u8的播放器才能播放
结尾
下面是切片完成的成品🙈