之前有将视频切片上传到阿里图床,只不过因为大量滥用,这个方法已经行不通了。

刚好GitHub可以储存文件,并且有直链。因此拿来存放视频切片片段再合适不过。

GitHub对项目大小的限制如下,因此请注意自己项目的大小和切片文件的大小,尽可能避免被GitHub警告。
GitHub存储库限制

准备

在Windows安装ffmpeg、git,建议使用choco进行安装。
注册好GitHub账号。
将视频文件单独存放在英文目录。
准备好自己的域名接入cloudflare并使用cloudflare解析。

切片

我使用的 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

测试

进入存放切片的文件夹,找到m3u8文件,使用vlc,potplayer之类的播放器打开m3u8文件。可以正常播放就行。

处理

将m3u8文件和视频原文件移出存放切片文件夹。

别将m3u8文件和视频原文件一起上传到GitHub了。

上传

将切片文件夹用git上传到github,可能会提示:fatal: the remote end hung up unexpectedly错误。
git-push报错

可能是缓存的原因或者是网络的原因,我是缓存不够,可以在Git库里的/.git/config文件加入

[http]  
postBuffer = 5242880000

编辑m3u8

使用VS CODE或者之类的软件打开m3u8文件,将里面的文件名

output000.ts
全部替换成
https://raw.githubusercontent.com/xxx/xxx/master/xxx/output000.ts

具体链接样时请根据你自己的存储库进行处理。

优化

因为GitHub在国内总是访问失败,因此可以cf worker用自己的域名反向代理raw.githubusercontent.com即可。
教程在这

也可以用自己的域名后,用 302 跳转到jsdelivr

if ($host = 'github-raw.wnark.com') {
    rewrite  ^/(.*)/(.*)/master/(.*) https://cdn.jsdelivr.net/gh/$1/$2@master/$3 redirect;
}

记得要设置允许跨域:

add_header  Access-Control-Allow-Origin https://www.wnark.com;

不然的话浏览器会报错。

只不过随着jsdelivr的全面被滥用,这个方法迟早会失效,因此在m3u8内的链接别用jsdelivr的,用次302跳转就行了。

测试

我博客的视频都是这样的,不用单独测试视频了。


参考:

GitHub + jsDelivr视频切片测试
git 推送出现 "fatal: The remote end hung up unexpectedly" 解决方案

最后修改:2020 年 05 月 21 日
如果觉得我的文章对你有用,请随意赞赏