diff --git a/01_卡资(金)/金盾_数据安全/存客宝副本管理/SKILL.md b/01_卡资(金)/金盾_数据安全/存客宝副本管理/SKILL.md new file mode 100644 index 00000000..9b187a18 --- /dev/null +++ b/01_卡资(金)/金盾_数据安全/存客宝副本管理/SKILL.md @@ -0,0 +1,24 @@ +--- +name: 存客宝副本管理 +description: 存客宝副本管理 Skill 已迁至存客宝副本项目内,并改名为「存客宝开发 AI」。本文件为迁移说明;实际 Skill 见存客宝副本仓库 .cursor/skills/存客宝开发AI/SKILL.md +group: 金 +triggers: 存客宝副本、cunkebao_副本、存客宝开发文档、副本代码管理 +owner: 金盾 +version: "1.0" +updated: "2026-03-02" +--- + +# 存客宝副本管理(已迁移 · 改名为存客宝开发 AI) + +**本 Skill 已迁入存客宝副本项目内,并改名为「存客宝开发 AI」,以副本为主,专门管理该项目的开发文档。** + +## 实际 Skill 位置(主) + +请在存客宝副本项目中阅读与执行: + +- **路径**:`/Users/karuo/Documents/开发/存客宝/cunkebao_副本/.cursor/skills/存客宝开发AI/SKILL.md` +- **说明**:在 Cursor 中打开存客宝副本(cunkebao_副本)项目时,将自动加载该项目下的「存客宝开发 AI」Skill;所有开发文档管理以该仓库内 `开发文档/`(仅 1~10 目录)为准。 + +## 卡若AI 技能注册表 + +SKILL_REGISTRY 中「存客宝副本管理」已指向上述副本内「存客宝开发 AI」路径,以便在卡若AI 上下文中仍可引用同一份 Skill 内容。 diff --git a/01_卡资(金)/金盾_数据安全/存客宝副本管理/douyin_video_to_text.sh b/01_卡资(金)/金盾_数据安全/存客宝副本管理/douyin_video_to_text.sh new file mode 100755 index 00000000..a3795315 --- /dev/null +++ b/01_卡资(金)/金盾_数据安全/存客宝副本管理/douyin_video_to_text.sh @@ -0,0 +1,66 @@ +#!/bin/bash +# 抖音/任意视频 → 命令行提取文字(优先用本机 MLX-Whisper) +# 用法: +# 本地视频: ./douyin_video_to_text.sh /path/to/video.mp4 +# 抖音链接: ./douyin_video_to_text.sh "https://v.douyin.com/xxx" [cookie.txt] +# 输出:卡若Ai的文件夹/导出/ 下同名的 .txt + +set -e +OUT_ROOT="/Users/karuo/Documents/卡若Ai的文件夹/导出" +mkdir -p "$OUT_ROOT" + +# 优先用本机 MLX-Whisper(Apple Silicon 更快) +MLX_WHISPER="/Users/karuo/miniforge3/envs/mlx-whisper/bin/mlx_whisper" +if [[ -x "$MLX_WHISPER" ]]; then + TRANScribe="$MLX_WHISPER" + TRANScribe_OPTS=(--language zh -f txt) +else + TRANScribe="whisper" + TRANScribe_OPTS=(--language zh --output_format txt --verbose False) +fi + +if [[ -z "$1" ]]; then + echo "用法: $0 <视频文件路径或抖音链接> [cookie.txt]" + echo "示例: $0 ./路飞直播回放.mp4" + echo "示例: $0 'https://v.douyin.com/Wv8TNVjwduU/' cookie.txt" + exit 1 +fi + +INPUT="$1" +COOKIE="$2" +WORK="/tmp/douyin_extract_$$" +mkdir -p "$WORK" +trap "rm -rf '$WORK'" EXIT + +if [[ -f "$INPUT" ]]; then + VIDEO="$INPUT" + BASE=$(basename "$INPUT" | sed 's/\.[^.]*$//') +else + BASE="douyin_$(date +%H%M%S)" + OPTS=(-o "$WORK/%(id)s.%(ext)s" --no-warnings) + if [[ -n "$COOKIE" && -f "$COOKIE" ]]; then + OPTS+=(--cookies "$COOKIE") + else + echo "提示: 抖音需 Cookie。可从浏览器导出 cookie.txt 后: $0 '$INPUT' cookie.txt" + fi + yt-dlp "${OPTS[@]}" "$INPUT" || { echo "下载失败,请提供 cookie 或本地视频文件"; exit 1; } + VIDEO=$(find "$WORK" -type f \( -name "*.mp4" -o -name "*.webm" -o -name "*.mkv" \) | head -1) + [[ -z "$VIDEO" ]] && { echo "未找到下载的视频"; exit 1; } +fi + +echo "正在转写(${TRANScribe}): $VIDEO" +if [[ "$TRANScribe" == "$MLX_WHISPER" ]]; then + "$MLX_WHISPER" "$VIDEO" "${TRANScribe_OPTS[@]}" -o "$WORK" --output-name "$BASE" + TXT="$WORK/${BASE}.txt" +else + "$TRANScribe" "$VIDEO" "${TRANScribe_OPTS[@]}" --output_dir "$WORK" + TXT=$(find "$WORK" -name "*.txt" | head -1) +fi +if [[ -n "$TXT" && -f "$TXT" ]]; then + FINAL="$OUT_ROOT/${BASE}_转写.txt" + cp "$TXT" "$FINAL" + echo "已保存: $FINAL" + cat "$FINAL" +else + echo "未生成 txt(若视频无音轨会失败)"; exit 1 +fi diff --git a/03_卡木(木)/木叶_视频内容/抖音视频解析/SKILL.md b/03_卡木(木)/木叶_视频内容/抖音视频解析/SKILL.md index 96daac32..6715a55d 100644 --- a/03_卡木(木)/木叶_视频内容/抖音视频解析/SKILL.md +++ b/03_卡木(木)/木叶_视频内容/抖音视频解析/SKILL.md @@ -41,19 +41,26 @@ updated: "2026-02-22" 4. **提取视频 URL**:从 `` 或 JSON 中获取 CDN/Play 链接 5. **下载视频**:requests 流式下载,优先无水印链接(`playwm`→`play`) -### 一键命令 +### 一键命令(命令行粘贴链接即提取) ```bash +# 推荐:仅要页面文案,不下载视频(粘贴链接→终端输出文案+保存 .txt) cd /Users/karuo/Documents/个人/卡若AI/03_卡木(木)/木叶_视频内容/抖音视频解析/脚本 -python3 douyin_parse.py "https://v.douyin.com/SpVK8mlOUUo/" +./douyin_caption_only.sh "https://v.douyin.com/xxx" -# 仅解析不下载 +# 或用 Python 直接调 python3 douyin_parse.py "https://v.douyin.com/xxx" --no-download +# 解析并下载视频 +python3 douyin_parse.py "https://v.douyin.com/xxx" + # 指定输出目录 python3 douyin_parse.py "https://v.douyin.com/xxx" -o /path/to/output ``` +- **仅文案**:`douyin_caption_only.sh` 或 `--no-download`,不下载视频。 +- **视频内语音转文字**:用 `01_卡资(金)/金盾_数据安全/存客宝副本管理/douyin_video_to_text.sh`(需下载后 Whisper 转写)。 + --- ## 相关文件 diff --git a/03_卡木(木)/木叶_视频内容/抖音视频解析/参考资料/GitHub项目参考_抖音文案与字幕.md b/03_卡木(木)/木叶_视频内容/抖音视频解析/参考资料/GitHub项目参考_抖音文案与字幕.md new file mode 100644 index 00000000..da5c0807 --- /dev/null +++ b/03_卡木(木)/木叶_视频内容/抖音视频解析/参考资料/GitHub项目参考_抖音文案与字幕.md @@ -0,0 +1,38 @@ +# 抖音文案/字幕提取 · GitHub 项目参考 + +> 用于「粘贴链接→提取文案」或「视频语音转文字」时可参考的开源方案。本技能已实现:**仅解析页面文案**(不下载视频);**语音转字**需下载后用 Whisper 等。 + +--- + +## 本技能现有能力 + +| 需求 | 命令/脚本 | 说明 | +|------|-----------|------| +| 仅要页面文案(标题+描述) | `douyin_caption_only.sh "链接"` 或 `douyin_parse.py "链接" --no-download` | 不下载视频,直接解析页面 | +| 要视频内语音转文字 | `douyin_video_to_text.sh "链接"`(金盾/存客宝副本管理) | 需 yt-dlp 下载 + MLX-Whisper/Whisper 转写 | + +--- + +## GitHub 可参考项目(检索于 2026-03) + +1. **douyin-AI-wenan** (fangyuan99) + 基于 Vue3 + Coze:从抖音视频提取文本 → 修正同音字、标点 → 可推 Memos。偏文案后处理。 + +2. **douyin-text-extractor** (wjllance) + Node/TS:解析分享链接拿无水印视频 → 提音频 → 转文本。类似「下载+ASR」链路。 + +3. **Short-Video-Link Parsing and Caption Extraction** (zhangyanhua0913) + 多平台(20+)链接解析 + 文案提取,支持批量、API,部分用 LLM 处理。 + +4. **VideoCaptioner / 卡卡字幕助手** (WEIFENG2333) + Python,1.3w+ stars:语音识别、断句、优化、翻译,词级时间戳、VAD,LLM 字幕重组。适合做「视频→字幕」全流程。 + +5. **VideoTextPro** + 基于 VideoCaptioner,针对抖音直播录制/回放优化,适合长视频转文字。 + +--- + +## 小结 + +- **只要页面文案、不下载**:用本技能 `douyin_parse.py --no-download` 或 `douyin_caption_only.sh` 即可。 +- **要视频里人声转文字**:需下载视频(或流)后做 ASR,可参考上述 2/4/5 或本仓库 `douyin_video_to_text.sh`(Whisper/MLX-Whisper)。 diff --git a/03_卡木(木)/木叶_视频内容/抖音视频解析/脚本/douyin_caption_only.sh b/03_卡木(木)/木叶_视频内容/抖音视频解析/脚本/douyin_caption_only.sh new file mode 100644 index 00000000..3e083854 --- /dev/null +++ b/03_卡木(木)/木叶_视频内容/抖音视频解析/脚本/douyin_caption_only.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +# 抖音链接 → 仅提取页面文案(不下载视频) +# 用法:./douyin_caption_only.sh "https://v.douyin.com/xxx" +# 输出:文案打印到终端,并保存到 卡若Ai的文件夹/视频/{aweme_id}_文案.txt + +set -e +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +OUT_DIR="${DOUYIN_CAPTION_OUT:-/Users/karuo/Documents/卡若Ai的文件夹/视频}" +mkdir -p "$OUT_DIR" + +if [[ -z "$1" ]]; then + echo "用法: $0 <抖音视频链接>" + echo "示例: $0 'https://v.douyin.com/Wv8TNVjwduU/'" + exit 1 +fi + +python3 "$SCRIPT_DIR/douyin_parse.py" "$1" --no-download -o "$OUT_DIR" 2>/dev/null || true +# 找到刚生成的 _文案.txt(按修改时间取最新) +TXT=$(find "$OUT_DIR" -name "*_文案.txt" -mmin -1 | head -1) +if [[ -n "$TXT" && -f "$TXT" ]]; then + echo "--- 文案内容 ---" + cat "$TXT" + echo "" + echo "--- 已保存: $TXT ---" +else + echo "未找到文案文件,请检查链接是否有效" + exit 1 +fi diff --git a/03_卡木(木)/木叶_视频内容/抖音视频解析/脚本/douyin_parse.py b/03_卡木(木)/木叶_视频内容/抖音视频解析/脚本/douyin_parse.py index a74239b1..7fd0506d 100644 --- a/03_卡木(木)/木叶_视频内容/抖音视频解析/脚本/douyin_parse.py +++ b/03_卡木(木)/木叶_视频内容/抖音视频解析/脚本/douyin_parse.py @@ -227,13 +227,28 @@ def main(): print(f"解析失败: {info['error']}", file=sys.stderr) sys.exit(1) - # 3. 输出文案 JSON + # 3. 输出文案 JSON 与 纯文本 .txt(便于命令行一键提取) args.output.mkdir(parents=True, exist_ok=True) caption_path = args.output / f"{aweme_id}_文案.json" with open(caption_path, "w", encoding="utf-8") as f: json.dump(info, f, ensure_ascii=False, indent=2) print(f"✅ 文案已保存: {caption_path}") + txt_path = args.output / f"{aweme_id}_文案.txt" + txt_lines = [ + (info.get("title") or "").strip(), + "", + (info.get("desc") or "").strip(), + "", + "话题: " + " ".join(f"#{t}" for t in (info.get("hashtags") or [])), + "", + f"aweme_id: {aweme_id}", + f"链接: https://www.douyin.com/video/{aweme_id}", + ] + with open(txt_path, "w", encoding="utf-8") as f: + f.write("\n".join(txt_lines)) + print(f"✅ 文案文本: {txt_path}") + # 4. 下载视频 if not args.no_download: safe_title = re.sub(r'[^\w\s\u4e00-\u9fff]+', '_', (info.get("title") or aweme_id))[:50].strip("_") diff --git a/SKILL_REGISTRY.md b/SKILL_REGISTRY.md index 38e84e0a..b5818b4a 100644 --- a/SKILL_REGISTRY.md +++ b/SKILL_REGISTRY.md @@ -1,7 +1,7 @@ # 卡若AI 技能注册表(Skill Registry) > **一张表查所有技能**。任何 AI 拿到这张表,就能按关键词找到对应技能的 SKILL.md 路径并执行。 -> 64 技能 | 14 成员 | 5 负责人 +> 65 技能 | 14 成员 | 5 负责人 > 版本:5.4 | 更新:2026-03-01 > > **技能配置、安装、删除、掌管人登记** → 见 **`运营中枢/工作台/01_技能控制台.md`**。 @@ -71,6 +71,7 @@ | G16 | 远程环境一键部署 | 金盾 | 远程部署、装Clash | `01_卡资(金)/金盾_数据安全/远程环境一键部署/SKILL.md` | 远程服务器环境配置 | | G17 | 数据库管理(安全) | 金盾 | 数据库、备份数据 | `01_卡资(金)/金盾_数据安全/数据库管理/SKILL.md` | 数据库安全与备份 | | G18 | 微信管理(安全) | 金盾 | 微信数据库解析 | `01_卡资(金)/金盾_数据安全/微信管理/SKILL.md` | 微信数据库解密与分析 | +| G19 | 存客宝副本管理 | 金盾 | 存客宝副本、cunkebao_副本、存客宝开发文档、副本代码管理 | 副本项目内 `cunkebao_副本/.cursor/skills/存客宝副本管理/SKILL.md`(以副本为主,路径见下) | 存客宝副本代码与开发文档管理,Skill 已迁入副本项目内 | ## 水组 · 卡人(信息流程调度) diff --git a/运营中枢/工作台/gitea_push_log.md b/运营中枢/工作台/gitea_push_log.md index d318fb3e..e6a06a02 100644 --- a/运营中枢/工作台/gitea_push_log.md +++ b/运营中枢/工作台/gitea_push_log.md @@ -208,3 +208,4 @@ | 2026-03-02 04:45:41 | 🔄 卡若AI 同步 2026-03-02 04:45 | 更新:Cursor规则、总索引与入口、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 14 个 | | 2026-03-02 13:43:12 | 🔄 卡若AI 同步 2026-03-02 13:43 | 更新:Cursor规则、金仓、水桥平台对接、总索引与入口、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 14 个 | | 2026-03-02 13:50:12 | 🔄 卡若AI 同步 2026-03-02 13:49 | 更新:金仓、运营中枢工作台 | 排除 >20MB: 14 个 | +| 2026-03-02 17:10:43 | 🔄 卡若AI 同步 2026-03-02 17:10 | 更新:金仓、运营中枢工作台 | 排除 >20MB: 14 个 | diff --git a/运营中枢/工作台/代码管理.md b/运营中枢/工作台/代码管理.md index ee6ecb5c..f1f1d8a3 100644 --- a/运营中枢/工作台/代码管理.md +++ b/运营中枢/工作台/代码管理.md @@ -211,3 +211,4 @@ | 2026-03-02 04:45:41 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-02 04:45 | 更新:Cursor规则、总索引与入口、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 14 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) | | 2026-03-02 13:43:12 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-02 13:43 | 更新:Cursor规则、金仓、水桥平台对接、总索引与入口、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 14 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) | | 2026-03-02 13:50:12 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-02 13:49 | 更新:金仓、运营中枢工作台 | 排除 >20MB: 14 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) | +| 2026-03-02 17:10:43 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-02 17:10 | 更新:金仓、运营中枢工作台 | 排除 >20MB: 14 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |