Communitygithub.com

redirhan/turkce-altyazi

视频或音频文件生成带单词时间戳的中文字幕(土耳其语转写),支持本地Whisper引擎(faster-whisper或whisper.cpp),提供正确的土耳其语大写规则(İSTANBUL而非ISTANBUL;IŞIK、İŞTE),修正常见ASR错误,填充/停顿裁剪建议,短视频分行,并输出SRT+带样式的ASS+嵌入字幕的MP4。3 种免费样式:干净、粗体强调、卡拉OK。

turkce-altyazi 是什么?

这是一个全面的本地化土耳其语字幕生成技能,适用于Claude Code、Cursor、Codex等AI agent平台。用户只需要提供土耳其语视频或音频文件,该技能就能自动完成语音转写(支持faster-whisper和whisper.cpp)、土耳其语大写规则修正(例如i→İ)、ASR常见错误修复(如“herşey”→“her şey”)、填充词/停顿检测与裁剪建议,以及短视频(如Reels)的智能分行。输出格式包括标准SRT、带样式的ASS(支持粗体强调、卡拉OK等效果)和直接嵌入字幕的MP4视频。所有处理完全在用户本地运行,无需联网、登录账户或付费API。 技能提供清晰的命令集:`doctor` 检查依赖和环境;`transcribe` 进行语音转写;`fix` 执行土耳其语大写和ASR错误修正;`trim` 建议并应用填充/停顿裁剪;`build` 生成SRT、ASS和JSON;`burn` 将字幕直接嵌入视频;`run` 一键完成所有操作;`still` 生成预览帧。它还包含详细的土耳其语语言规则(大写化、音系修复、专有名词保护、断行策略)和三种免费样式(temiz/干净、kalin-vurgu/粗体强调、karaoke/卡拉OK)。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/redirhan/turkce-altyazi/tree/main

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

土耳其语字幕通道

输入视频或音频 → 输出带单词时间戳的土耳其语字幕:.srt + 带样式的 .ass + 嵌入字幕的 .mp4,以及修正报告和裁剪建议。一切均在用户电脑本地完成。

规则(不可更改)

  • 保持本地。 不发布、不上传、不登录账户、不调用付费API。模型下载(Whisper模型)仅在用户同意时进行。
  • 不打开浏览器。 此操作不需要浏览器;不要启动Chrome/Chromium。
  • 不覆盖原文件。 输出存放到单独文件夹(默认 altyazi_cikti/);原始视频不受影响。trim --uygula 也会写入新文件。
  • 字幕仅显示说过的话。 字幕是转写文本;不凭空捏造内容,不以“修正”为由修改句子。仅修正拼写、大写、ASR错误,且所有修正均在报告中列出。
  • 土耳其语大写始终使用 tr_upper。 Python 的 str.upper()、JS 的 toUpperCase() 或 CSS 的 text-transform: uppercase(未设置 lang="tr")会破坏土耳其语:istanbul → ISTANBUL,ilk → ILK。
  • 不使用 drawtext。 字幕嵌入通过 ffmpeg 的 ass 滤镜(libass)完成,或者在没有 libass 时使用 PIL 回退方案。

流程

