把影片/音訊裡「說出來的話」變成文字稿。這裡有踩過血坑的固定套路,嚴格按順序走,別自作聰明繞過第 0 步。
鐵律(這條最重要,先記住)
永遠先找「現成字幕」,實在沒有才動用「聽譯」。 絕大多數正經演講、大會、播客都會傳到 YouTube,而 YouTube 幾乎都自帶字幕——一條命令幾秒鐘扒下來,免費、不下整段影片、不佔顯示卡。 今天就是沒走這條近路,傻乎乎地把 450MB 影片下下來、用處理器硬跑半小時聽譯,還跑出一堆錯字。這個坑不許再踩。
第 0 步 拿到連結先分清楚兩件事,再決定順序
轉文字(要這段話的文字稿)和查來頭(誰講的、原版哪天講的、是不是完整版)是兩碼事,別捆一起。舊版無腦「看到 X 就先跑 YouTube」是錯的——X 自己也常自帶字幕,那趟 YouTube 白跑。
轉文字:永遠先就近探手上這條連結,不必預設繞 YouTube。
- 直接跑 grab.py——腳本會先扒該連結自帶的字幕(X 常有 en/es 等字幕),扒到就收工,這是最快的近路。
- 只有下面兩種才值得繞去 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 庫,不用驅動/不用點設定)。
三步走:
- 開錄(背景跑,錄到你停它為止):
python "C:/Users/Administrator/.claude/skills/影片轉文字/scripts/record.py" "輸出資料夾名稱" - 把影片從頭播到尾(即時錄,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>"