blrec
blrec copied to clipboard
[feature request] 添加录制结束后执行指定指令
可以进行一些网盘上传(rclone等)、删除录播的操作
虽然现在用 webhook
再写一下处理也可以做到,但是如果能直接支持的话感觉更好
fastapi起一个,很快的
import uvicorn
from fastapi import FastAPI
from pydantic import BaseModel
from typing import Any
from uuid import UUID
from datetime import datetime
class Event(BaseModel):
type: str
id: UUID
date: datetime
data: Any
app = FastAPI()
@app.post('/blrec')
async def rec(event: Event):
if event.type == 'VideoPostprocessingCompletedEvent':
path = event.data['path']
cmd = f'rclone move {path} remote:dir/'
await asyncio.subprocess.create_subprocess_shell(cmd)
retrun {}
uvicorn.run(app)
以上代码未经测试
可以进行一些网盘上传(rclone等)、删除录播的操作 虽然现在用
webhook
再写一下处理也可以做到,但是如果能直接支持的话感觉更好
其实还没开源前就有这个功能,但出于安全和稳定考虑,删掉了。
如果 blrec 可以通过公网访问,可以随意添加并执行命令行命令是不安全的。
还有像网盘上传这种不知道要运行多长时间才完成,不好设置超时限制,如果不加超时限制有可能出问题僵死了导致一直占用资源,进而可能导致程序崩溃。
出于安全和稳定考虑,这个功能不会加了,还是用 webhook 比较安全可靠。
可以进行一些网盘上传(rclone等)、删除录播的操作 虽然现在用
webhook
再写一下处理也可以做到,但是如果能直接支持的话感觉更好
如果仅仅针对 rclone 的话,可以尝试用 rclone mount 挂载网盘,然后使用 -o 参数将录制文件存放到合适的路径。 这是我目前在使用的方案,效果类似于上传网盘后删除本地文件。即使你需要在录制完成后使用 ffmpeg 转码为 mp4 格式也没有任何问题,rclone 不会立刻上传录制完成的 flv 文件,而是等待一段时间,期间文件没有被读取才会上传(显然录制完成后 ffmpeg 读取了 flv 文件)。所以可以在转码完成后再上传 mp4 文件(以及 flv 文件——如果它没有被删除的话)