视频号违规诊断(sph-violation-checker)
零配置可用:上传视频即可诊断,无需任何 API 凭据或浏览器登录。
- 口播转写:自动三级降级(本地 Whisper → 腾讯云 ASR → 用户粘贴文案)
- 已发布作品审计:粘贴模式为主入口(零门槛),浏览器抓取为高级选项
- 拍摄脚本预审:先脚本后拍摄,文字稿+分镜在拍摄前扫雷,改完再拍
环境
- Python 解释器(venv,已装 opencv/easyocr/imageio-ffmpeg/requests/whisper):
C:/Users/Administrator/.workbuddy/binaries/python/envs/default/Scripts/python.exe - 脚本目录:本技能
scripts/下 diagnose.py— 一键诊断流水线(抽帧+ASR+OCR+词库扫描,推荐优先使用)precheck_script.py— 拍摄脚本预审(文字稿扫描+分镜画面风险关键词)extract_frames.py— 单独抽帧audio_asr.py— 口播转写(三级自动降级)ocr_frames.py— 帧文字 OCRscan_words.py— 违禁词扫描generate_report.py— Word 诊断报告生成fetch_published.py— 已发布作品抓取/输入器- 词库:
references/banned_words.json(8大类违禁词+正则模式) - 分镜风险表:
references/shot_risk.json(分镜画面风险关键词,模式三用) - 规则库:
references/violation_rules.md(画面违规判定 + 报告格式 + 判定原则 + 运营行为违规 + 脚本预审要点,诊断前必读) - 场景选择入口:
ui/start.html(双击浏览器打开,三种诊断场景可视化选择 + 操作指引 + 可复制话术;桌面已有副本"视频号内容安全诊断台.html")。用户问"界面入口""怎么选场景"时,提示打开此文件或直接用 present_files 展示
模式一:发布前预审(用户上传视频文件)
Step 0 收集输入
必需:视频文件路径。
可选(有则扫,无则跳过,不追问):
1. 计划发布的标题/简介/话题标签(如有)
2. 账号行业类目(如招聘/食品/教育——影响资质类判定)
3. 口播文案(用户已有文案可直接粘贴,跳过ASR)
Step 1 一键诊断(推荐)
<python> scripts/diagnose.py <视频路径> --frames 12
脚本自动完成:抽帧 → OCR画面文字 → 口播ASR(自动选择引擎)→ 违禁词扫描 → 输出统一JSON
- Whisper 首次运行自动下载 tiny 模型(~75MB),之后离线可用
- 用户已提供口播文案时:加 --paste-text "文案内容" 跳过 ASR
- 输出 JSON 包含:视频信息/帧列表/OCR文字/ASR转写/扫描命中/全量文本
Step 2 画面违规分析(核心,用多模态能力)
用 Read 工具逐帧查看 JSON 中 video_meta.frames_dir 下的 frame_*.jpg 图片,对照 references/violation_rules.md 第二部分逐项检查:
- 二维码/手机号/微信号等导流元素(2.1)
- 其他平台水印/搬运痕迹(2.2)
- 低俗暴露/危险动作(2.3)
- 伪造官方样式/虚假对比(2.4)
- 未成年人相关(2.6)
同时记录画面中出现的所有文字(字幕、贴纸、标题条)。
注意:diagnose.py 已跑过 OCR 和词库扫描,JSON 中 ocr_text 和 scan.hits 可直接用。此步重点是 OCR 漏检的画面语义分析(如二维码/水印/低俗画面,OCR 识别不了但多模态能看)。
Step 3 综合判定与报告
- 汇总:Step 2 画面发现 + JSON 中的 scan.hits + ocr_text + asr.transcript
- 按
references/violation_rules.md第六部分格式输出诊断报告(对话中直接输出,用户偏好简洁结构化) - 判定原则见规则库第七部分:不确定的列"提示";多重命中升级;语境豁免仍提示
- 每条命中给出:位置(时间点/标题/画面)、风险等级、具体内容、可直接使用的替换文案(改写示例必须给出前后对照)
Step 4 生成 Word 诊断报告(可选,用户要求时执行)
- 用 Python 构造诊断 JSON(避免手写引号转义问题):
<python> -c "
import json
data = { ... } # 诊断数据
json.dump(data, open('<output>.json', 'w', encoding='utf-8'), ensure_ascii=False, indent=2)
"
JSON 字段:
- video: { filename, duration, resolution, fps, account_category }
- diagnosis: { date, risk_level, risk_emoji, summary, dimensions_checked }
- violations: [{ no, location, type, risk_level, risk_emoji, content, suggestion }]
- checklist: [{ priority: "必改"/"建议", item }]
- rewrites: [{ original, revised }]
- compliant_items: [str]
- category_risk: str(可选)
- publish_advice: str
- 生成 .docx:
<python> scripts/generate_report.py <diagnosis.json> --output <报告路径.docx>
输出到用户桌面,文件名格式:视频号违规诊断报告_<视频简称>.docx
- 用 present_files 展示 .docx 文件。
模式二:已发布作品审计(检查线上作品 + 运营行为)
用户要求检查已发布作品、账号信息、或询问运营行为(频繁转发等)是否违规时进入此模式。
Step A0 收集输入(粘贴优先,零门槛)
推荐方式:用户直接粘贴已发布作品的标题/描述/标签,agent 直接扫描,无需任何配置。
可选方式:用户提供视频号主页 URL,用浏览器自动抓取(需 playwright-cli + Edge + 微信扫码)。
一次性问齐(用户可以只给标题描述,其余选答):
1. 作品标题/描述/标签(粘贴即可,一条或多条都行)
2. 运营行为情况(选答):近期发布频率、转发习惯、是否多账号分发
Step A1 违禁词扫描(粘贴模式,默认)
用户粘贴的作品文本直接拼接后扫描:
<python> scripts/scan_words.py --text "<标题+描述+标签拼接>" --source 作品<N>
如用户提供了文件(.txt),也可用:
<python> scripts/fetch_published.py --paste-file <文件路径> --output works.json
文件格式:每条作品用 --- 分隔,字段用 标题:/描述:/标签: 前缀。
Step A1-alt 浏览器抓取(高级,用户主动要求时)
<python> scripts/fetch_published.py <视频号主页URL> --output published_works.json
- 脚本用 playwright-cli + Edge 打开主页(有头模式),首次访问需用户微信扫码登录
- 抓取失败时脚本会截图,agent 用 Read 看截图人工提取
- 此模式为可选项,不是必经步骤
Step A2 运营行为风险评估
根据用户 Step A0 提供的运营情况,对照规则库第八部分逐项评估:
- 频繁转发/分享(8.1)
- 高频发布(8.2)
- 删除重发(8.3)
- 评论区行为(8.4)
- 矩阵号运营(8.6)
- 数据造假(8.8)
用户未提供运营信息时,输出"运营行为自查清单"供用户自行核对。
Step A3 综合报告
- 汇总:内容扫描命中 + 运营行为风险
- 按规则库第九部分输出审计报告
- 多条作品同类问题 → 给出批量修改方案
- 可按 Step 4 生成 Word 报告
模式三:拍摄脚本预审(先脚本后拍摄)
用户提供拍摄脚本(口播文案/字幕/标题/标签/分镜),要求"脚本预审""拍前检查""看看脚本能不能拍"时进入此模式。此模式在拍摄前执行,成本最低,推荐优先走。
Step C0 收集脚本(一次问齐,用户给多少算多少)
- 口播文案(必填,没有就跳过)
- 分镜描述(每镜头一行,如"镜头1 企业门口全景")
- 字幕/标题/标签(选填,有则扫)
- 账号行业类目(选填,影响资质类判断)
格式说明:直接粘贴即可,脚本自动按 口播:/字幕:/标题:/标签:/分镜: 前缀分区;无前缀的整段视为口播。不需要用户理解格式,粘原始脚本也能扫。
Step C1 跑预审脚本
<python> scripts/precheck_script.py --text "<脚本全文>" --source <脚本名>
或从文件读:
<python> scripts/precheck_script.py --text-file <脚本文件.txt> --source <脚本名>
脚本自动完成:分区 → 文字类(口播/字幕/标题/标签)跑词库扫描 → 分镜类叠加画面风险关键词扫描(shot_risk.json)→ 输出 summary(overall: block/review/pass)。
Step C2 分镜人工复核(关键)
对照 references/violation_rules.md 第十部分逐镜头复核脚本没写明的隐含风险:
- 背景文字(10.2):门牌/横幅/锦旗上的绝对化用语、店招电话地址
- 场景资质(10.2):医疗/金融/教育场景是否需要账号类目认证
- 演示动作(10.2):危险动作、产品功效夸大演示
- 服装造型(10.2):制服冒充权威、衣着暴露
- 结尾引导(10.2):站外导流词(公众号/加微信)必须换站内动作
- 关键词误伤处理:命中"最""烟"等词时看上下文(如"最近""烟台"属误伤,不报);但"宁可提示不可漏报"的项列"拍摄时注意"
Step C3 输出预审报告(对话中直接输出)
按规则库 10.3 格式:
1. 总体结论:🔴 先改再拍 / 🟡 拍摄时注意 / 🟢 可直接拍摄
2. 文字稿命中表:分区 / 风险 / 问题 / 修改建议(每条给替换文案)
3. 分镜画面风险表:镜头 / 风险 / 问题 / 拍摄注意(给具体规避方案,如"镜头1门牌电话用绿植遮挡")
4. 修改后文案示例:前后对照,可直接抄
5. 结尾注明"本诊断为预审参考,平台审核以实际为准"
Step C4 后续衔接
- 预审通过 → 拍摄 → 成片后仍建议用模式一过一遍(现场道具可能新引入违规)
- 用户要求 Word 版 → 按 Step 4 流程生成报告
输出要求
- 综合风险等级只用一档:🔴 高危(先改再发)/ 🟡 中风险(建议修改)/ 🟢 低风险(可发布)
- 修改清单分【必改】和【建议】两级
- 改写示例要完整句子,不要只说"删除XX"
- 报告结尾注明"本诊断为预审参考,平台审核以实际为准"
维护
- 词库按平台规则变化更新
references/banned_words.json(词库文件头部有版本记录) - 用户属招聘就业行业(拉勾计划),招聘类视频注意:岗位薪资表述、企业名称授权、招聘信息时效