Summary
音訊/影片檔自動生成乾淨 SRT 字幕檔。當使用者要「把音訊轉字幕」「做 SRT」「語音轉文字 + 時間碼」「影片上字幕」時請一定要使用此技能。預設走 Groq Whisper-large-v3-turbo(雲端、word-level 時間碼),備援本地 Whisper medium。Claude…
mathruffian-dot/2026-youtube · Archived
音訊/影片檔自動生成乾淨 SRT 字幕檔。當使用?
npx skills add mathruffian-dot/2026-youtube --skill audio-to-srt
音訊/影片檔自動生成乾淨 SRT 字幕檔。當使用者要「把音訊轉字幕」「做 SRT」「語音轉文字 + 時間碼」「影片上字幕」時請一定要使用此技能。預設走 Groq Whisper-large-v3-turbo(雲端、word-level 時間碼),備援本地 Whisper medium。Claude…
This repository is archived — consider an actively maintained alternative.
影片去靜音剪輯與字幕精修工作流。當使用?
2 installs智能剪口播 Skill。當使用?
1 installs從已剪過的長片(cut.mp4 + .srt)擷取亮點片段,組成 ≤2 分鐘的短片。當使用?
1 installsRelated neighbors and high-traction skills in the same topics — useful to compare before installing.
Use when audio already placed in a HyperFrames composition needs to be mixed: fade-in/fade-out,…
119.9K installsSynthesize speech from text with Qwen TTS models. TRIGGER when: user wants to convert text to s…
4.3K installsGenerate AI text-to-speech audio, use saved voices, or create a one-shot voice clone from an HT…
4.1K installsTired of juggling multiple audio APIs? This skill gives you one-command access to TTS, music ge…
3.9K installs面向音频文件或视频中的音轨,处理语音边界定位、音频媒资信息探测、音频转码与码流封?
2.8K installsImplement game audio practice — bus/mixer architecture and gain in decibels, ducking (sidechain…
2.7K installsOther skills from mathruffian-dot/2026-youtube.
npx skills add mathruffian-dot/2026-youtube
Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.
main
Parsed from SKILL.md frontmatter.
Files included with this skill beyond the listing page.
SKILL.md
8,216 B
SUMMARY.md
361 B
使用者提供音訊/影片檔(mp3/wav/m4a/mp4/mov/mkv)並要求:
| 路線 | 模型 | 時間碼粒度 | 速度 | 隱私 | 適用 |
|---|---|---|---|---|---|
| A. Groq(預設) | whisper-large-v3-turbo | word-level | 快 | 上雲 | 一般情境,要快要準 |
| B. 本地 Whisper | medium | segment-level | 慢 | 完全本地 | 敏感內容、無網路 |
走 Groq 才能用 resegment.py 做精準斷句。本地 Whisper 只能保留原 segment。
HH:MM:SS,mmm --> HH:MM:SS,mmm 那一行完全不准改動# Groq API Key(擇一)
echo $GROQ_API_KEY # 環境變數
ls ~/.groq_api_key # 或本地 key 檔
若兩者皆無 → 提示使用者設定,並中止。
ffmpeg 確認(大檔降取樣會用到):
ffmpeg -version 2>&1 | head -1
在音訊檔同層建立 _subtitles/ 存放中間產物。
Groq 上限 25 MB,超過會吐 502 Bad Gateway(Cloudflare 擋掉)。 transcribe_groq.py 在偵測到檔案 > 24 MB 時,自動用 ffmpeg 壓成 16kHz / mono / 32kbps 暫存檔上傳,完成後刪除——使用端無感。78 分鐘片實測從 75 MB → 18 MB,辨識品質仍佳。
若壓縮後仍 > 24 MB(罕見),腳本會中止並提示。屆時手動切段處理。
python "%USERPROFILE%/.claude/skills/audio-to-srt/scripts/transcribe_groq.py" \
"輸入檔.mp3" \
--out _subtitles/輸入檔.groq.json
產出 verbose_json,含 segments 與 words(每個字都有 start/end)。
python ".../scripts/resegment.py" \
_subtitles/輸入檔.groq.json \
--audio "輸入檔.mp3" \
--out _subtitles/輸入檔.raw.srt
切點優先序:強標點 。!? > segment 邊界 > 弱標點 ,、 > 硬切(往回找標點)。 參數:MAXDUR=3.0s、MAXCHARS=15、MIN_DUR=0.6s。
防孤兒殘尾(2026-07 修正):舊版會把「一句話的最後一個字」截到下一段開頭 (如上段結尾『…需要的程』、下段開頭『式,完全免費!』)。已內建兩層防護:
punct_ahead():segment 邊界切(規則 2)與硬超標切(規則 5)在動刀前先看後面 1–2 個詞內有沒有標點收尾,有就寬限不切,等標點處自然收尾。
rescueorphantails():切完後最終掃描,凡「前段沒標點收尾」且段首是「≤2 字+標點」的殘尾,整批搬回前一段。 發語詞(『好,』『嗯,』『欸,』…)在兩層都有白名單保護,不會被誤判誤搬。 實測:兩支 40 分鐘影片的真孤兒殘尾 11→0、16→0,發語詞開頭段完好。
--audio 會在斷句後呼叫 ffmpeg silencedetect 偵測真實靜音(預設 -35 dB、0.25 s), 將每段的 end 縮到靜音起點、下一段的 start 延到靜音終點,讓字幕在靜音處自動留白。 不傳 --audio 時維持舊行為(Groq word timestamps 本身無靜音間隔)。
python ".../scripts/apply_vocab.py" \
_subtitles/輸入檔.raw.srt \
--out _subtitles/輸入檔.vocab.srt
腳本內含 REPLACEMENTS 清單:
只動文字行,時間碼絕不動。
輸入檔.vocab.srtreferences/cleanup_rules.md 逐段清理(修標點、刪贅詞)_subtitles/輸入檔.clean.srt清字檢查清單:
references/vocabulary.md 詞彙是否正確呈現?python ".../scripts/validate_srt.py" \
--raw _subtitles/輸入檔.vocab.srt \
--clean _subtitles/輸入檔.clean.srt
段數一致、時間碼逐一吻合、單調遞增、文字非空。
python ".../scripts/srt_to_txt.py" \
_subtitles/輸入檔.clean.srt \
--out 輸入檔.txt
適合:YouTube 描述、IG/FB 貼文、封面金句、後製字稿。
音訊同層放兩份:
輸入檔.srt — 字幕檔(複製自 clean.srt)輸入檔.txt — 純文字稿_subtitles/ 中間檔保留供稽核。 回報:總段數、總時長、平均段長、txt 字數、主要修改類型。
當使用者明確要求本地處理、或無 Groq Key 時走此路線。
PYTHONIOENCODING=utf-8 PYTHONUTF8=1 python -X utf8 -m whisper "輸入檔.mp3" \
--model medium \
--language zh \
--output_format srt \
--output_dir ./_subtitles \
--initial_prompt "以下為繁體中文。專有名詞:Claude、Claude Code、NotebookLM、Gemini、Groq、Whisper、Obsidian、三師爸、小克。"
Windows 踩坑:
whisper CLI 不在 PATH → 用 python -m whisperPYTHONUTF8=1 與 -X utf8產出後跳過 Step 5(resegment 不適用,segment-level 時間碼只能照原樣),直接進 Step 6(apply_vocab)→ Step 7(清字)→ Step 8(驗證)→ Step 9(轉純文字)→ Step 10(交付)。
skills/audio-to-srt/
├── SKILL.md # 本檔
├── scripts/
│ ├── transcribe_groq.py # Groq STT,產 word-level JSON
│ ├── resegment.py # 依 word-level 時間碼重新斷句
│ ├── apply_vocab.py # 詞彙機械替換(只動文字行)
│ ├── srt_to_txt.py # SRT → 純文字稿
│ └── validate_srt.py # 時間碼驗證
└── references/
├── cleanup_rules.md # 清字規則(逐段不跨段)
└── vocabulary.md # 自訂詞彙表
有 GROQ_API_KEY?
├─ 有 → 路線 A(Groq)
│ └─ 檔案 > 25 MB?→ 先 ffmpeg 降至 16k mono 再傳
└─ 無 → 提示使用者設 key;若使用者要求離線 → 路線 B(本地 Whisper)
PYTHONUTF8=1audio.<ext> 上傳