Communitygithub.com

Chengfeng Export — 컷·줌·자막·오버레이를 MP4 하나로 번인

완성된 토킹헤드 영상을 렌더링: 컷 장부, 펀치인 줌, 자막, HTML 비주얼 레이어를 한 번에 mp4로 번인. 먼저 dry-run으로 길이·프레임 수·자막 화면 수·레이어를 확인한 뒤 조립 → 오버레이 → 합성 → 검증. Google Chrome과 ffmpeg 6 이상 필요.

Chengfeng Export — 컷·줌·자막·오버레이를 MP4 하나로 번인란 무엇인가요?

숏폼 편집 레시피 3단계(내보내기): video-skill-ku-chengfeng-export. 실제로 픽셀을 그리는 유일한 단계로, 그 전은 모두 실시간 미리보기되는 주석. 자막이나 레이어가 잘린 단어를 가리키면 경고를 그대로 보고하고, 기본값은 2배 크기·원본 프레임레이트이며 디버깅용 중간 프레임도 보관 가능.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/2789927464king-jpg/video-skill-ku/tree/HEAD/chengfeng-videocut-skills/plugins/chengfeng-videocut/skills/chengfeng-export

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

导出(成片)

这是链条最后一段,也是整个产品里唯一一个真正画出像素的地方。

在它之前全部是标注:账本记「播哪些词」,字幕记「屏上写什么」,画面记「盖什么层」, 预览把这三样实时拼给人看,不落盘。导出把它们烧成一个文件。

需要   edit-list.json(必须)、subtitles.json、visuals.json + modules/
产出   成片.mp4

前提工具:机器上有 Google Chrome(用来把字幕和动画画成图)。桌面安装来源的 FFmpeg / FFprobe 已随 App 进入 Product 受管目录;纯 CLI 安装仍要求系统 ffmpeg ≥ 6。缺 Chrome 会明确报错,不要试图绕过——没有它就没有字幕层和动画层。

先读取并执行 业务 Skill 的阶段合同 里的「结论等级」一节。导出不进剪辑状态机:它不改任何项目文件、不做 CAS 写入、 不推进 stage,产出是一个新文件,重跑一次就覆盖。所以它不需要确认卡。

0. 就绪

先执行 检查更新 的「就绪检查」——skills 是否 最新、Runtime 是否配套;插件根也在那里定位(本文命令里的 <插件根> 都代入 那个字面路径)。只有「就绪」才继续;「需新会话」或「停」按它的处置执行 (含「禁止自制替代界面」禁令),业务 Skill 不自带环境逻辑。

若就绪结果为 runtime.kind=desktop-managed,直接复用桌面 App 已安装的稳定 CLI、 媒体工具与同一 launchd/windows-task 服务;不要解析 Electron 路径、另装 FFmpeg/Bun 或起第二个 Runtime。

命令

node "<插件根>/scripts/ensure-running.cjs" --json
node "<插件根>/scripts/videocut-cli.cjs" export <project> --dry-run --json          # 先看计划,不编码
node "<插件根>/scripts/videocut-cli.cjs" export <project> --json                    # 出成片(默认 2 倍、源帧率)
node "<插件根>/scripts/videocut-cli.cjs" export <project> --out /path/成片.mp4 --json
node "<插件根>/scripts/videocut-cli.cjs" export <project> --scale 1 --json          # 只要源尺寸
node "<插件根>/scripts/videocut-cli.cjs" export <project> --keep-work --json        # 留下中间片和逐帧 PNG,供排查

ensure-running 身份不匹配、端口冲突或服务不健康时立即停止;不允许用 foreground 临时顶替后继续导出。

两步,别只跑第二步

① --dry-run 先报计划    片长、帧数、字幕屏数、画面层数、推近段数、输出尺寸
                       念给用户听。数字不对就是上游不对,编码十分钟不会修好它
② 真跑                 assemble → overlay → compose → verify 四段进度

--dry-run 里的 warnings 必须原样转述。它只报一类事:某些字幕屏或画面层的词 已经被剪掉了,所以它们不会出现在成片里。这是上游要决定的事,不是导出该替人吞掉的。

清晰度:源片是天花板,先看源再谈放大

导出前看一眼源分辨率(--dry-run 的 source 字段就有):

源宽 ≥2560(Retina 原生录屏)  → --scale 1,输出就是原生像素,这是最好的情况
源宽 <1920(如 960×720)      → 先停一下:问用户有没有同一次录制的高清导出。
                              录屏工具常常能把同一次录制重新导出成 3 倍分辨率,
                              换源比任何后期都管用(见下节)。确实没有 → --scale 2

