python生成剪映草稿解析

teaxia
2023-12-24 / 0 评论 / 483 阅读 / 正在检测是否收录...

用python生成剪映草稿文件,其实很简单。但是我看很多人都没有说到重点,或者分析得不是很正确。
本文仅针对剪映的草稿文件做分析,不对具体如何用python生成做分析。其实无非就是用各种语言来生成剪映草稿所用的json文件,然后向里面循环插入视频、图片等内容而已。
剪映需要生成草稿文件,其实只需要2个json文件即可。一个是draft_content.json还有一个是draft_meta_info.json。
这两个文件,draft_meta_info定义了草稿的一些基本内容,例如名称,生成的版本号还有系统等信息。另一个draft_content文件,才是定义了引入草稿的资源和轨道内容。
draft_meta_info文件,没啥好说的,生成的时候draft_fold_path各种路径可以不用管它,用剪映打开的时候会自动补全。draft_id的话,用uuid4生成一个就可以了。

资源的导入draft_meta_info

我们打开剪映的时候,看见资源框导入的资源,都在这个文件里面
draft_materials.png
在draft_materials这个字段下面的第0个位置value下面添加即可。注意:下面的ID需要用UUID4来作为唯一ID。
file_Path字段,是资源的路径。这个路径可以使用相对路径,也就是说,我们可以把图片、视频等资源打包进模板文件的文件夹里面。这样剪映可以正常识别导入。
一个比较干净的文件如下:
draft_meta_info.png
现在,需要详细解释一下draft_content.json这个文件。
canvas_config,里面代表生成草稿的高度和宽度以及比例。这里面的内容比较简单,不写的话,剪映打开也会默认进行补全。
这个文件里面有2个重要的地方,一个是引入的资源,也就是打开剪映草稿时,在里面引入的资源文件,可以是图片、音频、视频等。
rouser.png
资源引入,是在materials字段里面。注意,字幕与视频或者图片的不是在同一个地方。texts是添加的字幕。videos是添加的视频、图片等画面内容。
materials.png
注意,这里只是导入资源,并没有把资源导入到轨道上。想导入到轨道上,必须要添加资源才行。如何导入轨道,等下会介绍。

字幕资源的添加

要添加字幕的话,有个简单的方法,不要看texts里面内容有很多,其实我们可以先在剪映里面添加一个字幕文件,把文字大小以及位置和特效这些都修改好,然后我们就可以得到一个字幕的模板了。找到剪映草稿里面的对应文件和位置,复制下来就可以了(注意,位置的内容不在texts里面,在tracks里面修改,轨道的内容同样在轨道章节介绍)。
texts.png
文字的话,我们只需要循环去修改texts下面的content里面的text即可。(这里剪映草稿把content里面的内容作为字符串存储的,没有存储成json,在修改的时候可以用json.loads来解析一下)里面涉及到文字字体路径的地方,我们都可以删除掉,剪映会自动添加。
这里面有个地方需要注意,每一个字幕文件必须有一个ID,同样可以用uuid4来生成,保证ID的唯一性就行,这个ID等下会用到。

视频、图片资源的添加

视频、图片的资源添加与字幕基本相同,但是需要注意的是视频等资源的添加是添加在videos下面。
在视频、图片资源里面,有几个地方需要注意。
里面的path,这个路径我也用了相对路径,但是剪映还是提示资源丢失,也就代表路径不正确。我看了一下剪映软件生成的路径是

##_draftpath_placeholder_0E685133-18CE-45ED-8CB8-2904A212EC80_##

这样的,后面明显也是用UUID加密了,目前不知道加密的内容是啥,如果有懂的可以告诉我一下。虽然不知道,这样也不怕,因为打开剪映软件后,我们可以手动指定一下资源的文件夹,剪映会自动进行补全关联。
type的话,如果是指定资源的类型,图片就用photo,视频的话,就用video指定。
同样的,ID必须要有唯一性,可以用uuid4来生成。
material_name可以使用文件名来命名,这个可以有重复,到无所谓。

如何插入轨道

轨道插入是在draft_content的tracks下面。
tracks.png
我们在使用剪映的时候,资源有可能在同一个轨道下面,也有可能有分轨的情况。
但是字幕文件和视频等文件肯定是分轨的,不可能在同一个轨道上。所以,tracks下面有几个对象,就代表有几个轨道。
对于我们要插入轨道的资源,我们可以根据自身情况,去分轨或者加到一个轨道里面。对于资源,它在segments里面,存储的是一个数组。一个数组就代表一个视频资源。这里面内容也有很多,但实际上,我们只需要注意几个地方就可以了。
ID不用多说,UUID4生成,不能有重复,这个是轨道的ID,还有一个material_id,它是引用资源的ID,也就是materials字段里面添加的资源ID,这里必须要与该资源的ID一致才行,不然会找不到该资源,剪映出不来哦。
剩下的就是该资源在时间线上的顺序问题了。有2个地方,source_timerange和target_timerange。里面的duration值代表这个资源在剪映里面的时间长度,下面的start代表开始的时间。也就是,如果我们的片段时间都是2000000(2秒)的时间长度,现在是第3个片段插入,就用3*2000000最后等于6000000,那start就是6000000,代表插入轨道的这个片段从第6秒开始。
字幕的增加,也是一样的。但是我们需要新加一个tracks轨道来,然后在里面的segments对象里面,插入我们的字幕资源就可以了。基本方法与视频一致,但是它里面控制字幕显示时间的地方只有一个source_timerange,字段还是与视频一致的。
最后就是tracks轨道添加对象的时候,type的值记得修改成text,代表字幕才行。
至此,有了这两个文件,剪映的最简单草稿文件就生成了。把这两个文件丢到剪映草稿的所在位置,剪映就可以识别了。
text_tracks.png

其实,这个文件用什么语言生成都可以,我们的目的是生成后能直接打包下来能用就行。
对了,如果有大神知道

##_draftpath_placeholder_0E685133-18CE-45ED-8CB8-2904A212EC80_##

这个path是用什么算的,请告诉我一下,谢谢。如果我研究出来了,我也会进行更新

24

评论 (0)

取消