在 Windows 上用 pip 装 pyJianYingDraft 0.3.1,跑一遍官方 demo,59 行代码写出 5.1 秒的剪映草稿,3 条轨道和 9 类素材全落在 JSON 里。

换成读的方向就走不通:用它去读剪映 11.4.2 存下来的草稿,直接抛 DraftContentLoadFailed。

pyJianYingDraft 装完怎么生成第一份草稿?

这个库不操作剪映界面,它只往草稿文件夹里写文件。剪映下次启动扫到草稿,就等于你手工剪了一条时间轴。安装是普通 pip,依赖很少。

python -m venv jyenv
pip install pyJianYingDraft
pip show pyjianyingdraft  ->  Version: 0.3.1

官方 demo 要先准备素材,仓库里自带 4 个示例文件。把草稿目录换成一个空文件夹就能跑,不用担心污染自己的工程。

python demo.py
wc -l demo.py            ->  59
产出文件数:2
  drafts/demo/draft_content.json       20,665 字节
  drafts/demo/draft_meta_info.json      1,440 字节
步骤命令结果
装库pip install pyJianYingDraft0.3.1
跑 demopython demo.py无报错,生成 2 个文件
看产出draft_content.json20,665 字节
看元信息draft_meta_info.json1,440 字节

demo 一共 59 行(wc -l 输出 59)。它建 3 条轨道,加音视频片段和贴纸,还加了转场与文字气泡。一行代码对应剪映里的一次拖拽,这就是它能做批量混剪的原因。

生成的 draft_content.json 里有什么?

整份草稿就是一个 JSON,顶层 28 个字段,画布、帧率、时长、轨道和素材全都在这一个文件里,不用去别处找。

顶层字段数: 28
前 20 个键: canvas_config, color_space, config, cover, create_time,
duration, extra_info, fps, free_render_index_mode_on, group_container,
id, keyframe_graph_list, keyframes, last_modified_platform, platform,
materials, mutable_config, name, new_version, relationships

tracks: 3
  audio  segments=1  name=bgm
  video  segments=2  name=main_video
  text   segments=1  name=caption

轨道顺序就是图层顺序,先追加的在后面,所以音频轨写第一、主视频第二、字幕第三。素材不是直接塞进轨道,而是先归到 materials 的 9 个分组里,轨道只存引用。

materials 分组数量对应剪映里的东西
videos2视频、贴纸素材
audios1音频素材
texts1文字内容
speeds3变速参数
effects2特效
material_animations2入场动画
transitions1转场
audio_fades1淡入淡出
canvases1画布
materials 合计: 14 条
时间轴片段: 4 个(audio 1 + video 2 + text 1)
变速值: [1.0, 1.0, 1.0]

9 个分组一共 14 条素材,对应 4 个时间轴片段。3 条变速记录的值都是 1.0,因为 demo 没有改速度,这个库照样给每段都写一条。

好处是能直接用文本工具查:想知道某段视频落在第几秒、挂了什么转场,grep 一下 target_timerange 和 transition 就定位到,不用打开编辑器一个个点。

代价是字段多,28 个顶层键里有一半是剪映内部的渲染参数,改错一个就可能打不开。库把这些字段封装成类方法,正常调用不会碰到它们。

草稿里的时间为什么是七位数?

整份草稿的时间单位是微秒,不是秒也不是毫秒。5.1 秒写成 5100000,一段 0.9 秒的片段写成 900000。

duration = 5100000  ->  5.1 秒
  audio  start=0        duration=5000000  ->  5.0 秒
  video  start=0        duration=4200000  ->  4.2 秒
  video  start=4200000  duration=900000   ->  0.9 秒
  text   start=0        duration=4200000  ->  4.2 秒

音频 5.0 秒、视频两段加起来 5.1 秒,草稿总时长按最长的算。第二段视频从 4,200,000 开始,正好接在第一段 4.2 秒的尾巴上,中间不留空。

库给了 trange_seconds 和 trange 两种写法,前者收秒,后者收微秒。写脚本时混用会差 10 的 6 次方,时间轴直接飞到几十分钟外。

