name: skill-video-lapian description: 平台级短视频拉片技能:下载→转写→抽帧→方法论逐段分析→HTML报告→S3个人空间发布。动态身份参数(每个数字生命用自己飞马身份/S3空间),零硬编码。触发词:拉片、拆解视频、逐帧分析、视频复盘。 version: 1.0.0 author: Yuyang001 (FmodeAgent) license: MPL-2.0 copyright: "Copyright (c) 2026 未来飞马 Fmode"
命名规则(全平台技能遵守):
skill-<领域>-<功能>skill-video-lapian = 处理 video, 功能是 拉片(逐段逐帧拆解)。 本技能是平台级: 任何数字生命克隆本仓库后, 用自己的身份参数即可跑全流程, 产物发布到自己的 S3 个人空间。零硬编码凭据。
# 飞马身份(每个生命不同, 见 ${FMODE_IDENTITY_FILE:-$FMODE_DATA_DIR/fmode-identity.json})
export FEME_USERID=sr2WiPsDyQ # ← 换成你自己的 Parse objectId
export FEME_SESSION_TOKEN="r:..." # 飞马会话
export FEME_NEWAPI_TOKEN="sk-..." # API计费token(调VOC网关/转写/模型全走它)
export FEME_STUDIO_URL="http://server.fmode.cn:<studio端口>" # 自己的studio端点
# S3 发布:走平台内置免密钥通道(见 fmode-storage 技能),无需本地 AK/SK
export S3_BUCKET=<由平台云函数返回> S3_REGION=cn-north-4
export S3_ENDPOINT=https://obs.cn-north-4.myhuaweicloud.com
依赖: python3.8+(纯标准库, 无需 pip 装包) · ffmpeg/ffprobe · node/npx(fmode-listen)
身份参数优先级: FEME_* 环境变量 > fmode-identity.json > 兼容旧名(FMODE_*)。
S3 只能写 user/<自己的FEME_USERID>/ 前缀, 写他人前缀=越权。
REPO="${LAPIAN_REPO:-$(pwd)}" # 本仓库克隆到的目录
WD=/tmp/lapian-$(date +%s) # 工作目录
# 1. 拿视频(三选一): 抖音/视频号短链 / 视频ID / 已有本地文件
# 平台自动识别(douyin/weixin视频号/xiaohongshu/bilibili),用户贴什么链接都行:
python3 $REPO/scripts/fetch_video.py --url "https://v.douyin.com/xxxx/" --out-dir $WD
python3 $REPO/scripts/fetch_video.py --aweme-id 7677548065384877346 --out-dir $WD
python3 $REPO/scripts/fetch_video.py --local /path/to/video.mp4 --out-dir $WD --platform douyin
# 可选: 采评论区VOC(报告自动带上)
python3 $REPO/scripts/fetch_comments.py --aweme-id 7677548065384877346 --workdir $WD --max 100
# 2. 转写(fmode-listen → 讯飞LFASR, 分段时间戳, 毫秒)
python3 $REPO/scripts/transcribe.py --workdir $WD
# 3. 抽帧+豆包视觉逐帧点评(计费可控: --fps/--max-frames, 或 --skip-vision 只抽帧)
python3 $REPO/scripts/frame_analysis.py --workdir $WD --fps 0.15 --max-frames 12
# 4. 生成报告(暗色主题/手机自适应/分段点击跳转播放/词频情绪/VOC/相对路径)
python3 $REPO/scripts/build_report.py --workdir $WD --title "拉片分析:XXX"
# 5. 发布到自己的S3个人空间 → 得公开URL
python3 $REPO/scripts/publish.py --workdir $WD
# → https://s3.fmode.cn/user/<FEME_USERID>/report/lapian/douyin/<YYYYMMDD>/report.html
user/<userid>/report/lapian/<平台简称>/<YYYYMMDD>/
├── report.html ← 报告入口(资源全部相对路径, 目录自包含)
├── video.mp4 / audio.wav / transcript.json
├── frames/f0001.jpg...
└── assets/ # analysis.json / comments.json / meta.json
平台简称映射: douyin / xiaohongshu / weixin / bilibili / tiktok / kuaishou / shortdrama。 发布后对每个产物做 HEAD 校验, 全 200 才算成功。
references/methodology.md — 薛辉/郑经说/三把刀/小希/南门 技法表(点评提示词的来源)references/voc-api.md — VOC 网关接口(搜索/详情/评论, 解析层级与坑)references/s3-upload.md — S3 发布规范(virtual-hosted/ACL/相对路径/凭证回退)scripts/common.py — 身份参数解析/VOC调用/S3 SigV4 纯stdlib实现(不依赖boto3, OBS必须virtual-hosted寻址)scripts/build_report.py — 内置 mini-Jinja(stdlib), 无需安装 jinja2;
LLM 点评失败自动回退规则启发式, 永不中断流程核心函数逐步 JS/ESM 化(js/ 目录, 纯 ESM 零依赖, Node/浏览器双端), Python 只保留必须的系统级操作(ffmpeg/网络/文件IO):
js/type_classify.mjs — JSS-01 类型预判: 拉片前先判类型。特征打分制(标签3分/标题2分/口播1分/节奏指纹2分/AIGC强制信号4分), 类型体系见 TYPES(aigc_music/aigc_shortdrama/aigc_animal/talking_head/vlog/drama/food/knowledge), 输出 {primary, mode} → mode 路由: lapian(方法论文拉片, 原流程) | aigc_storyboard(AIGC分镜仿制拉片, 新流程)。CLI: node type_classify.mjs workdir → classify.jsonjs/aigc_storyboard.mjs — JSS-02 AIGC分镜+仿爆款长提示词: ①歌词结构检测(detectLyricStructure, 段落优先级: sections.json 人工精修 > 自动检测) ②视觉注册表(人物/场景/风格词频提取) ③分镜表合成(shot×frame×lyric, 每镜含 remake_prompt 生词提示: 主体|场景|运镜|风格) ④六维评分 ⑤buildLongPrompt 生成可直接投喂 AIGC 创作智能体的长提示词({{核心人物}}/{{核心产品或概念}}占位符换皮复刻)。CLI: node aigc_storyboard.mjs workdir → aigc_remake.json + aigc_prompt.mdjs/aigc_report.mjs — JSS-03 AIGC拉片报告: 暗色HTML, 分镜卡片(逐镜截图+生词提示+AI痕迹), 注册表/结构表/评分/长提示词/VOC全展示。CLI: node aigc_report.mjs workdir → aigc_report.htmlAIGC 拉片流程(mode=aigc_storyboard 时): 场景检测(select='gt(scene,0.10)' 双阈值, AIGC渐变转场阈值要低于真人剪辑) → 逐镜中点抽帧 → 批量视觉点评(4帧/批, AIGC专用提示词: char/scene/shot/style/aigc/desc 六字段) → 能量高潮分析(astats RMS 找副歌位) → 台词+唱段合成 sections.json → JSS-02/03。
https://s3.fmode.cn/<key>, 严禁用 OBS 原生域名 storage-s3-nkkj.obs.cn-north-4.myhuaweicloud.com —— 报告的相对路径资源(iframe视频/截图/数据)只有经 s3.fmode.cn 反代才能被浏览器正常加载, OBS 原生域名的链接在浏览器里会加载异常。此规则 2026-08-29 用户已沟通, 任何"公开URL生成点"(public_url/publish脚本/临时拼URL)一律走 s3.fmode.cn。上传/签名的 host 仍是 OBS 原生(协议层), 只有对外分发的链接用 s3.fmode.cn。https://s3.fmode.cn/user/<userid>/report/lapian/<平台>/<YYYYMMDD>/<报告名>.html(口播流程 report.html / AIGC 流程 aigc_report.html)。发布后必须逐产物 HEAD 200 校验通过(校验也用 s3.fmode.cn!)才算完成, 校验通过才发链接。sk- 开头且 Bearer 前缀完整VirtualHostDomainRequired → bucket 必须放进 Hostdoubao-seed-2-0-pro-260215(当前账号唯一可用豆包pro), DeepSeek 系无视觉https://channels.weixin.qq.com/platform/post/wxv_xxxx(网页端分享)https://finder.video.qq.com/251/...&vid=wxv_xxxx&...(客户端外链)--platform auto(默认)按 URL 判平台,wxv_ 前缀的视频 ID 会自动提取,用户不需要选平台weixin/channels/fetch_one_video → 失败降级 weixin/channels/fetch → 再失败降级直连模式(仅下载视频做拉片,不阻塞流程)title/desc/nickname/video_url(非 aweme 结构),summary 已做归一;评论区暂无视频号通道,拉片报告的 VOC 区会标注"该平台暂不支持评论区采集"实测路径: 拿到真实视频号链接后先跑一次 fetch_video.py --url <链接> --out-dir /tmp/test-wx,确认下载链路通,再给用户出报告
抖音下载铁律(2026-08-29 三次坏文件实测): play_addr 流对非APP客户端返回损坏流(moov 声称259s但 mdat 截断, ffprobe 时长正常但解码报 Invalid NAL unit size)。必须用 download_addr.url_list[0] + curl 带浏览器UA/Referer 下载(该流是高码率 1958kbps 版本, 时长可能与 play 版差几秒)。唯一可信校验 = ffmpeg -xerror -i 全量解码, ffprobe 时长正常/尾部分段解码都可能假阴性。下载会话中断后转写/抽帧全部作废重跑(音频只覆盖已下载部分)。
孤儿进程陷阱: 会话中断后下载进程可能还活着继续写文件, 恢复会话先 ps aux | grep fetch_video + 隔几秒对比文件大小, 确认没有写入者再动手, 避免双写或误判。
报告点评 LLM 空响应: build_report.py 内置 call_llm 走 deepseek-v4-flash 会路由到 reasoning 模型, reasoning 吃满 max_tokens 导致 content 为空。解法: 自己(编排 agent)按 methodology.md 逐段写点评 → 写 workdir/llm_out.json(格式: {"segments":[{"i","techniques","func","comment","reuse"}...], "structure_summary"}) → build_report.py 自动优先采用(手动 > LLM > 启发式)。
S3 发布改用平台内置通道:优先用 fmode-storage 技能的 uploader.mjs put(免密钥,走平台云函数签发上传地址)。不要自建跳板机/不要使用任何外部 AK-SK;密钥类信息一律由平台托管,技能不自持也不索取。