利用代码实现_剪映小助手_的caption_infos 制作字幕数据功能

一、原来剪映小助手流程

1、caption_infos 制作字幕数据

2、输入的数据

3、输出的数据

4、测试的数据

1)、输入

{
  "font_size": 22,
  "in_animation": "波浪弹入",
  "in_animation_duration": 500000,
  "out_animation": "渐隐",
  "out_animation_duration": 500000,
  "texts": [
    " ",
    "少小离家老大回",
    "乡音无改鬓毛衰",
    "儿童相见不相识",
    "笑问客从何处来"
  ],
  "timelines": [
    {
      "end": 5112000,
      "start": 0
    },
    {
      "end": 7704000,
      "start": 5112000
    },
    {
      "end": 10464000,
      "start": 7704000
    },
    {
      "end": 13032000,
      "start": 10464000
    },
    {
      "end": 16008000,
      "start": 13032000
    }
  ]
}

2)、输出

{
  "infos": "[{\"start\":0,\"end\":5112000,\"text\":\" \",\"in_animation\":\"波浪弹入\",\"out_animation\":\"渐隐\",\"in_animation_duration\":500000,\"out_animation_duration\":500000},{\"start\":5112000,\"end\":7704000,\"text\":\"少小离家老大回\",\"in_animation\":\"波浪弹入\",\"out_animation\":\"渐隐\",\"in_animation_duration\":500000,\"out_animation_duration\":500000},{\"start\":7704000,\"end\":10464000,\"text\":\"乡音无改鬓毛衰\",\"in_animation\":\"波浪弹入\",\"out_animation\":\"渐隐\",\"in_animation_duration\":500000,\"out_animation_duration\":500000},{\"start\":10464000,\"end\":13032000,\"text\":\"儿童相见不相识\",\"in_animation\":\"波浪弹入\",\"out_animation\":\"渐隐\",\"in_animation_duration\":500000,\"out_animation_duration\":500000},{\"start\":13032000,\"end\":16008000,\"text\":\"笑问客从何处来\",\"in_animation\":\"波浪弹入\",\"out_animation\":\"渐隐\",\"in_animation_duration\":500000,\"out_animation_duration\":500000}]"
}

二、代码实现

1、分析

通过分析得知,小助手就是将古诗原文数组、其它变量和时间线进行拼接,形成一个字符串。

只需处理texts(诗歌原文的字符串数组)、timelines(04a里面生成的时间线);然后在代码里面自定义其它变量进行转换。

2、核心代码

import json
async def main(args: Args) -> Output:
    params = args.params    
    infos_list = []
    # 自定义的变量
    font_size=22
    in_animation="波浪弹入"
    in_animation_duration=500000
    out_animation="渐隐"
    out_animation_duration=500000
    # 遍历文本和时间轴创建信息列表
    for text, timeline in zip(params["texts"], params["timelines"]):
        info = {
            "start": timeline["start"],
            "end": timeline["end"],
            "text": text,
            "in_animation": in_animation,
            "out_animation": out_animation,
            "in_animation_duration": in_animation_duration,
            "out_animation_duration": out_animation_duration
        }
        infos_list.append(info)
    
   
    
      # 构建输出对象
    ret: Output = {
      # 生成最终结果并序列化为紧凑JSON格式   
      "infos": json.dumps(
            infos_list,
            ensure_ascii=False,  # 保留中文原样
            separators=(",", ":")  # 移除JSON中的多余空格
        )
    }
    return ret

3、运行截图