写法参数单位demo 里的用法
trange_seconds(0, duration=5)秒音频 5.0 秒
trange(video_segment.end, 900000)微秒贴纸接在 4.2 秒后

剪映 11.4.2 的草稿目录和库生成的不一样?

差别很大。这台机器上装的是剪映专业版 11.4.2.14459,草稿放在 D 盘的一个自建目录里。

D:/JianyingPro Drafts 下已有工程: 17 个
打开其中一个(9月13日): 23 个条目
9月13日/
  Resources/  Timelines/  adjust_mask/  common_attachment/
  agent_adoption_ledger.db      106,496 字节
  attachment_pc_common.json        575 字节
  draft_agency_config.json         154 字节
  draft_content.json             4,188 字节
  draft_meta_info.json           3,544 字节
  draft_cover.jpg
  key_value.json  timeline_layout.json  draft_virtual_store.json
  ...(共 22 项)

库生成的草稿只有 2 个 JSON 文件,剪映自己存的有 23 项,多了 Timelines 目录、SQLite 台账、封面图和一堆配置文件。Timelines 里还有一层 479 字节的 project.json,只有 7 个字段,指向一个 UUID 目录。

对比项库生成剪映 11.4.2 实存
顶层条目数223
draft_content.json20,665 字节,明文4,188 字节,加密
draft_meta_info.json1,440 字节,明文3,544 字节,加密
Timelines/project.json无479 字节
SQLite 台账无有,106,496 字节

两个文件都试过直接读,都不是 JSON。文件头是 Base64 字符,解出来也不是 JSON,说明剪映 11.4 把草稿内容加密了。

pyJianYingDraft 报 DraftContentLoadFailed 是什么原因?

库的读模板功能要求明文草稿,11.4.2 存的是密文,一步都走不下去。

folder = draft.DraftFolder(r'D:/JianyingPro Drafts')
tpl = folder.load_template('9月13日')

DraftContentLoadFailed: 草稿内容 'D:/JianyingPro Drafts\9月13日\draft_content.json'
不是合法的明文 JSON;…请通过
DraftFolder(..., fallback_loader=...) 提供后备读取器

报错里给了出路:传一个 fallback_loader 进去,自己实现解密。库本身不带解密,因为它只能支持到明文格式。

README 的支持矩阵把功能分成 5.9 和 10.8 两栏,11.4.2 不在表里。生成方向不受影响,写出来的是明文,剪映新版能不能认是另一回事;读方向直接断掉。

把生成的草稿复制进真实草稿目录后启动剪映,进程起来又自己退出,草稿索引仍是 17 条,没有收录新草稿。这一项没能验证完,下面单独说明。

pyJianYingDraft 在什么条件下会失败?

三种情况来自这次实际碰到的现象。

触发条件现象(报错原文)对应步骤
用 load_template 读 11.4.2 的草稿DraftContentLoadFailed,不是合法的明文 JSON读真实草稿
草稿目录指向不存在的路径demo 里的 assert 直接失败首次运行
把 trange 和 trange_seconds 混用时间轴长度差 6 个数量级看 duration 字段

README 的支持矩阵值得单独看一眼。它按 5.9 和 10.8 两栏列了 30 多项功能,音频声音成曲在 5.9 那栏是不生效,字体一栏两版都标着需要二次打开草稿,轨道顺序在新版上有个黄色提示。这些标注说明作者知道版本差异,只是没有覆盖到 11.4。

只在 Windows、Python 3.13、库 0.3.1、剪映 11.4.2.14459 这一种组合下测过,没在 Python 3.8 或 3.11 上复测。

  • 未验证:生成的草稿在剪映 11.4.2 里能不能正常打开。剪映启动后进程自行退出,草稿列表没加载出来,索引里也没出现新条目。
  • 未验证:批量混剪的实际效果。只跑通了 demo 的单条时间轴,没有接几百个片段跑流水线。
  • 未验证:导出。库里有 JianyingController 和 ExportResolution,但导出要驱动剪映界面,没有做。
  • 未验证:加密格式的解密。没有实现 fallback_loader,也没找到公开的解密方案。

如果你的剪映是 10.8 或更早,本文关于加密草稿的结论不适用,那条路径没有测。