技巧分享-针对视频剪辑软件-JSON草稿数据的恢复与保护
1. 介绍
近期进行了AI生成视频剪辑能力的开发,其中使用到了 pyJianYingDraft 这个项目,项目中有一个特殊的要求,必须使用 5.9 以下的剪辑工具才可以。
这样做就比较繁琐,需要找到对应的版本,另外不同操作系统下,互联网分享的版本也是查找比较困难。Windows 上 5.9 版本的软件还算好找,而 Mac OS 中的对应版本就比较难找。
结合使用情况,我来分享一下为什么必须使用 5.9 版本,以及新版本的内容出现了什么样的变动,我们应该如何应对。对于误操作升级了版本之后,打开文件再也无法处理的问题,进行分享。
1.1 为什么必须使用 5.9
因为剪辑5.9以前的版本 draft_content.json 文件是一个纯文本JSON,没有经过加密处理,所以使用各种第三方库可以方便的进行解析、生成;
剪辑6.0 以后,会对
draft_content.json与draft_meta_info.json进行加密处理,是一种特殊的Base64的字符串形式;网络分享的视频草稿大部分都是以5.9 以下可读JSON草稿的形式来分享的;
AI 剪辑工具/工作流等生成的都是可读JSON,便于大模型理解与修改。
1.2 draft_content.json 未加密格式
{
"canvas_config": { "height": 1280, "ratio": "original", "width": 720 },
"color_space": 0,
"config": {
// ...
},
"cover": {
// ...
},
"create_time": 1648249190868,
"duration": 12800000,
"extra_info": null,
"fps": 30.0,
"id": "43E29F7E-C73C-4636-B2D1-0C1106DE124D_1659854689147",
"keyframe_graph_list": [],
"keyframes": {
"adjusts": [],
"audios": [],
"effects": [],
"filters": [],
"handwrites": [],
"stickers": [],
"texts": [],
"videos": []
},
"last_modified_platform": { // 设备信息
},
"materials": { // 核心素材库
"ai_translates": [],
"audio_balances": [],
"audio_effects": [],
"audio_fades": [
],
"audio_track_indexes": [],
"audios": [ // 音频/音乐/音效
],
"beats": [ // 与音频相关
],
"canvases": [ // 画布颜色相关
],
"chromas": [], // 绿幕抠图
"color_curves": [],
"digital_humans": [],
"drafts": [ // 内置复合片段
{
"category_id": "",
"category_name": "",
"combination_id": "",
"draft": {
// 模板套模板,通常是人名条,或者是常用组合,例如:土拨鼠大叫
"update_time": 0,
"version": 360000
},
"formula_id": "",
"id": "QU452XDE-TXNL-4LYI-639Z-5PK8PZYYYSR8_material",
"name": "",
"precompile_combination": false,
"type": "composition"
}
],
"effects": [ // 视频特效/滤镜/花字/。。。
{
"id": "A0361319-0DBE-4AA2-939B-C3FE6F00208E",
// ...
"type": "text_effect",
"value": 0.0,
"version": ""
}
],
"manual_deformations": [],
"masks": [ // 蒙板 内容过多,省略
],
"material_animations": [ // 动画,入场/出场/循环/字幕/组合动画
{
"animations": [], // 动画组合,部分动画会有互斥
"id": "D7DPTZ3B-CR8F-IPL--HFYI-1LVRWBFIVWUL",
"multi_language_current": "none",
"type": "sticker_animation"
}
],
"material_colors": [],
"multi_language_refs": [],
"placeholders": [ // 条件模块,用于在 segment 引用,因为这个调节并不是 materials 的素材
{
"id": "7EC4BE6C-29FB-42d4-B3B4-8DD2C86E63CF",
"material_resource_id": "",
"name": "调节1",
"type": "adjust"
}
],
"plugin_effects": [],
"primary_color_wheels": [],
"realtime_denoises": [
],
"shapes": [],
"smart_crops": [],
"smart_relights": [],
"sound_channel_mappings": [
],
"speeds": [ // segment 速度信息,可以不设置,segment 内部自己设置也可以
{
"curve_speed": null,
"id": "20N5HL6M-UPMS-XUDE-RXSC-65NQPGGX8DLG",
"mode": 0,
"speed": 1.0,
"type": "speed"
}
],
"stickers": [],
"tail_leaders": [],
"text_templates": [ // 文字模板组合
],
"texts": [ // 文字信息
{
// ...
"content": "{\"text\":\"你好!四月纪念日\",\"styles\":[{\"fill\":{\"content\":{\"solid\":{\"color\":[0,0,0]}}},\"font\":{\"path\":\"C:/Users/xueya/AppData/Local/JianyingPro/User Data/Cache/effect/349323/9bfde9a789862114b6055ed475688908/港风繁体-方正粗宋繁体.TTF\",\"id\":\"6740438140432945675\"},\"size\":15,\"range\":[0,8]}]}",
// ...
"font_title": "港风繁体",
"font_url": "",
"fonts": [
{
// ...
"title": "港风繁体"
}
],
"force_apply_line_max_width": false,
"global_alpha": 1.0,
"group_id": "",
"has_shadow": false,
"id": "3S7JK59N-RQX1-SSN1-8OHN-43B3DB2C81SR",
// ...
"underline_offset": 0.22,
"underline_width": 0.05,
"use_effect_default_color": true,
"words": { "end_time": [], "start_time": [], "text": [] }
}
],
"time_marks": [ // 时间标记
{
"id": "FDC0B380-9D03-4664-9106-913D638C88FB",
"mark_items": [
{
"color": "#00c1cd",
"id": "0BA279FC-663B-4503-AE26-9AF671D0135D",
"time_range": { "duration": 0, "start": 12433333 },
"title": "标记 22"
}
]
}
],
"transitions": [],
"video_effects": [],
"video_trackings": [
],
"videos": [ // 视频/图片 素材
{
"height": 720,
"id": "OXV8JDZM-MXZN-0CH2-M67G-IS5SF427KKQ8",
// ...
"matting": {
"flag": 0,
"has_use_quick_brush": false,
"has_use_quick_eraser": false,
"interactiveTime": [],
"path": "/data/user/0/com.lemon.lv/files/matting/51d4da7a11e3dfe7c941f73b498bf548",
"strokes": [ // 智能抠图相关
]
},
"media_path": "",
"object_locked": null,
"origin_material_id": "",
"path": "##_draftpath_placeholder_0E685133-18CE-45ED-8CB8-2904A212EC80_##/videos/51d4da7a11e3dfe7c941f73b498bf548.jpg",
// ...
"team_id": "",
"type": "photo",
"width": 1280
}
],
"vocal_beautifys": [],
"vocal_separations": [
]
},
"mutable_config": null,
"name": "0807-13",
"new_version": "110.0.0",
"platform": {
},
"tracks": [ // 轨道
{
"attribute": 1,
"flag": 0,
"id": "AHNM9H31-3G7H-FAJ6-G9OQ-PY16LQVT4WLW",
"is_default_name": false,
"name": "",
"segments": [ // 轨道内部的 segment, 通常 segment 通过 material_id 指向对应的素材,如 materials.videos, materials.audios 。。
{
"caption_info": null,
"cartoon": false,
"clip": {
"alpha": 1.0,
"flip": { "horizontal": false, "vertical": false },
"rotation": 0.0,
"scale": { "x": 0.89187235, "y": 0.89187235 },
"transform": { "x": 0.0, "y": 0.0 }
},
"common_keyframes": [ // 关键帧动画相关内容
],
"extra_material_refs": [ // 引用的其余资源,包含 动画、速度、等
"20N5HL6M-UPMS-XUDE-RXSC-65NQPGGX8DLG",
"KFABYM74-RWME-46D2-64W8-FJAOP32A09VH",
"GM4J9Q4G-Y668-0TP2-F5I0-ZTLYSZ1ELZWK",
"XGR0QNRR-OIYI-47AX-Y8B8-QGIGXMTSJ8TA",
"76722AA5-B96E-436a-B2E6-936B497D2B64",
"A629BE59-59C7-475c-ADBC-9759B8D10BBE"
],
"id": "EKP1NKPG-WDG6-Q2WE-Z477-TMB3T7TLDKMB",
"material_id": "OXV8JDZM-MXZN-0CH2-M67G-IS5SF427KKQ8",
// ...
"uniform_scale": { "on": true, "value": 1.0 },
"visible": true,
"volume": 0.0
}
],
"type": "video"
}
],
"update_time": 1659854708418,
"version": 360000
}
1.3 基于 draft_content.json 的自动化处理工具
通常基于Python框架都会使用 pyJianYingDraft 来进行生成和编辑操作。实际上就是操作1.2节的 JSON数据。
例如:在开始视频前三秒显示一个封面:就是 增加一个 track, 内部包含一个 segment,然后 segment 指向 materials.videos[] 中的一个元素,这个元素的类型是 photo,然后素材的 path 指向实际的文件,其中 ##_draft_...## 是特殊标志,代表草稿文件的相对路径。
上述操作直接使用 pyJianYingDraft 可以通过 add_video 接口,或者方法可以直接设置。免去了 JSON 操作的复杂度。
但是 pyJianYingDraft 只能够支持JSON明文加载/生成草稿JSON。无法生成加密后的文件。
FAQ:pyJianYingDraft 生成的 json 可以在高版本打开吗?答:可以,但是会进行实时加密,从而将无法再次利用工具/框架进行修改。
1.4 经过加密后的 draft_content.json
B1D8NLpFhHJ2gb9/3cPBDhJ1zGVe0UUFjBIa6Mrn27BCTcX2FJCih.....
虽然是 draft_content.json 文件,但是实际上已经是经过加密的字符串了,同时 draft_meta_info.json 也是经过了加密的文件。
2. 如何处理
2.1 始终确保剪辑5.9以下
如果是普通使用,不涉及到内容的自动处理,直接升级就行了。
如果是进行自动化生成、批量处理等操作,就始终确保 5.9 版本就行了。
2.2 如何意外升级了
如果意外升级了,那么需要寻找相应的工具来进行恢复。如果是必须要恢复,则需要知识付费,查询相关的工具或者能力。
目前已知的功能都是进行恢复,恢复的方案是有的,可以联系老张来进行知识付费。