跳到主要内容

记录一下录播整理与磁带写入

有群友问我的录播文件是怎么整理、怎么写入磁带的,所以就有了这篇文章。

这篇不是完整教程,主要是记录我现在自己的流程:录播姬按固定模板生成文件,脚本定期把录播整理到完成目录,然后需要写带的时候,再从完成目录里挑一批写进磁带。

群友询问录播整理与磁带写入流程

录播文件整理

整理前,我的录播文件结构基本固定。先说文件名规则,再说脚本怎么处理。

文件名模板

目录结构大概是这样:

{用户名}/{开播时间(一般情况这个时间在同一场直播内是固定的不变的)(年月日-时分秒)}【{用户名}】/{录制时间(这个时间是防止分段冲突,就是录播文件新建文件的时间)(年月日-时分秒-毫秒)}.flv

录播姬里实际用的是这个模板:

{{name}}/{{ json.room_info.live_start_time | time_zone: 'Asia/Shanghai' | format_date: "yyyyMMdd-HHmmss" }}_{{ title }}【{{ name }}】/{{ "now" | time_zone: 'Asia/Shanghai' | format_date: "yyyyMMdd-HHmmss-fff" }}_{{ title }}.flv

文件结构示例

正常录出来大概长这样:

古守血遊official\20260417-200138_ෆ终末地ෆ【古守血遊official】\20260417-200154-504_ෆ终末地ෆ.cover.jpg
古守血遊official\20260417-200138_ෆ终末地ෆ【古守血遊official】\20260417-200154-504_ෆ终末地ෆ.flv
古守血遊official\20260417-200138_ෆ终末地ෆ【古守血遊official】\20260417-200154-504_ෆ终末地ෆ.xml
眞白花音_Official\20260417-210111_白菜来啦【眞白花音_Official】\20260417-210128-517_白菜来啦.cover.jpg
眞白花音_Official\20260417-210111_白菜来啦【眞白花音_Official】\20260417-210128-517_白菜来啦.flv
眞白花音_Official\20260417-210111_白菜来啦【眞白花音_Official】\20260417-210128-517_白菜来啦.xml
紫桃爱音Official\20260415-120003_B限歌回!【紫桃爱音Official】\20260415-120051-974_B限歌回!.cover.jpg
紫桃爱音Official\20260415-120003_B限歌回!【紫桃爱音Official】\20260415-120051-974_B限歌回!.flv
紫桃爱音Official\20260415-120003_B限歌回!【紫桃爱音Official】\20260415-120051-974_B限歌回!.xml

不过实际录出来的文件不一定完全规整,主要有两种情况:

  • 有可能会碎,现在很少出现碎了还分多个子文件夹的情况了。
  • 因为我开了标题更新就分段,所以同一场直播也可能分成两个子文件夹。

比如同一场直播标题变过,就可能变成这样:

紫桃爱音Official\20260415-120003_B限歌回A!【紫桃爱音Official】\20260415-120051-974_B限歌回!.cover.jpg
紫桃爱音Official\20260415-120003_B限歌回A!【紫桃爱音Official】\20260415-120051-974_B限歌回!.flv
紫桃爱音Official\20260415-120003_B限歌回A!【紫桃爱音Official】\20260415-120051-974_B限歌回!.xml
紫桃爱音Official\20260415-120003_B限歌回B!【紫桃爱音Official】\20260415-130051-974_B限歌回!.cover.jpg
紫桃爱音Official\20260415-120003_B限歌回B!【紫桃爱音Official】\20260415-130051-974_B限歌回!.flv
紫桃爱音Official\20260415-120003_B限歌回B!【紫桃爱音Official】\20260415-130051-974_B限歌回!.xml

脚本整理流程

早期 2022 年录的不多,我就手动整理。后期实在烦了,就写了个脚本,定期整理录播:

https://github.com/jkfujr/StreamRecorderOptimize