S=~/.claude/skills/turkce-altyazi/scripts,且需要已安装 Pillow 和 numpy 的 Python(PY,参见 README 中的 venv)。

  1. 检查: $PY $S/altyazi.py doctor → 如有缺失,用一行告知用户(ffmpeg、Pillow、转写引擎)。若没有转写引擎,用户可通过 --srt 提供SRT。
  2. 一键执行:
    $PY $S/altyazi.py run VIDEO.mp4 --stil kalin-vurgu --cikti altyazi_cikti/
    # --stil temiz | kalin-vurgu | karaoke | hepsi
    # --vurgu "İstanbul,%50"     在粗体强调样式中高亮显示的单词(若未指定,则为数字和专有名词)
    # --oneriler-uygula           同时应用“建议”级别的修正(例如 Şeyh -> Şey)
    # --srt elimdeki.srt          用已有SRT代替转写
    # --kelimeler x.words.json    重用之前的转写结果(快速重新应用样式)
    # --yakma-yok                 仅输出SRT/ASS/JSON
    # --motor pil|ass             强制使用某字幕嵌入引擎(默认:若libass可用则用ass)
    # --y 0.67                    字幕垂直位置(9:16 时 0.67 约在下巴下方,安全区内)
    
  3. 读取报告并汇总给用户(<ad>.rapor.txt):做了多少修正,有哪些 建议 等待确认,裁剪建议(填充词 "şey/yani/ııı"、重复、超过0.6秒的停顿),检查结果(安全区、快速阅读、重叠、土耳其语大写)。
  4. 视觉检查。 打开 <ad>.<stil>.onizleme.jpg(输出中的3帧)并检查:土耳其语字母是否正确,字幕是否遮挡面部/主体,是否进入下方说明文字行或右侧图标区域。若说话人头像中被字幕遮挡脸部,通过 --y 向下调整(最大约0.74)。
  5. 若需要裁剪: $PY $S/altyazi.py trim VIDEO.mp4 --kelimeler <ad>.words.json --uygula(--guven orta 还会剪掉填充词)→ 生成 <ad>.kirpilmis.mp4 + 重新对齐的单词时间戳;然后执行 run <ad>.kirpilmis.mp4 --kelimeler <ad>.kirpilmis.words.json。

子命令

命令功能
doctor检查安装 + 土耳其语字形 + tr_upper 测试
transcribe IN生成 words.json(faster-whisper 或 whisper.cpp,修复单词时间戳)
fix WORDS土耳其语大写 + ASR 修正,生成报告
trim IN --kelimeler W提出填充/停顿建议;--uygula 时执行裁剪
build WORDS --stil S生成 SRT + ASS + JSON(支持 HyperFrames/Remotion 定位)
burn IN --kelimeler W嵌入字幕的MP4
run IN一键完成所有操作
still --kelimeler W --zaman 3.2生成单帧预览PNG
demo生成示例视频并为其添加字幕

土耳其语规则(代码中已实现)

  • tr_upper / tr_lower / tr_title:i↔İ,ı↔I;标题中 "ve, ile, de/da, ki, mi" 小写;保留 TL, YouTube, iPhone 等书写形式(data/koru.txt)。
  • ASR 修复:Istanbul → İstanbul,ISKELESIYDI → İSKELESİYDİ(遵循元音和谐,不确定时不改动),Işık/Irak/Isparta 予以保留(data/noktasiz_i.txt),分离后缀连写(İzmir + 'e),50% → %50,句中小词的首字母大写错误(Sabah → sabah),未正确大写的地名/国名(izmir → İzmir),拼写错误(data/asr_duzeltme.tsv:herşey, birşey, tabi ki, malesef, yada...),清除 Whisper 凭空编造的内容("Altyazı M.K.", "İzlediğiniz için teşekkürler", "Abone olmayı unutmayın")。
  • 分行:最多2行,宽度在安全区内;"ve/ile/bir/yüzde" 不留在行尾或单元格末尾;"de/da, ki, mi, gibi, kadar, için" 不位于行首;数字与单位不分开;下行不应比上行短。
  • 时间标定:字幕块按单词时间戳开启;停顿0.3秒或句尾时开启新块;短于0.35秒的字幕块不闪烁;空音间隙最长0.25秒时字幕保持显示;超过每秒20字符时发出警告。

样式

temiz(句子布局,2行,柔和阴影)· kalin-vurgu(大写,1-3个单词,数字和专有名词黄色,小“pop”动画)· karaoke(行始终显示,正在唱的单词绿色,后续单词暗淡)。字体:Montserrat(OFL许可证,已随包提供)。未来可能会推出包含更多样式的Pro包;这三个样式免费且保持MIT许可。

故障排除

  • 如果 doctor 报告“libass yok”,不要担心:PIL引擎可绘制相同的布局。
  • 如果单词时间戳偏移:whisper.cpp 可能过早地标记句子开头;本工具会根据语音中的说话区域自动修复。如果效果仍不理想,可尝试 --asr faster-whisper --model medium。
  • 如果字幕位置不对,使用 --y 调整;如果文字太大/太小,修改样式的 size 值,位于 scripts/styles.py。

相关技能