olive-自动化录制工具的编译部署
前言
本文主要介绍olive。
使用
我的使用思路很简单, 如下:
从源码直接运行(不做打包处理)。 通过hyper-v自启动的linux虚拟机中的Systemd模块配合.sh脚本来自启动这个项目。
并且olive支持自动监控直播间是否开播。
也就是说, 如果只录制自己直播间的话, 我肯定是在电脑启动后开播的, 而电脑启动后olive也就自启动了(即开始实时监测直播间是否开播), 当我准备就绪开播时, 就会触发olive的监测, 以自动开始录制这场直播。
还有就是, 对于b站的用户, 还支持将录制视频自动上传b站。(这样相当于节省本地存储, 白嫖b站的存储空间)
最后还需要定期删除已上传的视频文件, 以节省本地存储空间
这一步在我看来也是很重要的, 特别是如果部署到一个存储空间很小的服务器时, 定期删除很重要。(不过我是在本地使用的, 需求可能没那么强烈, 但也需要)
只是目前为止貌似在此项目中还未实现(我也是今天才用这个项目, 也许已经实现了我每找到用法。 即使目前真的没实现, 也可以自己写相关脚本来做, 并不影响使用)
配置中有这一操作olive 内部提供了几个已经实现好开箱即用的命令( 在[[Shows]] 的PostCmds中增加 Path 配置项 )
olivearchive: 将文件移动到当前路径下的 archive 文件夹中。olivetrash: 将文件删除(不可恢复)。olivebiliup: 若有配置 CookieFilepath、BiliupEnable,则会根据配置自动上传至哔哩哔哩,若上传失败会执行olivearchive。oliveshell: 将常规终端指令切分成字符串数组,并配置到 Args 中。
olive 内置了文件路径作为环境变量,并可以通过 $FILE_PATH 获取。注意环境变量只有在 shell 环境中才会正确解析,如 /bin/zsh -c “echo $FILE_PATH” ,只执行 echo $FILE_PATH 则很可能获取不到路径信息。PostCmds = '[{"Path":"oliveshell","Args":["/bin/zsh","-c","echo $FILE_PATH"]},{"Path":"olivebiliup"},{"Path":"olivetrash"}]'
也就是说,olivebiliup上传命令执行后(注意需要在命令行中执行olive biliup login来了登录获取cookies, 并配置cookies文件路径至 CookieFilepath, 然后配置BiliupEnable为true状态), 会执行olivetrash删除原文件(即使执行失败)。 但是就算执行失败也不会造成源文件丢失, 因为执行失败后会优先执行olivearchive将文件移动到当前路径下的 archive 文件夹中。
至于olive的使用, 其文档已经很详细了, 这里就不在本文过多介绍, 仅附上文档地址https://go-olive.github.io/docs/guide/intro/, 不过我是项自己从源码运行, 而不是使用通过install直接构建好的。
那么, 就简单记录下从源码执行的过程吧(文档中没写这部分, 因此这里简单说明下):
- 虚拟机创建
- 在新的linux系统中安装go语言, 并配置好(包括代理) 参考链接
- 从olive项目地址clone源码
- cd进入源码目录, 通过
go mode download下载全部项目依赖 - 使用
go run main.go运行此项目 go run main.go即相当于文档中的olive命令- 即
olive help就是go run main.go help - 和上个例子一样, 再举个例子
olive run -u https://www.huya.com/518512就是go run main.go run https://www.huya.com/518512
- 即
- 编辑 olive 的配置文件, 通过配置文件运行, 以使用其自动上传功能。
- 编写 .sh 脚本
- 使用 system 自启动 .sh 脚本
以上就是具体过程了。
olive的配置文件
更推荐使用 配置文件 方式执行它(即go run main.go run -f /home/srackhall/desktop/srackhall直播间录制目录/config.toml 或 olive run -f /home/srackhall/desktop/srackhall直播间录制目录/config.toml), 以便使用自动上传以及自定义录制后所执行命令的功能, 下面附上我的配置文件(其中有详细的解释说明):
1 | [Config] |
tips:
- 我来解释下图的error, 首先可以确定的是, 不会影响正常录制和上传任务。 cnt应该是count的缩写, 也就是说这前3行报错实质上就是一个心跳检测, 用来确定直播是否真的结束了, 以便之后重新开启下阶段的循环检测。 但第4行的错误我确实猜不出来其目的了(懒得看源代码了), 可能与网页端有关吧, 或者可能和循环检测前的处理有关, 总之我也不知道哈哈(但其也是不影响自动录制和自动上传的)。
- 可以利用’全局 SaveDir,绝对路径’ 和 ‘全局 OutTmpl’来简化 并行录制多个直播间时的配置量, 在对应[[Shows]]中对应的配置项使用’’或干脆不写就行(当然, 也可对需要个性化或者比较重要的对应配置项单独配置-优先与全局生效)。
- 在添加新直播间录制任务时, 请避免对配置文件中的’全局配置’以及’全局唯一字符串不同的对应配置’做改动, 确保做到仅修改新增直播间录制任务的所需配置(以确保已有的正在运行的录制任务不受影响)。也就是说, 同时录制多个直播间时, 是没必要运行多个olive进程的。