这个脚本主要做这几件事:

  1. 定时任务启动。
  2. 扫描我指定的录播目录 REC_PATHS
  3. 对比录播状态,跳过正在录制的直播间。
  4. 把已经结束的录播移动到待处理目录 PENDING_PATHS
  5. 在待处理目录里做 l2-l5 分析处理。
  6. 处理完后,把能确认完成的录播移动到 COMPLETE_PATHS

路径配置在 core/config.py 内:

        # 路径配置
self.path_config = {
"REC_PATHS": {
"AAA": r"F:\Video\录播\综合",
"PPP": r"F:\Video\录播\P家",
"TTT": r"F:\Video\录播\测试",
},
"PENDING_PATHS": {
"AAA": r"F:\Video\AAAAAAAAAA",
"PPP": r"F:\Video\PPPPPPPPPP",
"TTT": r"F:\Video\TTTTTTTTTT",
},
"COMPLETE_PATHS": {
"AAA": r"F:\Video\AAAAAAAAAA\综合",
"PPP": r"F:\Video\PPPPPPPPPP\P家",
"TTT": r"F:\Video\PPPPPPPPPP\测试",
}
}

脚本会先遍历所有录播文件夹的名称,也就是 用户名/{{name}} 这一层。

录播整理脚本获取直播间目录

然后去录播状态里对比,跳过正在录制的直播间,把已经结束的录播从录制目录移动到待处理目录 PENDING_PATHS

录播整理脚本移动到待处理目录

移动到待处理目录之后,就在这个目录里做 l2-l5 的分析处理。这部分细节看脚本仓库吧。

最后处理完,如果 用户名/{{name}} 内只剩下一个 {开播时间(一般情况这个时间在同一场直播内是固定的不变的)(年月日-时分秒)}【{用户名}】 子文件夹,就移动到 COMPLETE_PATHS

录播整理脚本移动到完成目录

如果 用户名/{{name}} 内还有 2 个及以上的子文件夹,就先留着不动。因为有可能规则覆盖不到,一般一天 500G 录播,应该也有 100 来个人,脚本处理完剩下的应该就 5 个左右。

(不过现在剩下的我也懒的去看了,直接手动都拖进去)))

录播文件写入磁带

整理完成后,我会把 COMPLETE_PATHS 里的文件夹移动到 F:\Video\000_写入暂存,等后面统一写入磁带。

等待写入磁带的录播暂存目录

这部分我的流程是:

  1. 把待写入文件移动到写入暂存目录。
  2. 先处理磁带,也就是擦带。
  3. 按磁带容量筛选本次要写入的文件。
  4. 格式化磁带。
  5. 把文件拖进 LTFSCopy,开始写入。

擦带

写入前先处理磁带。我这里会先擦带,主要是防止买来的磁带太脏,直接格式化使用高错误率。顺便也能验证这个磁带有没有什么奇怪的问题,防止直接格式化写到一半断带之类的,虽然我一次没遇见。

磁带工具里的擦带功能

绿色方框的地方就是我常用的擦带功能。2 是擦两次,erase 是开始。

当然,也可以实际全盘写入一遍随机数据,这也算擦带。这个功能在 test tab 内,具体还是问问磁带群群友吧。

这里有个注意点:擦带和写带的机器要分开。一般拿缺容、写入有问题的机器来做擦带机,不要直接拿好机器擦,防止脏磁带损坏好磁头。

准备文件

接着筛选本次要写入的文件。

比如我待写入的文件有 3T,但 L5 只能写 1.44T,那我就先筛选 1.3T 的文件,放入:

F:\Video\000_写入暂存\0x00_写入中(随时删除)

筛选本次写入磁带的文件

有时候我也不是一次性写满磁带。比如我的录播文件只有 500G 了,那写完后磁带还会剩约 900G

准备磁带并写入

先格式化磁带。

格式化磁带

然后把文件拖入 LTFSCopy

将文件拖入 LTFSCopy

最后点 写入磁带 按钮。

点击写入磁带按钮