把视频内嵌字幕拼成 3:4 长图(native-subtitle-quote-image)
native-subtitle-quote-image 是一个 Python 写的 Agent Skill,从带烧录字幕的视频里按时间点取帧,拼成 3:4 社交长图,分原生字幕与脚本字幕两条渲染路径。这篇文章拆开它的两种模式、命令行参数与输出产物,整理真实 Issue 里暴露的选脸与构图问题,帮读者判断手头的视频源和内容流程适不适合用它。
做影视、访谈类内容的人常要把一段视频里最有分量的几句话截成图发出去。字幕原本就烧在画面上,OCR 一遍再按识别结果重绘,字形跟原片对不上,还容易出岔子;手抄台词再排版,画面只剩一张摆拍,跟原始视频的关联断了。这个项目处理的是中间那一步:从真实画面里取帧,让字幕保持它本来的样子。
native-subtitle-quote-image 是 Python 写的 Agent Skill,把本地视频或 YouTube 链接里烧录的字幕按时间点取帧,拼成 3:4 社交长图,给需要给影视、访谈内容配图的人用。
仓库在 https://github.com/chengyi-ai/native-subtitle-quote-image ,MIT 许可证,语言是 Python(占比 100%),当前 2634 Star、261 Fork、7 个开放 Issue,最近一次提交在 2026-10-12,仓库体积约 12 MB。

