Communitygithub.com

swei99386-alt/video-to-text-skill

One-command video-to-text pipeline for X / YouTube / Bilibili. Subtitle-first strategy, GPU-accelerated transcription (~18x realtime). 5G GPU friendly.

Was ist video-to-text-skill?

video-to-text-skill is a Claude Code agent skill that one-command video-to-text pipeline for X / YouTube / Bilibili. Subtitle-first strategy, GPU-accelerated transcription (~18x realtime). 5G GPU friendly.

Funktioniert mitClaude Code~Codex CLI~Cursor
npx skills add swei99386-alt/video-to-text-skill

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

把视频/音频里"说出来的话"变成文字稿。这里有踩过血坑的固定套路,严格按顺序走,别自作聪明绕过第0步。

铁律(这条最重要,先记住)

永远先找"现成字幕",实在没有才动用"听译"。 绝大多数正经演讲、大会、播客都会传到 YouTube,而 YouTube 几乎都自带字幕——一条命令几秒钟扒下来,免费、不下整段视频、不占显卡。 今天就是没走这条近路,傻乎乎地把 450MB 视频下下来、用处理器硬跑半小时听译,还跑出一堆错字。这个坑不许再踩。

第0步 拿到链接先分清两件事,再决定顺序

转文字(要这段话的文字稿)和查来头(谁讲的、原版哪天讲的、是不是完整版)是两码事,别捆一起。旧版无脑"看到 X 就先跑 YouTube"是错的——X 自己也常自带字幕,那趟 YouTube 白跑。

转文字:永远先就近探手上这条链接,不必默认绕 YouTube。

  1. 直接跑 grab.py——脚本会先扒该链接自带的字幕(X 常有 en/es 等字幕),扒到就收工,这是最快的近路。
  2. 只有下面两种才值得绕去 YouTube 找原版:
    • X 上压根没字幕(YouTube 那边多半有);
    • X 上是剪辑片段——文案在讲一个更长的视频、但 X 段子只有一两分钟(扒它只得一小截,要全片才去找原版)。 绕法:搜"演讲者 + 主题/标题 + 活动名"找到 YouTube 原版,用它进第1步。

时长就是照妖镜:yt-dlp --no-download --print "%(duration_string)s" 看一眼。X 段子跟文案吹的差不多长(说"28分钟"、就是27分)= 完整搬运,直接扒;短一大截 = 剪辑片段,得去找原版。

查来头(谁/哪天讲的/是否完整)是另一码事,只有用户开口问才做,不是转文字的必经步骤。 而且够用就停:查到能回答用户的信息即可,别追精确日期、官方原版这种用户没要求的精度反复搜(2026-07-22 踩过这坑)。

第1步 一键跑脚本(它自己判断走字幕还是听译)

python "C:/Users/Administrator/.claude/skills/视频转文字/scripts/grab.py" "<链接或本地文件>" "输出文件夹名" [语言]

第三个参数【语言】可选:中文视频传 zh(会强制中文+简体输出)、英文传 en、不传则自动判断。 脚本内部逻辑(已写死):

  • 先扒现成字幕 → 成功就秒出 完整文字稿.txt,收工。
  • 扒不到字幕 → 才自动抠声音、用显卡(GPU)跑听译(不是处理器)。
  • 产物统一落到桌面 <输出文件夹名> 里:完整文字稿.txt(干净纯文字)+ 原始字幕/字幕文件。

跑完把 完整文字稿.txt 的位置和词数报给用户即可。

哔哩哔哩 / 国内网站(和 YouTube 不一样, 单独记)

  • 能下:下载工具支持哔哩哔哩(B站)、以及不少国内站,抓视频/声音这步没问题。
  • 但"扒现成字幕"这条免费近路基本指望不上:B 站没有 YouTube 那种全站机器字幕,只有少数 UP 主手传了 CC 字幕才扒得到。弹幕不是字幕(弹幕是观众飘屏评论,不是台词),别去扒弹幕。
  • 所以 B 站视频绝大多数直接走"显卡听译"。中文视频记得把第三个参数传 zh:
    python ".../grab.py" "<B站链接>" "输出文件夹名" zh
    
  • 中文精度提醒:现在用的是小号(small)模型,认中文只能"听个大概",容易有错别字。要更准需换中号(medium)模型(约 1.5G,一次性下载,当前未装)。用户 2026-07-21 选了"先用小号将就",要更准时再装 medium 并把脚本 --model small 改成 medium
  • 登录:B 站会员专享/高清/需登录的视频,下载时要账号 cookie。遇到先问用户,别擅自动账号。

抓不到链接的视频(微信视频号 / 付费加密页 / 任何只能在屏幕上播的)→ 录屏幕声音

下载工具够不着这类视频(视频号关在 App 里、付费页有加密)。唯一通用办法:边播边录电脑正在响的声音,再转文字。本机已装好内录能力(soundcard 库,不用驱动/不用点设置)。

三步走:

  1. 开录(后台跑,录到你停它为止):
    python "C:/Users/Administrator/.claude/skills/视频转文字/scripts/record.py" "输出文件夹名"
    
  2. 把视频从头播到尾(实时录,3 小时的视频就得播 3 小时,快进不了)。
  3. 停掉录制进程(智能体停后台任务=硬停,没关系),然后直接把 录音.pcm 喂给 grab.py 转文字(它认得 pcm,中文加 zh):
    python "C:/Users/Administrator/.claude/skills/视频转文字/scripts/grab.py" "<桌面路径>/<文件夹>/录音.pcm" "<文件夹>" zh
    
  • 边录边写盘,中途被强杀也不整段丢(pcm 一直在,不依赖任何"收尾"步骤)。
  • 能拿到链接就别用录的:下载几分钟搞定,录得实时等满全程。录屏只留给真抓不到链接的。

第2步 只有听译时才需要关心的事

  • 必须走显卡:这台机器有 NVIDIA GTX 1060(5G 显存),脚本会自动优先用它。若某天日志里显示"处理器(CPU)",说明"会用显卡的 torch"又被换回 CPU 版了,按下面【显卡地基】一节修。
  • 时长很长(>20 分钟)、跑起来慢是正常的,但用显卡应是分钟级;若慢得像半小时那必是掉回 CPU 了。
  • 听译难免有错字/漏词,是"听个大概",精度不如原生字幕。能扒到字幕就别听译。

显卡地基(听译要靠它,坏了照这修)

听译用显卡的前提是装了"会用显卡"版的 torch。自检:

C:/Users/Administrator/portable-python311/runtime/python.exe -c "import torch;print(torch.__version__, torch.cuda.is_available())"
  • 显示 ...+cu126 True = 正常,能用显卡。
  • 显示 ...+cpu False = 掉回只用处理器了,重装:
C:/Users/Administrator/portable-python311/runtime/python.exe -m pip install --force-reinstall torch==2.11.0 --index-url https://download.pytorch.org/whl/cu126

(driver CUDA 12.6 → 用 cu126 源。这块 5G 显卡够跑语音识别/OCR/中小模型;要 8G 显存起步的大模型带不动。)

常用手动命令(脚本之外, 备查)

  • 只看有哪些字幕语言: yt-dlp --no-download --list-subs "<url>"
  • 只扒英文字幕不下视频: yt-dlp --skip-download --write-auto-subs --sub-langs "en-orig,en.*" --convert-subs srt -o "%(title)s.%(ext)s" "<url>"
  • 核对时长/发布日: yt-dlp --no-download --print "%(title)s | %(duration_string)s | %(upload_date)s" "<url>"

Verwandte Skills