model-first 影视译制质检 + 直接出片 CLI。
redub 把一条影视母带从「需求澄清 → 大模型全片检查(合规 + 所有音视频缺陷)+ 确定性检测兜底
→ 有问题就整段剪掉(音视频同步)或派单重录 → 直接出成片」的全流程收进一条命令 redub run recipe.yaml,
产出成片 + 甲方 QC 报告 + 重录派单。为影视出海(多语种译制)打造。
把下面这句话给任何 AI(Claude Code / Cursor / …),它就能下载并会用 redub:
redub 是一个 model-first 的影视译制质检+直接出片 CLI。安装:
`git clone https://github.com/EricSun0218/redub && cd redub && pip install -e ".[all,brain]"`
(另需 `brew install ffmpeg`)。云端多模态大脑**可插拔、契约不绑厂商**;参考实现接阿里云百炼:
把 key 写进 `~/.redub/dashscope.env`(内容 `DASHSCOPE_API_KEY=sk-xxx`)。核心命令
`redub run <recipe.yaml>` 一条龙跑「需求澄清 → 云端大脑全片查合规+所有音视频缺陷
(确定性检测兜底)→ 有问题就剪(音视频同步)或派单重录 → 直接出成片」。
`redub --help` 看全部子命令,详见仓库 README.md。
一句话:云端大脑是主检查,确定性检测兜底,有问题就剪(音频也可派单重录),直接出成片。
- model-first:整片切成视频段喂可插拔云端多模态大脑,一遍同时查合规违规 + 所有画面/声音缺陷。 大脑没有"单特征盲区",它是全面覆盖那一层。大脑契约不绑厂商——参考实现接阿里云百炼,可换。
- 确定性兜底:本地 FFmpeg / faster-whisper / VAD / 声纹 做帧精确检测,抓大脑忽略的单帧级缺陷、 给帧精确时码。
- 直接出片:大脑判了就是处置,自动过闸门,成片直接产出(exit 0),不卡人审。宁可错杀。
- 有问题就剪:任何问题一律整段剪掉(视频剪哪儿,对应音频同步剪);音频问题另可派单重录。
- 合规可配:合规规则在需求澄清时展示给你,你在对话里告诉 AI 就能改(不用手编配置)。
git clone https://github.com/EricSun0218/redub
cd redub
pip install -e ".[all,brain]" # all=asr+ocr+comply 本地检测;brain=可插拔云端大脑
brew install ffmpeg # FFmpeg 8.x,不走 pip分级安装:核心(pip install -e .)只需 numpy/pyyaml/openpyxl,够跑 doctor/ingest/qc/trim/render;
重型 ML 按需装 .[asr](语种/漏配/声纹)、.[ocr](画面文字)、.[comply](NudeNet)、.[brain](云端大脑)。
云端大脑凭据(可插拔、不绑厂商;下为参考实现=阿里云百炼,用 model-first 主检查必需):
mkdir -p ~/.redub && cat > ~/.redub/dashscope.env <<'EOF'
DASHSCOPE_API_KEY=sk-你的云端多模态大脑key
DASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
EOF
chmod 600 ~/.redub/dashscope.env # 库外存放,绝不进 git换厂商:实现
redub/brain/contract.py的Brain契约再在get_brain注册即可,主流程不改。
redub doctor 自检环境(ffmpeg / 依赖 / 大脑凭据)。
一条命令跑完整流程:
redub run recipe.yaml最简 recipe(直接出片):
job: demo
source: "/path/to/母带.mp4"
target_lang: en
stages: [ingest, clarify, qc, comply, process, sign, render]
clarify: { region: 中东 } # 目标播出区域(定合规尺度)
qc: { clip_s: 30, concurrency: 3 } # 大模型全片检查 + 确定性兜底
render: { out: work/成片.mp4, cut_defects: true }输出:成片(绝对路径打印在末尾)、--emit-redub-order order.json 出重录派单、report: 出甲方 QC 表。
退出码:0=出片成功 · 10=待重录(派单已出,配音棚补录后 Pass-2 出片)· 20=致命阻断 · 4=合规未审。
① 需求澄清 读需求书 → 目标播出地区/期望轨/问题窗口;**展示合规规则**给你确认
② 全片检查 大模型全片查(合规+所有A/V缺陷,主) + 确定性 signal QC(兜底) → 合并去重
③ AI 处理 每个问题按下面「处置规则」自动处理
④ 派单 处理不了的音频问题 → 配音棚重录工单
⑤ 直接出片 帧精确剪+整合 → 成片(有待重录则 Pass-1 暂停,重录回填后 Pass-2 出)
处置规则(核心):
| 问题 | 处置 |
|---|---|
| 视频缺陷(黑屏/红蓝绿屏/彩条/坏帧/冻结/混叠/色度) | 整段剪掉(音视频同步) |
| 合规违规(露点/国旗/争议地图/政治/宗教/极端血腥) | 整段剪掉 |
| 配音错位(timing) | 自动对位(conform) |
| 漏录/改词/读错/语种错/角色撞戏 | 派单重录 |
| 落在剪辑区间内的音频问题 | 随画面一起剪,不重录 |
| 未翻译画面文字 | 字幕翻译 |
三条铁律:①模型判即处置,直接出片,不卡人审;②合规只判真正违规(男性赤裸上身/泳装/亲吻不算裸露); ③剪=帧精确+音视频同步(无接缝鬼影)。
云端大脑全片 clip pass(主检查) — redub/qc/filmwatch.py:整片切连续视频段传可插拔云端大脑,
一遍报出合规违规 + 所有 A/V 缺陷,片内相对秒由 CLI 反算绝对时码。
确定性 signal QC(兜底) — redub/qc/signal.py,11 检测项:
- 视频:黑场 · 彩条 · 异常颜色(红蓝绿屏)· 坏帧跳帧(YDIF,含孤立性判据不误报硬切)· 混叠重影帧(blendframe)· 纯色度坏帧(chromabad)· 场景切换 · 横向撕裂(tearframe,按需)
- 音频:静音 · 缺配音(missing_dub,音频有声但无对白)
配音质检 — redub run 的 qc-dub 阶段:大模型词句层(改词/读错/漏字,需 dub 的 ASR)+
确定性(漏配 / 配音错位 timing / 声纹角色撞戏)。语种=langmap,未翻译画面文字=ocr-translate。
合规规则存 redub/policies/<region>.yaml(通用 / 中东 / 中国 / 非洲),每类规则含
counts(什么算违规)+ excludes(什么明确不算,防误判)。
你不用手编 yaml——这是 AI 操作的 CLI,直接告诉 AI 就能改:
- 「男性上身不算裸露」→ AI 把它写进 nudity 的 excludes
- 「酒也要剪」→ AI 把 alcohol 挪进 counts
- 「非洲宗教从宽」→ AI 改 africa.yaml
需求澄清(clarify)阶段会打印本区完整规则给你看,确认/调整后再往下处理。
redub run recipe.yaml [--emit-redub-order order.json] # 全流程编排(一条命令)
redub filmwatch SRC --region 中东 --with-deterministic # 大模型全片查 + 确定性兜底
redub qc SRC [--checks blackframe,silence,...] # 确定性 signal QC
redub qc-dub --dub d.wav --script s.xlsx --asr a.json # 配音质检
redub doctor # 环境自检
redub --help # 全部子命令 redub run recipe.yaml(DAG 编排)
│
需求澄清 → 全片检查(大模型主 + 确定性兜底 merge)→ AI处理 → 派单 → 直接出片
│
大模型只判、不估绝对时码(片内相对秒 + clip 起点由 CLI 反算)
- 大脑契约:
redub/brain/(contract + dashscope_omni + mock),get_brain/run_asks。 - 编排:
redub/orchestrator.py(STAGE_ORDER+ 各_stage_*)。 - 详见
ARCHITECTURE.md。
无凭据 / 离线时,确定性核心(FFmpeg/ASR/VAD/信号检测)照常跑;大模型环节退回本地检测 + 人审兜底(合规未审 fail-closed,绝不静默放行)。
MIT。见 LICENSE。