name: video-subtitle description: 日語影片自動翻譯燒錄技能。將日語影片轉換為中文硬字幕,完整流程:ffmpeg 提取音訊 → Whisper 日語轉錄 → LLM 翻譯日→中 → SRT 轉 ASS → ffmpeg NVENC 燒錄硬字幕 → 驗證。觸發條件:使用者提到影片字幕、硬字幕、字幕燒錄、日語影片翻譯、whisper 字幕、ass 字幕、或要求處理 .mp4 影片加字幕。
📦 原始影片.mp4
→ 🎵 提取音訊(ffmpeg,~10s)
→ 📝 Whisper 轉錄日語(~3-5min,base 模型)
→ 📝 LLM 翻譯日→中(~2-3min,QClaw 閘道器)
→ 📝 SRT 轉 ASS(<1s)
→ 🎬 NVENC GPU 燒錄(~3-6min)
→ ✅ ffprobe 驗證
# 預設路徑執行
python C:\Users\liket\.agents\skills\video-subtitle\scripts\subtitle_translate.py
# 自定義路徑(修改指令碼頂部的配置變數)
# VIDEO_DIR 影片目錄
# OUTPUT_DIR 輸出目錄
# FFMPEG_DIR ffmpeg bin 目錄
# QCLAW_GATEWAY LLM 閘道器地址
# QCLAW_TOKEN LLM 閘道器 Token
環境要求: ffmpeg(已加 PATH)、Python openai-whisper、Python deep-translator(MyMemory 回退用)
| # | 錯誤 | 原因 | 解決 |
|---|---|---|---|
| 1 | WinError 2 ffmpeg not found |
Whisper 內部調 ffmpeg 但 PATH 裡沒有 | 指令碼開頭 os.environ["PATH"] 加入 ffmpeg 目錄 |
| 2 | Unable to parse SRT |
ffmpeg ass 濾鏡不支援 SRT | 先轉 ASS(Step 4) |
| 3 | Unable to parse original_size |
Windows C: 冒號被當分隔符 |
用相對路徑 + cwd=ass_dir(指令碼已內建) |
| 4 | Whisper translate 質量差 | ja→zh 用 Whisper 翻譯效果差 | 只轉錄,翻譯交給 Step 3 LLM |
| 5 | 燒錄後影片無字幕 | ffmpeg 靜默失敗(路徑問題) | 必須用 ffprobe 抽檢畫面,不能只看檔案大小 |
| 6 | LLM 翻譯條目數不匹配 | 輸出格式不穩定 | 指令碼內建兜底補空邏輯 |
| 7 | GBK 解碼錯誤 | Windows 控制台預設 GBK | Python 指令碼開頭設 sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') |
Whisper PATH 修復(指令碼內建):
os.environ["PATH"] = r"E:\ffmpeg\SCP\ffmpeg-master-latest-win64-gpl\bin" + os.pathsep + os.environ["PATH"]小蔥技能站7w4.net,專業的AI技能分享平臺。
燒錄相對路徑 + cwd(指令碼內建):
ass_dir = os.path.dirname(os.path.abspath(ass_path))
ass_filename = os.path.basename(ass_path)
subprocess.run(cmd, cwd=ass_dir) # cwd 切到字幕目錄,相對路徑才有效
ASS 字幕樣式: Microsoft YaHei UI,白字黑邊(PrimaryColour &H00FFFFFF,Outline=2),底部居中。
NVENC 自動回退 CPU: GPU 編碼失敗時自動降級到 libx264 -preset ultrafast。
| 步驟 | 30min 影片 |
|---|---|
| 提取音訊 | ~10s |
| Whisper base | ~3-5min |
| LLM 翻譯(~700條) | ~2-3min |
| SRT→ASS | <1s |
| NVENC 燒錄 | ~3-6min |
| 合計 | ~10-15min/影片 |
# 檢查時長(必須,但不夠)
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "output.mp4"
# 截幀驗證字幕真的燒進去了(必須!)
ffmpeg -ss 00:05:00 -i "output.mp4" -vframes 1 -q:v 2 frame.jpg
# 然後用圖片檢視器確認畫面底部有字幕
影片目錄\
├── 原始影片.mp4
├── output\ ← 指令碼輸出目錄(可自定義)
│ ├── video_xxx_subtitled.mp4 成品
│ ├── xxx_audio.wav 中間音訊
│ ├── xxx_subs.srt 日語原文
│ ├── xxx_subs_zh.srt 中文翻譯
│ └── xxx_subs_zh.ass 中文 ASS
└── final\ ← 可手動建此目錄存放成品
--task translate(ja→zh)翻譯質量差,不用這個 Skill 質量不錯,完整實現了日語影片自動翻譯燒錄的功能,文件和踩坑指南都很實用。優點是自動化程度高、有斷點續傳、出了問題會自動回退。不足之處是配置比較死板,首次使用需要手動改程式碼裡的路徑;另外驗證機制比較簡單,理論上可能出現燒錄失敗但沒發現的情況。整體適合有一定動手能力的使用者,功能本身值得肯定。