把一个视频链接丢给 JZSub,它会自动帮你把最高画质的视频文件、视频封面、以及由 GPT 生成的中英双语字幕整合在一起,最终输出一份带字幕烧录的 MP4 文件,全程基本不用你动手。
支持的站点
- YouTube
- Bilibili(哔哩哔哩)
- Vimeo
- Twitch
- Dailymotion
- TikTok
此外,只要 yt-dlp 能识别的网站,JZSub 一般也能处理。不过具体能不能下载、能不能拿到字幕、需不需要登录,最终还是要看对应平台的规则。
核心能力一览
- 极致画质:自动挑选平台上可用的最佳视频流和音频流,能无损封装的情况下直接封装成 MP4。
- 按需交付:通过
--deliver参数,你可以选择四种交付方式——完整烧录版、只要视频(含平台原始字幕文件)、只要原始字幕、或者只要翻译好的双语字幕文件。 - GPT 双语字幕:把字幕拆成紧凑的小批次进行翻译,批次之间会带上下文衔接,最后再按句子边界重新切分。原文保持原样不动,默认翻译成中文,也可以通过
--target-lang指定日语、法语等任意语言。 - 字幕自动烧录:使用 MiSans 字体、底部双语堆叠排版、自适应竖屏布局、精确背景框、由 libass 渲染输出。
- 轻量运行:模型只读取紧凑后的字幕文档,不会一次性加载完整清单;烧录过程每完成 5% 就汇报一次进度。
- 封面自动抓取:从平台直接拉取封面图,并自动转成通用的
封面.jpg,你不用再手动截图保存。 - 静默登录:遇到需要登录才能下载的内容时,直接读取本地 Chrome 浏览器里的登录态,不会把 Cookie 导出到别处。
- 没字幕也能跑:万一平台没有提供字幕,JZSub 也不会卡住,它会正常交付视频、MP4 和封面。
Text烧录 [██████████░░░░░░░░░░] 50% 01:11 / 02:23 0.68x实际效果对比
横屏视频
原片与 JZSub 双语字幕烧录后的效果对比:
- 左:下载下来的原始视频
- 右:JZSub 处理后带原文 + 中文双语字幕的成片

竖屏视频
YouTube Shorts 竖屏原片与 JZSub 竖屏双语字幕成片对比:

- 左:没有字幕的原始竖屏视频
- 右:JZSub 处理后的竖屏双语字幕成片,竖屏模式下会自动使用更紧凑的字号、留出更大的底部安全区
截图来自视频 Parking Sensor (DIY)。
封面自动获取
JZSub 会自动从平台选一张最合适的封面图,转成通用 JPEG 格式,作为 封面.jpg 跟视频一起交付,不用你再单独从网页上另存图片。

在 Codex 里使用
推荐方式:npx 一键安装
Bashnpx skills add pengchujin/jzsub --skill jzsub -g -a codex -y要求 Node.js 18 及以上版本。执行后会自动从 GitHub 拉取最新版本,并把 JZSub 全局安装到 Codex 里。
手动安装
Bashgit clone https://github.com/pengchujin/jzsub.gitmkdir -p ~/.codex/skillscp -R jzsub/skills/jzsub ~/.codex/skills/触发任务
在 Codex 的新任务里发送:
Text$jzsub https://www.youtube.com/watch?v=VIDEO_IDJZSub 会一路把下载、模型翻译、字幕渲染、烧录和交付检查全部跑完。翻译是通过紧凑队列逐批推进的,不会把整个字幕清单一次塞给模型,也不会停在只下完视频的中间状态。
默认的中文交付物包括 封面.jpg 和 双语字幕版「视频名」.mp4 两个文件,文件名由下载清单统一声明,续传和最终交付验证都使用同一套命名。
按需交付(--deliver)
你可以在 Codex 里直接告诉 agent 你需要什么,它会自动选择对应的 --deliver 目标;也可以手动调用脚本:
Bashpython3 skills/jzsub/scripts/fetch_video.py "<url>" \ --output-dir job --deliver video --browser-cookies auto
| 目标 | 说明 | 产出物 |
|---|---|---|
full(默认) | 跑完整流水线 | 视频、封面、字幕、双语烧录 MP4 |
video | 只要视频,不翻译、不烧录 | 视频、封面;平台有字幕时也会保存原始字幕文件 |
subs | 只要字幕,不下视频流 | 原始字幕 + 衍生 SRT |
bilingual-subs | 只要双语字幕文件 | 原始字幕 + 翻译渲染的双语 SRT/ASS,不下载视频 |
video 和 subs 走的是“下载完就结束”的流程;full 和 bilingual-subs 则会继续往下走翻译流程,交付检查会按你声明的目标来判断是否完成。如果选了 subs 类的目标,但平台恰好没有合适的字幕,JZSub 会明确报错而不是静默交付空文件。