Oct 22, 2026
用 native-subtitle-quote-image 把真实视频帧做成字幕长图
一个 Python agent skill,直接从视频像素裁切烧录字幕——或者把你审核过的台词画到真实画面上并标明是后期字幕——再拼成紧凑的长图,比例可按内容计算或显式指定(如 3:4),交付前逐张质检,可在 Codex、Claude Code 或命令行里使用。
字幕长图——一张主画面,下面叠一列字幕条——是社交信息流里的常客,而手工做一张意味着来回拖时间点、逐像素裁字幕条。3k 星的 chengyi-ai/native-subtitle-quote-image 仓库——README 以中文为主,另有英文和韩文版本——把这件活打包成一个 agent skill:视频进来,原生或脚本字幕长图出去,交付前逐张检查。
为什么这个 Skill 重要
README 的定义性规则是两种字幕,从不混用。原生模式只裁切画面里本来就有的字幕——只用视频像素本身,不 OCR 重绘,不翻译改写。脚本模式把你审核过的台词画到真实画面上,并标明是后期字幕;它的文字只能来自你提供的 JSON 里审核过的 lines[].text。命令分别是 render 和 render-script,如果你没有指定模式,agent 会先问,用一句话解释两者区别,再等你选择。版式刻意紧凑:原生字幕先拼源像素,再统一缩放,不会单独放大第一句;脚本固定布局的主图约占画布 70%;字幕条之间没有空隙。
它支持三种工作方式:本地成片,不需要 yt-dlp;URL 完整流程,用 yt-dlp 获取你有权处理的视频、元数据和辅助字幕轨;以及作为内容生产的最后一环——上游 skill 负责选题和写稿,本 skill 负责时间点、真实画面、字幕来源标识和质检。
安装
克隆仓库,把 skill 目录复制到你的 agent 的 skills 文件夹——README 的主路径是 Codex:
git clone https://github.com/chengyi-ai/native-subtitle-quote-image.git
cd native-subtitle-quote-image
mkdir -p ~/.codex/skills && cp -R skills/native-subtitle-quote-image ~/.codex/skills/
Claude Code 把 .codex 换成 .claude;README 还记载了 Windows PowerShell 的对应命令、Codex Skill Installer 的路径,以及面向其他读取开放 Agent Skills 目录格式的 agent 的"直接复制目录"路线。升级时先删除旧目录,免得上游已删除的文件残留。然后安装 Python 依赖并运行只读的环境自检:
python3 -m pip install -r skills/native-subtitle-quote-image/requirements.txt
python3 skills/native-subtitle-quote-image/scripts/check_environment.py
要处理 YouTube 链接,再装 yt-dlp 并用 --url-mode 重跑自检;要画中日韩台词,用 --script-mode 检查字体。自检不会自动安装或修改任何软件——缺组件时,agent 会先说明用途,征得你同意再装。依赖表把 Python 3.10+、Pillow 和 imageio-ffmpeg 或 FFmpeg 列为两种模式都必需;yt-dlp 和 Deno(或显式启用的 Node.js)是 YouTube 必需;CJK 字体只在中日韩脚本模式下需要。
实战:从烧录字幕视频出原生字幕长图
- 重开一个 agent 任务,用 README 的一句话调用(
$写法是 Codex 的;在 Claude Code 里用/native-subtitle-quote-image,或者直接描述需求):
Use $native-subtitle-quote-image to turn this video with burned-in subtitles into native subtitle quote images.
- agent 会先检查来源、字幕类型和候选帧,确定模式后再生成:符合所选布局的逐张 JPG,原生模式的
原生字幕时间点.json(脚本模式则是linesJSON),以及多图任务的final_contact_sheet.jpg总览图。
如果你更想自己跑脚本,README 的原生路径是三条命令:sample VIDEO --start 30 --end 120 --interval 5 --out candidate-contact-sheet.jpg 生成带时间点的候选帧总览(不传范围时会在整段视频里均匀抽取最多 24 帧),band VIDEO -t 61.2 --band-top 0.78 --band-bottom 0.96 --out band-preview.jpg 确认字幕的裁切区域,然后 render VIDEO --manifest manifest.json --out-dir output-v1 --band-top 0.78 --band-bottom 0.96。原生单行字幕默认从视频高度的 0.78–0.96 区域开始预览。
技巧
- 每张图最多 7 个时间点——1 个主画面加 6 个字幕条——两种模式相同;台词更多时拆成多张图。默认不覆盖已有图片,确实要替换时加
--overwrite。 - 出图前两种模式都会检查重复画面:所有时间点画面几乎相同(比如源视频只是一张静态封面图),或原生模式相邻两条字幕条几乎相同时,直接报错、不出图。确认无误时加
--allow-duplicate-frames。 - 脚本模式有
--six-line-card预设(6 句已核对、时间点严格递增的台词,1080×1440 画布上 870px 主画面加下方 5 条各 114px 的连续字幕条)、面向访谈的--speaker-prefix on-change(只在换人时画出说话人前缀),以及给某一句做强调的--emphasize-line last。 - 固定机位视频是高风险素材——六张主图几乎一样。README 的办法是
--hero-zoom 1.0,0.9,0.95,每卡主图缩放系数,范围 0.8–1.0,并提醒这是裁切后放大,不等于真实清晰度提升。 - 批量
render默认遇到失败就中止;--keep-going把失败清单写入渲染失败报告.json并以非零退出码结束,之后--resume只补渲缺失或损坏的图。
何时不用这个 Skill
适合与不适合的表格写得很明白。如果视频只有可单独开关或下载的字幕轨,原生模式做不了——关掉 CC 后画面是干净的——agent 只会在你同意后改用脚本模式。未复核的台词或翻译不行:脚本字幕的文字是你审核过的 JSON,从不是来源里没说过的引语。低清视频也不会被"增强"成真实的高清画质。README 还要求素材优先用自己拍摄并加过字幕的视频、已获授权的素材,或明确允许再利用的公开视频,并在公开发布前再确认一遍使用权。
查看 排行榜 了解更多 skill。