Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

视频日语字幕

v1.0.0

日语视频自动翻译烧录技能。将日语视频转换为中文硬字幕,完整流程:ffmpeg 提取音频 → Whisper 日语转录 → LLM 翻译日→中 → SRT 转 ASS → ffmpeg NVENC 烧录硬字幕 → 验证。触发条件:用户提到视频字幕、硬字幕、字幕烧录、日语视频翻译、whisper 字幕、ass 字幕、...

0· 61· 1 versions· 0 current· 0 all-time· Updated 3d ago· MIT-0

视频字幕翻译烧录技能

工作流程(6 步)

📦 原始视频.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 回退用)

踩坑速查

#错误原因解决
1WinError 2 ffmpeg not foundWhisper 内部调 ffmpeg 但 PATH 里没有脚本开头 os.environ["PATH"] 加入 ffmpeg 目录
2Unable to parse SRTffmpeg ass 滤镜不支持 SRT先转 ASS(Step 4)
3Unable to parse original_sizeWindows C: 冒号被当分隔符用相对路径 + cwd=ass_dir(脚本已内置)
4Whisper translate 质量差ja→zh 用 Whisper 翻译效果差只转录,翻译交给 Step 3 LLM
5烧录后视频无字幕ffmpeg 静默失败(路径问题)必须用 ffprobe 抽检画面,不能只看文件大小
6LLM 翻译条目数不匹配输出格式不稳定脚本内置兜底补空逻辑
7GBK 解码错误Windows 控制台默认 GBKPython 脚本开头设 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"]

烧录相对路径 + 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

性能参考(RTX 4060)

步骤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\                     ← 可手动建此目录存放成品

脚本特性

  • 断点续传:每步检查文件是否存在,已完成则跳过
  • 短 hash 文件名:绕过 Windows 260 字符路径限制
  • NVENC/CPU 自动切换
  • LLM + MyMemory 双翻译引擎(LLM 失败自动回退)

已知局限

  • Whisper base 模型对混合音频(BGM+语音+音效)识别一般
  • --task translate(ja→zh)翻译质量差,不用
  • 当前只支持日语→中文,其他语言需修改 Whisper language 参数
  • faster-whisper 替代 openai-whisper 可提升速度和内存效率(未来改进方向)

Version tags

latestvk978wkpwgb6zx330kfjpbsyrdd85h409