粘贴视频链接,得到「发布文案 + 口播逐字稿」;同时给 agent 两个工具,让它能直接读文字稿、看画面。
English · 中文
17 秒 · 贴微信视频号链接 → 入列 → 转写 → 逐字稿
抖音、小红书、微信视频号、B站、YouTube 的分享链接,变成发布文案、逐字稿、字幕和章节稿。媒体先落盘,转写没跑完就能先看片子。 以前取一条视频的文案要开网页、复制简介、手动听写、自己排版;批量十条就是十次重复。插件把解析、下载、转写、对齐、排版收进侧栏,产物落在一个目录里,可以直接打开、导出,或交给 agent 继续加工。 同一条视频,agent 也能自己读:`video_text` 拿带时间码的文字稿窗口,`video_frames` 拿一张带每格时间点的画面拼图(或某一秒的高清单帧)。不需要打开面板,也不需要它理解任何内部概念。  ## 能做什么 | 能力 | 说明 | |---|---| | 平台 | 抖音 / 小红书 / 微信视频号 / B站 / YouTube / 本地音视频 | | 转写 | 云端 Qwen3-Omni(中文标点与专名更准)或本地 mlx-whisper / whisper.cpp | | 播放器 | 自绘控件、逐句同步高亮、字幕、倍速、画中画、全屏 | | 时间轴 | 默认按标点切句 + 分片内插值;需要时一键做词级对齐 | | 导出 | 发布稿(自动章节)/ 字幕 SRT / **画面速览 JPG**(区间抽帧拼版)/ ZIP | | 账号 | 抖音、小红书扫码;视频号扫码 + 会话验证,缺登录时直接引导 | | 任务 | 搜索、按天分组、重试复用原卡、删除、从其它目录导入 | | 交给 agent | 「问 AI」新建会话、切到任务工作区、预填上下文 | | **读视频(agent)** | `video_text` / `video_frames` 两个工具:逐句文字稿窗口、带时间点的画面拼图、单帧高清;传媒体路径或 `vid_xxxxxxxx`,长任务自动转后台 | ## 安装 **从 GUI**:侧栏 **Plugins** → 添加插件 → 填 `dsh-video2text`。 **从命令行**: ```sh dsh plugin --profile web add dsh-video2text # 想跟最新提交而不是发布版:dsh plugin --profile web add "github:vlln/dsh-video2text" ``` 两条路径都在干净环境里验证过(dsh `0.2.1-rc.1`)。装完**重启 `dsh web`** —— Node half 在启动时注册,刷新页面不会出现面板。确认方法:侧栏出现「视频转文案」,贴一条 B 站链接回车,几秒内出现任务卡与封面;转写完成后「导出 → 发布稿」应下载一个 `.publish.md`。 **运行环境**: - macOS(视频号解密与本地转写依赖 macOS 工具链;其他平台未验证) - Python 3.9+、`ffmpeg`、`node` - 视频号需要 `playwright` 与本机 Chrome:`pip install playwright` - 本地转写需要 `mlx-whisper`(Apple Silicon)或 `whisper.cpp`;只用云端转写可以不装 ### 不装插件,只要 skill 插件的 `skills/video2text/` 就是完整的 video2text skill(引擎脚本 + `SKILL.md`),可以不装插件直接取用: ```sh git clone --depth 1 --filter=blob:none --sparse https://github.com/vlln/dsh-video2text cd dsh-video2text git sparse-checkout set skills/video2text # 只拉这一个子目录 ``` 装给别的 agent(例如 `~/.claude/skills/video2text`)时,要让 `SKILL.md` 和 `scripts/` 同级:`skills/video2text/skills/video2text/scripts` 是指向引擎目录的相对软链,整个拷出去会断,所以分开拷—— ```sh mkdir -p ~/.claude/skills/video2text cp skills/video2text/skills/video2text/SKILL.md ~/.claude/skills/video2text/ cp -R skills/video2text/scripts ~/.claude/skills/video2text/ ``` 装好先自检:`python3 ~/.claude/skills/video2text/scripts/video2text --status`(抖音还要先 `--setup-douyin` 装解析组件)。 ## 用起来 ### 入列即转写 粘贴链接按回车(或点「开始」)直接建任务,没有「预览 → 确认 → 开始」的往返。任务名就是抓到的视频标题,封面、作者、时长随元数据补上并写进任务记录,刷新和搜索都在。本地文件用文件名兜底。 ### 边转边看 媒体下载完立刻落盘,播放器马上可用,转写在旁边继续跑,逐字稿完成后原地出现。多个任务并行,互不阻塞。  ### 播放器 + 逐字稿 自绘控件:播放/暂停、拖拽、倍速、字幕、跟随高亮、画中画、全屏。逐字稿按句同步高亮,点一句跳到对应时间。 键盘:`空格` 播放/暂停、`←→` 快退快进、`↑↓` 切任务、`/` 搜索。 时间轴有两种状态,标题下的胶囊会标出来:**估算**(插值)和 **精确**(做过对齐)。 ### 对齐(一次性动作) 默认不做词级对齐:云端转写后按标点切句、在分片内按字数插值时间,对连续口播通常只差零点几秒,而且不需要本地模型。 需要更准的边界时点「对齐」:用本地 whisper 的词级时间重算每句起止,只更新 json/srt,不重转、不改文案。对齐中会显示进度条和实时日志。  ### 导出 三个出口,够用且不重复: | 选项 | 产物 | |---|---| | 发布稿(带章节) | 标题 / 发布文案 / 自动章节 / 正文 / 字数语速 | | 字幕 SRT | 逐句字幕 | | 画面速览(JPG) | 选中区间抽帧拼成一张图:角标带时间,页眉写区间/帧数/间隔 | | 全部(ZIP) | 上面两份 + sidecar JSON |  **画面速览**:在播放器进度条上**拖动**框选区间(单击仍是跳转),任务下方会出现「已选区间 1:07 – 2:29 · 81s」,并带一张 4×3 的预览缩略图: - **拖动选区两端的手柄**微调起止;**双击手柄**输入精确时间(`2:30`) - 预览图点开可看大图,不满意直接改区间,再点「导出速览」 - 帧数不用选——按区间长度自动定(约 48 帧;10s 的片子 0.5s 一帧,11 分钟约 14s 一帧),始终输出**一张** JPG ### 问 AI 选中一条任务点「问 AI」:新建会话、自动切到任务目录所在的工作区,并把上下文(标题、来源、时长、输出目录、文字稿/字幕/sidecar/媒体的绝对路径)填进输入框。回车就把活交给 agent —— 压稿、重写标题、切片段、跑批量。  工作区是「所有任务的上一级目录」,agent 能一并管理其它任务的产物。插件只读选择、不创建:侧栏里没有这个工作区时,会提示你用 `Add workspace…` 指一次。 ### 设置 右上角「设置」,两段: - **登录态**:抖音 / 小红书 / 视频号的状态与扫码入口,「验证会话」会给绿/红反馈 - **服务与密钥**:云端转写的 provider / model / base URL / 密钥(默认隐藏)、小红书服务地址、DouK 路径、本地模型、分片长度、浏览器 Cookie、YouTube PO token 每个字段旁有 `?`,悬停即显用途说明。  ### 任务列表 按今天/昨天分组、可搜索;每条右侧 `⋯` 里有「复制链接」「删除任务(含文件)」。缺登录时任务进入「需要登录」状态,卡片上直接扫码,扫完自动重跑。  ### agent 直接跑脚本的结果也会出现 面板会扫描以下目录,把含 sidecar JSON 的子目录收编成任务(标 `imported`): 1. `$DSH_HOME/data/dsh-video2text/out` 2. 环境变量 `VIDEO2TEXT_IMPORT_DIRS`(`:` 分隔) 3. 插件配置 `importDirs`(逗号分隔) 导入的任务是**只读收编**:删除只从列表移除、不删磁盘,媒体保留策略也不会碰它们。 ## 给 Agent 用(`video_text` / `video_frames`) 装上插件后,agent 直接就能用(不用打开面板): > 「用 video_frames 看一下 `~/Movies/talk.mp4` 的 3:00–4:00,告诉我画面在讲什么」 > > 「用 video_text 读 `~/Movies/talk.mp4` 第 8 分钟附近的文字稿,概括三点」 这个包同时提供一个**独立于面板**的插件行 `dsh-video2text/inspect`,给 agent 两个工具: | 工具 | 输入 | 输出 | |---|---|---| | `video_text` | 媒体路径或 `vid_xxxxxxxx`、可选 `from`/`to` | 带时间码的逐句文字稿;没转写过就起后台任务 | | `video_frames` | 同上,另加 `mode`(shots/uniform)、`size`(overview/detail)、`at` | 一张拼图(含每格时间点)或某一秒的高清单帧 | 要点: - **不需要 Job ID**:第一次传媒体文件路径,工具返回一个按文件指纹算的 `vid_<8位hex>`,之后传它即可(同一文件永远同一个 id)。 - **25 秒软超时**:转写/长视频抽帧超过 25 秒就转成后台任务(`v2t-video-