Files
biliup-next/docs/publish-output-examples.md

322 lines
9.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 发布输出示例与流程说明
本文档面向使用者说明 `biliup-next` 的主流程、输入输出、当前已实现功能,以及一次多段同场直播发布后的示例文案。
## 项目功能
`biliup-next` 将一场直播录播拆成两个最终发布目标:
- 直播完整版:由外部流程或人工上传到 B 站,本项目负责记录/绑定它的 BV 号,并给它补充置顶时间轴评论、加入完整版合集。
- 歌曲纯享版:由本项目从直播录播中识别歌曲、切出歌曲片段、合并发布为一个分 P 视频,并给它补充置顶歌单评论、加入纯享版合集。
当前主链路:
```text
stage 输入视频
-> ingest 导入并归并 session
-> transcribe 语音转字幕
-> song_detect 识别歌曲
-> split 切出歌曲片段
-> publish 发布歌曲纯享版
-> comment 发布/置顶评论
-> collection 加入合集
```
## 输入
最常见输入是把录播视频放入 `data/workspace/stage/`
支持的形式:
- 单个视频文件:一场直播只有一个录播文件。
- 多个视频文件:同一场直播被分成多段录播文件。
- 浏览器上传:通过控制台上传到 stage。
- 本机复制:通过控制台把服务器上的文件复制到 stage。
输入文件名会用于推测主播和直播开始时间,例如:
```text
王海颖唱歌录播 04月19日 22时10分.mp4
王海颖唱歌录播 04月19日 23时05分.mp4
王海颖唱歌录播 04月20日 00时01分.mp4
```
## Session 归并
同一主播、时间接近的多个录播片段会归入同一个 session。
同一 session 的行为:
- 只发布一个歌曲纯享版 BV。
- 多段录播的歌曲会按时间顺序聚合。
- 评论按 `P1``P2``P3` 分段展示。
- 歌曲序号全局递增,不在每个 P 内重新从 1 开始。
示例:
```text
P1:
1. 程艾影 — 赵雷
2. 钟无艳 — 谢安琪
P2:
3. 慢慢喜欢你 — 莫文蔚
P3:
4. 空白格 — 蔡健雅
```
## BV 获取
### 歌曲纯享版 BV
歌曲纯享版由本项目调用 `biliup upload` 发布。
发布成功后,项目会从 `biliup` 输出中提取 BV 号,并写入当前 session 目录:
```text
bvid.txt
```
这个 BV 会用于:
- 纯享版评论发布。
- 完整版评论顶部反向链接。
- 纯享版合集同步。
### 直播完整版 BV
完整版 BV 可以来自三种方式:
- 控制台手动绑定。
- API/webhook 传入。
- `biliup list` 标题匹配。
`biliup list` 会同时接受 `开放浏览``审核中` 状态。完整版视频只要上传后生成了 BV即使仍在审核中也可以被写入纯享版简介、动态和评论互链。
成功解析后会写入:
```text
full_video_bvid.txt
```
默认标题匹配是保守的精确匹配:会先去掉空格、标点、括号、冒号等,只保留中文、英文、数字,再比较标题是否相等。
如果 `allow_fuzzy_full_video_match=false`,不会做包含式模糊匹配。为了避免误匹配,推荐在完整版上传完成后手动绑定 BV。
## 示例场景
假设本次直播由三段录播组成:
```text
王海颖唱歌录播 04月19日 22时10分
王海颖唱歌录播 04月19日 23时05分
王海颖唱歌录播 04月20日 00时01分
```
假设 BV 绑定结果如下:
```text
本次直播完整版BVFULLCURR
本次歌曲纯享版BVPURECURR
上次直播完整版BVFULLPREV
```
假设识别出的歌曲如下:
```text
P1:
00:06:32 程艾影 — 赵雷
00:14:45 钟无艳 — 谢安琪
P2:
00:20:57 慢慢喜欢你 — 莫文蔚
P3:
00:27:16 空白格 — 蔡健雅
```
## 歌曲纯享版标题
当前模板:
```text
【{streamer} (歌曲纯享版)】 {date} 共{song_count}首歌
```
示例:
```text
【王海颖 (歌曲纯享版)】 04月19日 22时10分 共4首歌
```
## 歌曲纯享版简介
当前模板会保持简介较短,完整歌单放到置顶评论中,避免 B 站简介截断。
示例:
```text
王海颖 04月19日 22时10分 歌曲纯享版。
完整歌单与时间轴见置顶评论。
直播完整版https://www.bilibili.com/video/BVFULLCURR
上次直播https://www.bilibili.com/video/BVFULLPREV
本视频为歌曲纯享切片,适合只听歌曲。
```
如果某个链接暂时没有 BV项目会自动移除对应的空链接行。
## 歌曲纯享版动态
示例:
```text
王海颖 04月19日 22时10分 歌曲纯享版已发布。完整歌单见置顶评论。
直播完整版https://www.bilibili.com/video/BVFULLCURR
上次直播https://www.bilibili.com/video/BVFULLPREV
```
## 歌曲纯享版置顶评论
纯享版评论主要给听歌用户看,不带歌曲时间轴,只展示歌名、歌手和互链。
默认由 `runtime/upload_config.json``comment_template.split_header``comment_template.split_part_header``comment_template.split_song_line` 生成。
示例:
```text
当前视频:歌曲纯享版:只保留本场直播中的歌曲片段,歌单见下方。
直播完整版https://www.bilibili.com/video/BVFULLCURR (完整录播,含聊天/互动/完整流程)
上次纯享https://www.bilibili.com/video/BVPUREPREV (上一场歌曲纯享版)
P1:
1. 程艾影 — 赵雷
2. 钟无艳 — 谢安琪
P2:
3. 慢慢喜欢你 — 莫文蔚
P3:
4. 空白格 — 蔡健雅
```
## 直播完整版置顶评论
完整版评论主要给看完整录播的用户跳转歌曲纯享版,并提供完整时间轴。
默认由 `runtime/upload_config.json``comment_template.full_header``comment_template.full_part_header``comment_template.full_timeline_line` 生成。
示例:
```text
当前视频:直播完整版:保留本场完整录播内容,歌曲时间轴见下方。
歌曲纯享版https://www.bilibili.com/video/BVPURECURR (只听歌曲看这里)
上次完整版https://www.bilibili.com/video/BVFULLPREV (上一场完整录播)
P1:
1. 00:06:32 程艾影 — 赵雷
2. 00:14:45 钟无艳 — 谢安琪
P2:
3. 00:20:57 慢慢喜欢你 — 莫文蔚
P3:
4. 00:27:16 空白格 — 蔡健雅
```
## 评论格式配置
评论格式可以像标题、简介、动态一样通过 `runtime/upload_config.json` 修改:
```json
"comment_template": {
"split_header": "当前视频:歌曲纯享版:只保留本场直播中的歌曲片段,歌单见下方。\n直播完整版{current_full_video_link} (完整录播,含聊天/互动/完整流程)\n上次纯享{previous_pure_video_link} (上一场歌曲纯享版)",
"full_header": "当前视频:直播完整版:保留本场完整录播内容,歌曲时间轴见下方。\n歌曲纯享版{current_pure_video_link} (只听歌曲看这里)\n上次完整版{previous_full_video_link} (上一场完整录播)",
"split_part_header": "P{part_index}:",
"full_part_header": "P{part_index}:",
"split_song_line": "{song_index}. {title}{artist_suffix}",
"split_text_song_line": "{song_index}. {song_text}",
"full_timeline_line": "{song_index}. {line_text}"
}
```
字段含义:
- `split_header`:纯享版评论顶部说明。
- `full_header`:完整版评论顶部说明。
- `split_part_header` / `full_part_header`:多片段 session 的分段标题,例如 `P1:`
- `split_song_line`:从 `songs.json` 生成纯享歌单时的单行格式。
- `split_text_song_line``songs.json` 不可用时,从 `songs.txt` 兜底生成纯享歌单的单行格式。
- `full_timeline_line`:完整版时间轴评论的单行格式。
常用变量:
- `{current_full_video_link}`:本场直播完整版链接。
- `{current_pure_video_link}`:本场歌曲纯享版链接。
- `{previous_full_video_link}`:上一场直播完整版链接。
- `{previous_pure_video_link}`:上一场歌曲纯享版链接。
- `{part_index}`P 分段序号。
- `{song_index}`:歌曲全局序号。
- `{title}` / `{artist}` / `{artist_suffix}`:歌曲标题、歌手、带分隔符的歌手后缀。
- `{song_text}`:不带时间戳的歌曲文本。
- `{line_text}`:原始时间轴行,通常包含时间戳。
如果评论头部某一行包含空链接变量,例如 `{previous_full_video_link}` 为空,这一整行会自动省略。
## 合集同步
项目维护两个合集目标:
- 合集 A直播完整版。
- 合集 B歌曲纯享版。
当前配置中的示例 ID
```text
直播完整版合集7196643
歌曲纯享版合集7196624
```
合集同步完成后,如果启用了清理策略,项目可以删除本地原视频或切片视频以节省空间。当前默认不删除。
## 幂等与重试
项目会在 session 目录写入标记文件,避免重复上传和重复评论。
常见标记:
```text
bvid.txt
full_video_bvid.txt
upload_done.flag
comment_split_done.flag
comment_full_done.flag
collection_a_done.flag
collection_b_done.flag
```
发布阶段的关键行为:
- 首批最多上传 5 个分 P。
- 超过 5 个分 P 时,后续通过 append 追加。
- 已经写入 `bvid.txt` 后,重试会优先 append 到已有视频,而不是重新发布。
- `publish_progress.json` 记录 append 进度,避免重试时重复追加已完成批次。
评论阶段的关键行为:
- 同一 session 只由最早片段负责聚合评论。
- 非 anchor 片段进入评论步骤时会跳过实际发评。
- 这样可以避免同一场直播的多个片段重复发布相同评论。
## 使用建议
发布前建议确认:
- stage 中的视频文件名能解析出主播和时间。
- `runtime/upload_config.json` 中标题、简介、动态符合预期。
- 完整版上传完成后,尽量手动绑定 `full_video_bvid`
- worker 重启前确认已有 `bvid.txt``publish_progress.json` 是否符合当前发布进度。
- 如需自动匹配完整版 BV确认 `biliup list` 中完整视频标题与任务标题标准化后相等。