尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

JianYingApi 实战:用 Python 驱动剪映,5分钟搭一条视频批量流水线

JianYingApi 实战:用 Python 驱动剪映,5分钟搭一条视频批量流水线 JianYingApi 实战用 Python 驱动剪映5分钟搭一条视频批量流水线【免费下载链接】JianYingApiThird Party JianYing Api. 第三方剪映Api项目地址: https://gitcode.com/gh_mirrors/ji/JianYingApi运营要每天产出 200 条商品短视频每条含主图、价格标签和一句卖点口播手工在剪映里逐条拖拽根本扛不住。JianYingApi 是一个第三方剪映 API思路是把剪映草稿当成 Python 可直接读写的 JSON 文件来操作代码批量建草稿、把素材摆上时间轴、控制出入点再交给剪映完成渲染。它到底怎么跑的草稿解析 UI 自动化剪映的每个草稿就是磁盘上一个文件夹核心是两个 JSONdraft_content.json承载轨道、素材与时间轴片段draft_meta_info.json记录媒体库资源和项目概览。JianYingApi 的实现分成两半一半是纯文件操作——新建草稿即复制blanks/下的空白模板再写入必要字段剪映加载时会自动补全缺失字段所以不必像逆向官方 SDK 那样补全所有字段另一半是 UI 自动化——用uiautomation启动并操控JianyingPro.exe处理打开草稿、触发导出这类必须走界面的环节。代码分四层Drafts.py负责文件读写Logic_warp.py管进程Ui_warp.py定位控件Jy_Warp.py做版本编排流水线只依赖最上层接口。剪映草稿 draft_meta_info.json 的结构draft_materials 按 type 组织本地媒体含 file_Path、metetype 等字段5分钟跑通第一个草稿安装与最小示例git clone https://gitcode.com/gh_mirrors/ji/JianYingApi cd JianYingApi pip install -r requirements.txtimport JianYingApi # 在剪映草稿目录新建草稿返回 Projects 对象 d JianYingApi.Drafts.Create_New_Drafts(rE:\JianyingPro Drafts\demo) # 建一条视频轨道把素材登记进媒体库 d.Content.NewTrack(TrackTypevideo) d.Meta.Import2Lib(pathrE:/assets/a.mp4, metetypevideo) d.Save() # 落盘后草稿即可在剪映中打开运行后打开剪映首页就能看到 demo 草稿。注意UI 自动化部分依赖 Windows 控件接口目前仅在 Windows 版剪映3.3.5 验证上跑通。核心能力拆解草稿与媒体库管理Create_New_Drafts 与 Import2LibCreate_New_Drafts(path)复制两份空白 JSON 并返回Projects对象其Meta、Content属性分别对应上面两个文件。Meta.Import2Lib(path, metetype)把媒体登记进媒体库metetype取video/photo/music这一步不碰时间轴。Save()会先自动重算全片总时长再写盘所以批量修改后统一调一次即可。轨道与时间轴控制以纳秒为单位的入出点NewTrack(TrackType)支持video/audio/text/effect返回的 dict 里的id是后续操作句柄。Add2Track把一个片段挂到轨道上时间控制靠两组 timerangesource_timerange是素材的取用区间target_timerange是时间轴上的起点与时长单位是纳秒1 秒 10^9这是精确剪辑自动化的基础。剪映草稿 draft_content.json 结构canvas_config 控制画布tracks 通过 material_id 与 materials 单向链接video_track d.Content.NewTrack(TrackTypevideo) mid str(uuid.uuid3(uuid.NAMESPACE_DNS, a.mp4_material)) # 基于名字生成可复现 d.Content.AddMaterial(Mtypevideos, Content{ id: mid, path: rE:/assets/a.mp4, material_name: a, type: video, category_name: local, has_audio: True, extra_type_option: 0, }) # 从素材第 2 秒取 603 秒放到时间轴 0 点 d.Content.Add2Track(Track_idvideo_track[id], Content{ id: str(uuid.uuid3(uuid.NAMESPACE_DNS, a.mp4_track)), material_id: mid, visible: True, volume: 1, source_timerange: {start: 2000000000, duration: 603000000000}, target_timerange: {start: 0, duration: 603000000000}, })素材与文本动态生成素材本质上是用AddMaterial(Mtype, Content)注册进materials的数据结构Mtype对应 JSON 里的类别键videos、photos、texts、video_effects等其id与轨道片段的material_id一一链接。文本素材把内容和样式字段写进 dict 即可配合 f-string 就能批量生成动态文案。特效素材需要effect_id与effect_resource_id在剪映里手动加一次后从草稿 JSON 里抄出来即可复用。text_id str(uuid.uuid1()) d.Content.AddMaterial(Mtypetexts, Content{ id: text_id, content: f¥{price}, # 批量场景下用模板字符串生成 })跨版本与多平台参数适配一张输出参数表画布参数在draft_content.json的canvas_config分辨率、ratio与顶层fps导出参数收敛在Jy_Warp.Export_Options里取值受限天然适合做成平台参数表平台分辨率帧率编码/容器码率竖版短视频1080x192030H.264 / mp4recommend横版长视频1920x108025H.264 / mp4higher高规格母版3840x216025HEVC / movoptionfrom JianYingApi.Jy_Warp import Export_Options opt Export_Options(export_namefinal, export_pathrE:\out, vid_quality1080, EncodeH.264, Formatmp4, Frame30)质量仅接受 480/720/1080/1440/2160编码 H.264/HEVC容器 mp4/mov帧率 24-60。导出由Jy_Warp.Instance(...)驱动剪映导出对话框并轮询进度剪映更新改坏界面时只需修这一层。场景实战电商批量生成 100 条商品视频输入商品清单CSV/JSON字段为id、name、price、主图路径。关键步骤每个 SKU 建独立草稿用uuid.uuid3基于 SKU 名生成素材 ID保证重复运行时 ID 稳定、草稿可复现主图进图片轨道占 3 秒价格文本叠在文字轨道循环跑完统一Save()。输出N 个商品草稿每条时间轴为主图 3 秒 价格文案逐条导出即得成品视频。import JianYingApi, uuid def gen_product_draft(p): d JianYingApi.Drafts.Create_New_Drafts(fE:\\JianyingPro Drafts\\SKU_{p[id]}) vt d.Content.NewTrack(TrackTypevideo) tt d.Content.NewTrack(TrackTypetext) mid str(uuid.uuid3(uuid.NAMESPACE_DNS, fSKU_{p[id]}_main)) d.Meta.Import2Lib(pathp[main_image], metetypephoto) d.Content.AddMaterial(Mtypephotos, Content{ id: mid, path: p[main_image], material_name: p[name], type: photo, category_name: local}) d.Content.Add2Track(Track_idvt[id], Content{ id: str(uuid.uuid1()), material_id: mid, target_timerange: {start: 0, duration: 3000000000}}) # 3 秒 tid str(uuid.uuid1()) d.Content.AddMaterial(Mtypetexts, Content{ id: tid, content: f{p[name]} ¥{p[price]}}) d.Content.Add2Track(Track_idtt[id], Content{ id: str(uuid.uuid1()), material_id: tid, target_timerange: {start: 0, duration: 3000000000}}) d.Save() for p in products: # products 由 CSV/JSON 读入 gen_product_draft(p)教育录播 字幕 章节标题自动合成输入章节列表每章含video录播路径、title、duration秒字幕为随片 srt。关键步骤整门课一个草稿录播走视频轨道用纳秒游标cursor逐章累进实现章节无缝拼接章节标题挂文字轨道从本章起点显示 3 秒source_timerange可裁剪每章只取需要的片段。输出章节连续排布的多轨道草稿标题自动对位srt 解析成(start, text)序列后按同样方式逐条挂轨即可导出带字幕的成片。def build_course(chapters, out_dirE:/JianyingPro Drafts/course01): d JianYingApi.Drafts.Create_New_Drafts(out_dir) vt d.Content.NewTrack(TrackTypevideo) ttt d.Content.NewTrack(TrackTypetext) cursor 0 # 纳秒游标 for i, ch in enumerate(chapters): d.Meta.Import2Lib(pathch[video], metetypevideo) mid str(uuid.uuid1()) d.Content.AddMaterial(Mtypevideos, Content{ id: mid, path: ch[video], material_name: fch{i1}, type: video, category_name: local, has_audio: True}) dur ch[duration] * 10**9 # 秒 - 纳秒 d.Content.Add2Track(Track_idvt[id], Content{ id: str(uuid.uuid1()), material_id: mid, source_timerange: {start: 0, duration: dur}, target_timerange: {start: cursor, duration: dur}}) tid str(uuid.uuid1()) d.Content.AddMaterial(Mtypetexts, Content{id: tid, content: ch[title]}) d.Content.Add2Track(Track_idttt[id], Content{ id: str(uuid.uuid1()), material_id: tid, target_timerange: {start: cursor, duration: 3 * 10**9}}) cursor dur d.Save()生产环境的坑与解法草稿资源池不要随用随建Create_New_Drafts每次都要建目录、复制模板大批量任务下建议预建池子取用时打标失败可回滚复用pool [{d: JianYingApi.Drafts.Create_New_Drafts(fE:\\JianyingPro Drafts\\pool_{i}), busy: False} for i in range(5)] def acquire(): free next((x for x in pool if not x[busy]), None) if free: free[busy] True return free[d] d JianYingApi.Drafts.Create_New_Drafts(fE:\\JianyingPro Drafts\\pool_{len(pool)}) pool.append({d: d, busy: True}) return d异常重试捕获、回滚、再跑文件读写很少失败UI 自动化窗口状态轮询、导出进度才是中断高发区。给整条流水线包一层重试失败时把池子中的草稿标记回可用import time def run_with_retry(fn, *a, retries3, delay5, **kw): for i in range(retries): try: return fn(*a, **kw) except Exception as e: if i retries - 1: raise print(f第{i1}次失败: {e}{delay}s 后重试) time.sleep(delay)版本差异把 UI 层当易耗件文件读写层跨版本稳定最先坏掉的是 UI 层——Jy_Warp.py依赖 3.3.5 的控件名Ui_warp.py甚至直接比对像素 RGB 值来判断单选框状态。适配做法把控件名、颜色常量集中成版本配置表每个新剪映版本验证一次数据层 API 保持不动UI_PROFILE { 3.3.5: {export_btn: MainWindowTitleBarExportBtn, radio_on_rgb: (0, 193, 205)}, # 新版本在此追加页面状态识别见 _detect_viewport }小结JianYingApi 把剪映草稿拆成了「稳定可写的文件层」和「易变需适配的 UI 层」前者负责批量建草稿与时间轴编排后者负责打开与导出二者解耦让批量流水线有了一致的数据入口。完整调用样例见example.py草稿字段说明见 Docs/Doc.md。上手顺序建议先跑通 5 分钟示例再把上面的电商或教育场景代码改成自己的数据格式遇到剪映版本问题优先查 UI 层配置。【免费下载链接】JianYingApiThird Party JianYing Api. 第三方剪映Api项目地址: https://gitcode.com/gh_mirrors/ji/JianYingApi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表