剪映批量导出自动化:AutoHotkey、draft_content.json 和 FFmpeg 三种方案

三种方案对比

方案适用场景优点缺点
AutoHotkey 模拟 UI几十个工程、保留特效最稳、兼容所有剪映功能慢、易被 UI 改版搞炸
修改 draft_content.json矩阵号、批量换素材/文案工业化效率高剪映 6+ 有加密问题
FFmpeg / MoviePy图片转视频、批量混剪服务器可跑、不依赖剪映无法保留剪映特效

方案一:AutoHotkey(最稳)

适合”几十个工程挨个导出”的场景,不需要了解剪映内部格式:

Loop, Files, D:\jianying_projects\*.draft
{
    Run, "C:\Program Files\JianyingPro\JianyingPro.exe" "%A_LoopFileFullPath%"

    Sleep, 10000

    ; 点击导出按钮(坐标需根据实际分辨率调整)
    Click, 1800, 1000

    Sleep, 3000

    ; 点击确认导出
    Click, 1700, 950

    ; 等待渲染完成
    Sleep, 60000

    WinClose, 剪映专业版
}

坐标需要根据自己的屏幕分辨率和剪映版本调整。可以用 AHK 内置的 MouseGetPos 命令在悬停时获取当前坐标。

方案二:修改 draft_content.json(矩阵号核心)

剪映草稿本质是 JSON,位于草稿目录下的 draft_content.json。批量替换流程:

模板工程

Python 复制草稿目录

修改 draft_content.json(替换素材路径/字幕文本)

生成 N 个草稿

AutoHotkey 自动打开逐个导出

Python 批量复制并替换字幕示例:

import shutil
import json
import re
from pathlib import Path

template = Path("D:/drafts/template")
output_base = Path("D:/drafts/output")

texts = ["第一集内容", "第二集内容", "第三集内容"]

for i, text in enumerate(texts):
    dst = output_base / f"episode_{i+1}"
    shutil.copytree(template, dst)

    draft_file = dst / "draft_content.json"
    data = json.loads(draft_file.read_text(encoding="utf-8"))

    # 替换字幕文本(具体字段名以实际工程为准)
    content_str = json.dumps(data, ensure_ascii=False)
    content_str = re.sub(r'"占位文本"', f'"{text}"', content_str)

    draft_file.write_text(content_str, encoding="utf-8")

注意:剪映 6+ 加密问题

从剪映专业版 6.x 开始,draft_content.json 部分字段开始加密,很多老方案失效。目前社区常见的做法:

  • 锁定在剪映 5.9 不升级
  • 使用开源项目如 pyJianYingDraft 或 capcut-cli

方案三:FFmpeg(不经过剪映)

如果只是图片转视频、批量加字幕、批量合并,完全不需要剪映:

# 图片+音频合成视频
ffmpeg -loop 1 -i cover.jpg -i bgm.mp3 \
    -shortest \
    -vf "scale=1920:1080" \
    output.mp4

# 批量处理(bash)
for img in *.jpg; do
    ffmpeg -loop 1 -i "$img" -i bgm.mp3 -shortest -vf "scale=1920:1080" "${img%.jpg}.mp4"
done

FFmpeg 的缺点是没有剪映的智能字幕、卡点、AI 特效,对”剪映味”的视频替代不了。

实际推荐路线(混合方案)

Python 改草稿 JSON(批量换内容)
+
剪映负责特效渲染
+
AutoHotkey 自动导出

剪映最有价值的是特效引擎和 AI 功能,时间轴批量生成用代码做,特效用剪映渲染,导出用自动化点击。这是目前短视频矩阵账号的主流技术路线。