--scale 2 对低清源有用的原因:底片放大不会变清楚,但字幕和动画是按输出尺寸 重画的——观众真正在读的就是这两样;平台再压一次时,大图分到的码率也更高。

不要为了「更清晰」去调 --fps。 帧率跟着源片走;改它只会让动画的采样和录屏对不上。

换源:用户拿出同一次录制的高清版时

这不是导出流程的一部分——导出本身永远只读。换源是用户明确点头后的独立素材操作, 做完再回来正常导出。

先判定是不是同一条(前两条就足够硬):

ffprobe -v error -show_entries format=duration -of csv=p=0 <两个文件>   # 时长精确到毫秒相同
ffmpeg -v error -i <文件> -map 0:a:0 -c copy -f md5 -                  # 音频流逐位相同
# 再抽两三帧对比画面内容,眼睛确认

音频逐位相同 = 时间线相同:逐词稿、账本、字幕、画面层全绑词 id,一个不用动。 这正是「绑词不绑秒」在换源这件事上的兑现。

换源四步(2026-07-29 真实走过一次;第 ③ 步当时漏了,剪辑预览当场报 「生成失败」——指纹记录不止一处,grep 旧指纹找全再动手):

① 换文件      input/source.mp4 和 uploads/source.mp4 是硬链接对 ——
              删两个,拷新文件到 input/,再建硬链接回 uploads/
              (macOS 用 ln;Windows 用 New-Item -ItemType HardLink)
② 更新指纹    project.json 的 source.sha256 改成新文件的
③ 再查一处    workbench.json 的 sourceSha256 也记着源片指纹,
              剪辑预览管道校验的恰恰是这本 —— 漏了它,预览拒绝生成
              (这是产品的正确行为:指纹对不上宁可失败,不拿旧预览冒充)
④ 重导        --scale 1 —— 换源就是为了原生像素,别再放大

保险做法:用你的搜索工具在 <项目目录> 的全部 *.json 里找旧指纹前 8 位, 列出来的每一处都要处理(缓存记录如 preview-edited/current.json 会自动重算,不用手动改)。

音频不同(重新录了一遍、剪过、时长不一样)就不是换源,是新项目: 逐词稿要重新转,所有标注作废。别硬套。

验收:三件事,缺一件就不算导出完成

① 命令成功返回        产品自己数成片的尺寸、帧数、音轨,和计划逐项比。
                     对不上就是 readback_mismatch 报错,文件留在盘上当证据,
                     不算导出完成
② 抽帧看像素          从成片里抽帧,用眼睛看。至少覆盖:一个推近段、
                     一个整屏动画段、一个只有字幕的段、一个层与层的边界
③ 人耳听感            没人真的听过,一律记 human listening UNVERIFIED

② 不许用预览截图代替。预览和成片是两条渲染路径,验收要看的正是它们对不对得上—— 拿预览的图当成片的证据,等于把要验的那件事当成了前提。

判推近要找判别性地标,整体印象会骗人(2026-07-29 真踩过):1.6 倍推近后的 屏幕页面看起来仍像"一整页",缩略图上和全景几乎没差别——曾把正确的推近帧误判成 "推近丢了",白追半小时、重导两次。正确判法是找只有裁剪才能造成的证据: 被裁掉一半的元素(气泡从中间断开)、消失的边缘元素(侧栏、标题栏)。 和源片同刻帧对比一眼定案。

抽帧就用 ffmpeg:

ffmpeg -v error -ss 8.84 -i 成片.mp4 -frames:v 1 -y frame.png

出问题往哪查

--keep-work 会在项目的 .chengfeng-videocut/export/ 下留三样东西, 它们把「哪一半错了」直接分开:

assembled.mkv    只有剪辑,没有任何盖的东西。它错 = 账本或切片错
overlay/*.png    只有盖的东西,透明底。它错 = 字幕样式或模块错
spans/*.mp4      合成后的分段。它错 = 推近或对齐错

对照表:

成片没有字幕/动画       overlay PNG 是不是全透明?模块是不是没答应 seek?
动画停在第一帧          模块没实现 seek,或者 GSAP 时间线没 paused
画面整块白             模块少了 `:root { color-scheme: dark }`
推近的框歪了            模块的 viewBox 和层的 zoom 不是同一组数
成片比计划短            某个 span 帧数不够,看 compose 阶段的报错
层边界闪一小段原片      overlay 截图陈旧(帧标记验证失效)。产品靠页面顶部的
                      帧标记条自证每张截图属于哪一帧;若复发,先确认 overlay
                      PNG 顶部有标记条、compose 有裁掉它的 crop
找不到 Chrome          装 Google Chrome,别改成别的渲染路径

不许做什么

  • 不许把「导出成功」说成「验收通过」——命令返回成功只是产品自己对得上,不是画面对
  • 不许用预览截图、DOM、日志代替成片抽帧
  • 不许没人听过就报 human listening PASS
  • 不许为了让导出跑通去改项目文件(改字幕、删层、动账本)。导出只读,不写
  • 不许在导出里补做上游的活:缺字幕就去写字幕,缺画面就去做画面,别在这一段临时糊一个

Individual skills in this repo

This repo contains 8 individual skills — each has its own dedicated page.

2789927464king-jpg/video-skill-ku

剪辑环境的唯一管理者:就绪检查(skills 是否最新 → Runtime 是否配套)、Skills 更新激活、Runtime 安装与体检。用户说检查更新、安装剪辑环境、装播放器、检查剪辑环境、剪辑环境就绪了吗、配置转录凭证时使用;业务 Skill(剪口播/字幕/画面/导出)第 0 步也引用本 Skill 的就绪检查。不用于剪辑、字幕、画面、导出本身或项目数据迁移。

2789927464king-jpg/video-skill-ku

剪辑中文口播原素材:逐词转录、词典修字出修字表、五轮扫描找口误与重复、汇总表与重复句子表、打开 Studio 让用户复核、复盘沉淀用户偏好与词典。只产出一份已复核的删词账本,不切媒体、不做字幕、不做分镜动画。用户说剪口播、处理口误、生成口播基础素材、继续剪口播,或确认卡回传 action=return_cut_review 时使用。不要用于执行物理剪切、导出剪后视频、单独安装、单独打开工作台或口播分镜成片。

2789927464king-jpg/video-skill-ku

整理、脱敏并上报 chengfeng-videocut 的 GitHub Bug。用户说上报 Bug、反馈剪口播问题、提交 GitHub Issue、这个问题告诉开发者,或要求继续提交已预览的 Bug 草稿时使用。不要用于功能建议、普通排错、代码提交或未获用户确认的自动上报。

2789927464king-jpg/video-skill-ku

给剪好的口播做字幕:直接用已有的逐词稿加账本算出剪后时间(不必导出、不必重新转录)、用词典和作者文稿改写听错的专名、按句子分屏、在 Studio 里逐屏复核。用户说做字幕、加字幕、改字幕、重新分屏、字幕不对时使用。不要用于删词剪辑、物理剪切、分镜动画或成片渲染。

2789927464king-jpg/video-skill-ku

操作 chengfeng-videocut 剪辑工作台的已有工程,通过 Runtime CLI 查工程与词句位置、添加或替换画面覆盖层、移除画面、删除明确指定的词句或片段、拆分裁剪移动已有片段、调整画布比例并回读核验。用户说插入片段、删掉这句、移除动画、换个画面、调整顺序或管理时间线时使用;先区分画面覆盖与主轨顺延插入,不负责自动判断口误、创作动画、制作字幕、导出或排查安装故障。

2789927464king-jpg/video-skill-ku

Create Ian Xiaohei-style HTML/SVG motion illustrations for Chinese articles, scripts, storyboard scenes, workflow explanations, concept metaphors, and short video visual aids. Use when the user asks for 小黑 SVG、漫画感 HTML、分层 SVG 动效、把小黑生图做成 HTML/SVG、可编辑矢量动效、口播流程动画、手绘漫画动效、正文配图动画, or wants a Xiaohei illustration style adapted into controllable HTML/SVG/GSAP output instead of raster image generation.

2789927464king-jpg/video-skill-ku

给剪好的口播配画面:在录屏上盖 HTML 层(圈重点标注 / 小黑整屏动画 / 推近),层绑字幕屏、由播放器逐帧驱动、直接在预览里看。用户说做分镜、配画面、加动画、圈重点、B-roll、做 storyboard 时使用。不要用于删词剪辑、字幕、物理剪切或成片渲染。

2789927464king-jpg/video-skill-ku

剪映 (JianYing) AI自动化剪辑的高级封装 API (JyWrapper),提供开箱即用的 Python 接口,支持录屏、素材导入、字幕生成、Web 动效合成及项目导出。全面适配 MacOS (Apple Silicon/Intel) 与 Windows,支持 v5.9+ (draft_info.json) 架构、工程自修复、智能配音字幕及录屏变焦。

관련 스킬