@mixvideo/jianying
Version:
剪映草稿文件工具包 - 解析、分析和生成剪映项目文件
1 lines • 2.64 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;AA6GO,SAAS,MAAM,QAAA,EAAiC;AACrD,EAAA,IAAI,CAAI,EAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAU,QAAQ,CAAA,CAAE,CAAA;AAAA;AAEtC,EAAA,MAAM,OAAA,GAAa,EAAA,CAAA,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA;AACjD,EAAA,MAAM,KAAA,GAAuB,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAC/C,EAAA,OAAO,KAAA;AACT","file":"index.mjs","sourcesContent":["\n\nimport * as fs from 'fs';\n\n// 类型定义\ninterface CanvasConfig {\n height: number;\n width: number;\n ratio: string;\n}\n\ninterface CropInfo {\n lower_left_x: number;\n lower_left_y: number;\n lower_right_x: number;\n lower_right_y: number;\n upper_left_x: number;\n upper_left_y: number;\n upper_right_x: number;\n upper_right_y: number;\n}\n\ninterface VideoClip {\n id: string;\n material_name: string;\n path: string;\n duration: number;\n width: number;\n height: number;\n has_audio: boolean;\n crop: CropInfo;\n crop_ratio: string;\n crop_scale: number;\n type: string;\n source: number;\n is_ai_generate_content: boolean;\n is_copyright: boolean;\n}\n\ninterface AudioClip {\n id: string;\n name: string;\n path: string;\n duration: number;\n type: string;\n source_platform: number;\n is_ai_clone_tone: boolean;\n is_text_edit_overdub: boolean;\n}\n\ninterface TrackSegment {\n clip?: {\n alpha: number;\n flip: {\n horizontal: boolean;\n vertical: boolean;\n };\n rotation: number;\n scale: {\n x: number;\n y: number;\n };\n transform: {\n x: number;\n y: number;\n };\n };\n material_id: string;\n target_timerange: {\n duration: number;\n start: number;\n };\n source_timerange?: {\n duration: number;\n start: number;\n } | null;\n}\n\ninterface Track {\n id: string;\n name: string;\n attribute: number;\n flag: number;\n is_default_name: boolean;\n segments: TrackSegment[];\n}\n\ninterface JianyingDraft {\n id: string;\n duration: number;\n fps: number;\n canvas_config: CanvasConfig;\n color_space: number;\n create_time: number;\n last_modified_platform: {\n app_id: number;\n app_source: string;\n app_version: string;\n device_id: string;\n os: string;\n platform: string;\n };\n materials: {\n videos: VideoClip[];\n audios: AudioClip[];\n };\n tracks: Track[];\n}\n\nexport function parse(filePath: string): JianyingDraft {\n if (!fs.existsSync(filePath)) {\n throw new Error(`文件不存在: ${filePath}`);\n }\n const content = fs.readFileSync(filePath, 'utf-8');\n const draft: JianyingDraft = JSON.parse(content);\n return draft;\n}\n"]}