它不做什么
- 原生模式不做 OCR。图里的字只能来自视频像素,不识别、不重绘、不翻译改写。视频如果只有可开关的字幕轨(关掉播放器 CC 就没了),Agent 会先说明限制,经你同意后才改用脚本模式。
- 脚本模式的字不冒充原字幕。成图里的台词来自你审核过的
lines[].text,属于后期字幕,不作为人物的逐字引语。 - 不做语音转写。项目不负责把语音转成文字,脚本模式要你自己准备带时间点的台词内容。
- 不负责选题和文案。仓库主流程只覆盖渲染环节;选题门槛、领域权重、画面对标、发布合规这些规则,有用户在 Issue 里提出散落在外部工作区文档、期望随仓库分发,这条 Issue 标记为已解决。
- 产出是 JPG。输出为逐张图片与总览图,不做视频成片。
用之前先准备好什么
- Python 3 环境,用
pip安装skills/native-subtitle-quote-image/requirements.txt。 - 一个支持 Agent Skills 目录格式的 Agent,比如 Codex 或 Claude Code;不走 Agent 也能直接跑脚本。
- 要处理 YouTube 链接,另装
yt-dlp:python3 -m pip install -U "yt-dlp[default]"。 - 画中日韩台词需要系统里有可用字体,用
check_environment.py --script-mode检查。 - 输入视频:原生模式要求字幕已经烧录在画面里。仓库里也有一位用户提问说,带烧录字幕的视频不太好找,这条 Issue 目前待解决。
- 脚本模式:一份你核对过、带时间点的中文台词。
主要功能
命令行脚本是 skills/native-subtitle-quote-image/scripts/native_subtitle_stitch.py,下面几个子命令各自负责一段。
- 原生字幕拼图
render:按 manifest 渲染一组成品,字幕条直接从画面像素裁切。用法:render VIDEO --manifest manifest.json --out-dir output-v1 --band-top 0.78 --band-bottom 0.96。字幕裁切区域必须先确定,仓库建议先用band预览。 - 脚本字幕拼图
render-script:把你审核过的台词画到真实画面上。固定布局的主图约占 70%,台词用--speaker-prefix可以加说话人前缀(v2.6.0 新增)。 - 候选帧总览
sample:生成带时间点的候选帧拼图,省得反复试时间点。用法:sample VIDEO --start 30 --end 120 --interval 5 --out candidate-contact-sheet.jpg。不传时间范围时,会在整段视频里均匀抽取最多 24 帧;已经知道大概时间点,可以用-t 61.2 -t 68.9 --around 0.8围绕每个点取前、中、后三帧,避开字幕切换的瞬间。 - 字幕区域预览
band:确认字幕的裁切带。用法:band VIDEO -t 61.2 --band-top 0.78 --band-bottom 0.96 --out band-preview.jpg。 - 源视频自检
check-source:检查分辨率并解码前 10 秒,坏流或低清在抽帧前就失败。用法:check-source VIDEO --min-height 720。不传--min-height时低于 720p 只警告。 - 环境自检
check_environment.py:用--url-mode检查 URL 流程依赖,用--script-mode检查字体。这一步是只读的,不会自动安装或修改任何软件。 - 按卡缩放主图
--hero-zoom:v2.8.0 新增,按卡缩放主图,用来缓解固定机位源整组图看起来都一样的问题。 - 抽帧临时目录可配置:通过
--tmp-dir或环境变量NSQI_TMP_DIR指定,避免受限环境下系统 Temp 目录触发权限问题(v2.7.0 新增)。
如果走 Agent,不用记这些命令,直接一句话调用即可,Agent 会先检查来源、字幕类型和候选帧,确定模式后再生成。
安装与最短示例
先把仓库拉下来,把 Skill 目录复制到 Codex 的 Skills 目录,再装依赖并自检。
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/
python3 -m pip install -r skills/native-subtitle-quote-image/requirements.txt
python3 skills/native-subtitle-quote-image/scripts/check_environment.py
Windows PowerShell 的另一套写法,以及 Claude Code、Codex Skill Installer 的安装方式,仓库 README 里都给了单独的命令块。升级时要先删除旧目录再复制,否则新版本已经删掉的文件会残留。用 Claude Code 的话,把路径里的 .codex 换成 .claude。
装好之后重开一个 Agent 任务,说一句话就能跑:
使用 $native-subtitle-quote-image,把这个带内嵌中文字幕的视频做成原生字幕拼图。
不想经过 Agent,直接跑命令行也可以。最短的一条是原生字幕渲染,前提是先用 band 确认裁切区域、用 sample 挑好时间点:
python3 skills/native-subtitle-quote-image/scripts/native_subtitle_stitch.py render VIDEO \
--manifest manifest.json --out-dir output-v1 \
--band-top 0.78 --band-bottom 0.96
关键参数
--manifest:原生模式要渲染哪些句子、每句取哪个时间点,都写在 manifest JSON 里。--out-dir:成品输出目录。--band-top/--band-bottom:字幕条在画面里的上下边界,用 0~1 的相对比例表示,0.78与0.96是文档示例值。--min-height:源视频的最低高度门槛,示例里用 720。--start/--end/--interval:均匀抽帧的起止时间与间隔,单位是秒。-t/--around:指定时间点列表,以及围绕每个点取前后多少秒。--hero-zoom:按卡缩放主图。--speaker-prefix:脚本字幕模式的可选说话人前缀。--tmp-dir与环境变量NSQI_TMP_DIR:抽帧临时文件目录。
另外 check_environment.py 支持 --url-mode 和 --script-mode 两个开关,分别检查 URL 流程依赖和字体。参数之外的行为约定,仓库里没有说明的部分不要自己推测。
结果在哪里看
渲染完成后,输出目录里会有逐张 JPG,比例符合所选布局。原生模式还会生成 原生字幕时间点.json,记录每张图对应的时间点;脚本模式输出的则是 lines JSON。多图任务会附带一张 final_contact_sheet.jpg 总览图,用来一眼检查整组。抽帧和预览阶段的产物,则分别落在 sample 和 band 命令指定的文件名上,比如 candidate-contact-sheet.jpg 和 band-preview.jpg。
实际使用中的坑
- 双人同框时主图会钉到主持人。选帧按人脸面积占比打分,主持人和嘉宾同框时区分不开。用户复现说双人对谈源六张里 5 张选到主持人,舞台宽景源六张全部选到舞台另一侧的人。期望增加「单人约束」模式,目前这条 Issue 待解决。
- 主图缺构图约束,常见切头顶和贴边。选帧只看人脸面积占比,不校验构图位置,成图会出现头顶被切、下巴贴住条带边缘、脸偏到画面一侧、垂直位置过低或过高。同一套六张里的构图基准也不一致。这条 Issue 同样待解决。
- 简中 Windows 下测试大批失败。在默认编码为 GBK 的 Windows 上,73 项测试里有 17 项 error,原因是文本 I/O 没显式指定 UTF-8。已在 v2.6.1 修复,改成显式使用 UTF-8。
- 下载链会静默降级到低清。1080p 失败时格式回退链会退到 360p 并默默接受,同一源的 AV1/H.264 变体可能返回 403,个别老节目源码流损坏,下载后解码报错、渲染阶段直接崩。这条 Issue 已解决。
同类项目
| 项目 | 适合谁 | 部署方式 | 主要限制 | 什么情况下选它更合适 | 项目地址 |
|---|---|---|---|---|---|
| native-subtitle-quote-image | 做影视、访谈、播客类账号,需要给观点配真实画面截图的运营 | 把 skills/ 目录复制进 Agent 的 Skills 目录,再用 pip 装依赖;也可直接跑 Python 脚本 | 产出只有静态 JPG,不剪辑视频;原生模式要求字幕已烧录进画面;URL 模式依赖 yt-dlp | 手里有带烧录字幕的视频,要的是保留原字幕的 3:4 静态长图,并希望每张图的时间点可追溯 | native-subtitle-quote-image |
| MartinDelophy/ai-video-editor | 需要在时间线里手动精修、且希望人和 Agent 编辑同一个工程的内容创作者 | 仓库没有说明 | 未逐一核实 | 目标是剪出可发布的视频成片,而不是出一批静态图时 | MartinDelophy/ai-video-editor |
| linzzzzzz/openclip | 要从长视频里自动挑出高光片段的人 | 仓库没有说明 | 未逐一核实 | 需要的是自动提取精彩片段,而不是把字幕固定成图时 | linzzzzzz/openclip |
这两条是同一赛道里能解决部分相同问题的项目。如果你的目标是拿到一个能直接发布的视频成片,或者需要在时间线上手动剪辑,native-subtitle-quote-image 帮不上忙,它只输出静态 JPG 长图,不剪视频也不自动挑高光,这种需求应该去看 ai-video-editor 或 openclip。反过来说,你只需要真实画面配原字幕的社交图,它在字幕来源标识和时间点记录上比通用视频工具更专门。
合规与授权边界
项目用 yt-dlp 抓取带字幕的视频源,这一步只能在自有素材或已获授权的目标上使用。未经许可下载、二次分发他人视频,可能违反平台服务条款,也可能触及著作权;成图里出现的画面、字幕、台标都属于原权利人。仓库示例提到,其中一张原生字幕作品的字幕来自 Bilibili 搬运版,左上角还带着原视频平台水印,这类素材直接商用风险很高。
还有一条与合规直接相关:源片自带电视台角标时,成图默认不处理角标。有用户提出希望增加角标区域模糊或遮盖开关,并默认关闭、由用户自行决定,同时在文档里说明版权与合规提示。取舍责任在使用者这边,不是所有角标都能遮。
适合谁
- 适合用 Codex 或 Claude Code 做内容生产的人:上游 Skill 负责选题写稿,这个 Skill 负责时间点、真实画面、字幕来源标识和质检,两边能接上。
- 适合手上恰好有烧录字幕片源的影视、访谈类账号,尤其是需要画面证据感、不希望字幕被识别重绘的场景。
- 适合只需要静态配图、不需要视频成片的人,命令行五个子命令加一个 manifest 就能对齐整个流程。
- 不适合要剪视频成片的人,做不到。
- 不适合只有可开关字幕轨的视频源,得改用脚本模式,且要自己准备已核对的台词。
- 不适合指望它自动转写、自动挑句的人,选句这一步仍然需要人来做判断。
焚评:这个项目的量化评分
本项目的选题来自 焚.com(一个按公开公式给 GitHub 项目打分的站)。焚评当前总分 9.1 分(满分 10)。下表是各维度的得分:
| 评分维度 | 得分 |
|---|---|
| 热度动量(权重 25%) | 10.0 / 10 |
| 开发活跃(权重 25%) | 7.2 / 10 |
| 社区响应(权重 15%) | 10.0 / 10 |
| 文档质量(权重 15%) | 8.5 / 10 |
| 发布节奏(权重 10%) | 10.0 / 10 |
| 风险控制(权重 10%) | 10.0 / 10 |
评分口径、权重与计算方式见焚.com 的评分方法页;数据随 GitHub 指标刷新,具体数值以焚.com 当前页面为准。本文正文为诀.com 独立撰写,评分数据由焚.com 授权引用。
内容核验说明
收录它是因为它把一个具体环节写清楚了:字幕已经烧录时,从真实画面取帧拼成 3:4 长图,原生与脚本两条渲染路径分开讲。子命令、参数、产物、限制都列全,也把 Issue 里暴露的选脸和构图问题摆到明面上。适合做影视、访谈类配图,且希望字幕保持原样的人;但选脸与构图尚未解决,动手前先确认自己的片源类型。仓库指标与焚评分数来自公开披露,未独立验证。
文中的 Star、Fork、Issue 数量、版本号、命令行行为、Issue 案例与焚评分均来自仓库及焚.com 的公开披露,诀.com 未独立验证;AutoClaw 团队在 Issue 中报告的任务结果属其自述,未经本站复测。选脸与构图的复现结果不保证在其他片源上重现。用户反馈摘要
根据仓库 Issue 来看,反馈集中在选帧与稳定性。提交者报告双人同框时主图常选到主持人,六张里可达 5 张,期望加单人约束与手工指定时间点,该问题状态为待解决;构图切头顶、贴边同样未约束。已解决的包括简中 Windows(GBK)下 73 项测试 17 项 error,v2.6.1 改为显式 UTF-8,下载链静默降级到 360p,韩文台词默认字体可能显示方框。另有提交者提出补内容规范、版本号与端到端入口、固定机位版式单一等改进。
基于该仓库公开 Issue 整理,只反映提交者报告的现象与诉求,不代表诀.com 立场,也不代表问题已被确认。项目来源与说明
开源项目:chengyi-ai(chengyi-ai)
本文由诀.com 编辑基于该项目的公开信息独立撰写,属原创解读,不是对项目文档的翻译或转载;文中提到的功能与参数以官方仓库为准,代码与文档版权归原作者所有。
查看项目仓库