图片处理接口
目录
简介
本文档介绍剪映草稿图片处理接口,重点说明 /v1/add_images 接口的图片添加功能。该接口用于向现有剪映草稿中添加图片素材,支持透明度、缩放和位置调整。图片可用于增强视频视觉效果,如背景图、水印、装饰图等。
接口基于剪映草稿系统,通过 API 实现图片素材的批量添加和管理。系统支持多种图片动画效果,包括入场、出场和循环动画,以及转场效果配置。
项目结构
项目采用模块化设计,主要包含以下核心模块:
#mermaid-svg-ETyKobW6OWCtesgT{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ETyKobW6OWCtesgT .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ETyKobW6OWCtesgT .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ETyKobW6OWCtesgT .error-icon{fill:#552222;}#mermaid-svg-ETyKobW6OWCtesgT .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ETyKobW6OWCtesgT .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ETyKobW6OWCtesgT .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ETyKobW6OWCtesgT .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ETyKobW6OWCtesgT .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ETyKobW6OWCtesgT .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ETyKobW6OWCtesgT .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ETyKobW6OWCtesgT .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ETyKobW6OWCtesgT .marker.cross{stroke:#333333;}#mermaid-svg-ETyKobW6OWCtesgT svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ETyKobW6OWCtesgT p{margin:0;}#mermaid-svg-ETyKobW6OWCtesgT .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ETyKobW6OWCtesgT .cluster-label text{fill:#333;}#mermaid-svg-ETyKobW6OWCtesgT .cluster-label span{color:#333;}#mermaid-svg-ETyKobW6OWCtesgT .cluster-label span p{background-color:transparent;}#mermaid-svg-ETyKobW6OWCtesgT .label text,#mermaid-svg-ETyKobW6OWCtesgT span{fill:#333;color:#333;}#mermaid-svg-ETyKobW6OWCtesgT .node rect,#mermaid-svg-ETyKobW6OWCtesgT .node circle,#mermaid-svg-ETyKobW6OWCtesgT .node ellipse,#mermaid-svg-ETyKobW6OWCtesgT .node polygon,#mermaid-svg-ETyKobW6OWCtesgT .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ETyKobW6OWCtesgT .rough-node .label text,#mermaid-svg-ETyKobW6OWCtesgT .node .label text,#mermaid-svg-ETyKobW6OWCtesgT .image-shape .label,#mermaid-svg-ETyKobW6OWCtesgT .icon-shape .label{text-anchor:middle;}#mermaid-svg-ETyKobW6OWCtesgT .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ETyKobW6OWCtesgT .rough-node .label,#mermaid-svg-ETyKobW6OWCtesgT .node .label,#mermaid-svg-ETyKobW6OWCtesgT .image-shape .label,#mermaid-svg-ETyKobW6OWCtesgT .icon-shape .label{text-align:center;}#mermaid-svg-ETyKobW6OWCtesgT .node.clickable{cursor:pointer;}#mermaid-svg-ETyKobW6OWCtesgT .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ETyKobW6OWCtesgT .arrowheadPath{fill:#333333;}#mermaid-svg-ETyKobW6OWCtesgT .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ETyKobW6OWCtesgT .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ETyKobW6OWCtesgT .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ETyKobW6OWCtesgT .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ETyKobW6OWCtesgT .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ETyKobW6OWCtesgT .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ETyKobW6OWCtesgT .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ETyKobW6OWCtesgT .cluster text{fill:#333;}#mermaid-svg-ETyKobW6OWCtesgT .cluster span{color:#333;}#mermaid-svg-ETyKobW6OWCtesgT div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ETyKobW6OWCtesgT .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ETyKobW6OWCtesgT rect.text{fill:none;stroke-width:0;}#mermaid-svg-ETyKobW6OWCtesgT .icon-shape,#mermaid-svg-ETyKobW6OWCtesgT .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ETyKobW6OWCtesgT .icon-shape p,#mermaid-svg-ETyKobW6OWCtesgT .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ETyKobW6OWCtesgT .icon-shape .label rect,#mermaid-svg-ETyKobW6OWCtesgT .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ETyKobW6OWCtesgT .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ETyKobW6OWCtesgT .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ETyKobW6OWCtesgT :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 工具层
核心引擎
服务层
API层
路由层
数据模型
业务逻辑
草稿管理
片段处理
动画系统
转场系统
工具函数
配置管理
核心组件
API接口定义
接口提供图片添加功能,支持以下核心参数:
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| draft_url | string | ✅ | - | 目标草稿的完整URL |
| image_infos | string | ✅ | - | 图片信息数组的JSON字符串 |
| alpha | number | ❌ | 1.0 | 全局透明度,建议范围0.0, 1.0 |
| scale_x | number | ❌ | 1.0 | 图片X轴缩放比例 |
| scale_y | number | ❌ | 1.0 | 图片Y轴缩放比例 |
| transform_x | number | ❌ | 0 | X轴位置偏移(像素) |
| transform_y | number | ❌ | 0 | Y轴位置偏移(像素) |
数据模型结构
#mermaid-svg-kgPNgdQvXOv0pjMD{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-kgPNgdQvXOv0pjMD .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-kgPNgdQvXOv0pjMD .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-kgPNgdQvXOv0pjMD .error-icon{fill:#552222;}#mermaid-svg-kgPNgdQvXOv0pjMD .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kgPNgdQvXOv0pjMD .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-kgPNgdQvXOv0pjMD .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kgPNgdQvXOv0pjMD .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kgPNgdQvXOv0pjMD .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-kgPNgdQvXOv0pjMD .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kgPNgdQvXOv0pjMD .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kgPNgdQvXOv0pjMD .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kgPNgdQvXOv0pjMD .marker.cross{stroke:#333333;}#mermaid-svg-kgPNgdQvXOv0pjMD svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kgPNgdQvXOv0pjMD p{margin:0;}#mermaid-svg-kgPNgdQvXOv0pjMD g.classGroup text{fill:#9370DB;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-kgPNgdQvXOv0pjMD g.classGroup text .title{font-weight:bolder;}#mermaid-svg-kgPNgdQvXOv0pjMD .cluster-label text{fill:#333;}#mermaid-svg-kgPNgdQvXOv0pjMD .cluster-label span{color:#333;}#mermaid-svg-kgPNgdQvXOv0pjMD .cluster-label span p{background-color:transparent;}#mermaid-svg-kgPNgdQvXOv0pjMD .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kgPNgdQvXOv0pjMD .cluster text{fill:#333;}#mermaid-svg-kgPNgdQvXOv0pjMD .cluster span{color:#333;}#mermaid-svg-kgPNgdQvXOv0pjMD .nodeLabel,#mermaid-svg-kgPNgdQvXOv0pjMD .edgeLabel{color:#131300;}#mermaid-svg-kgPNgdQvXOv0pjMD .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-kgPNgdQvXOv0pjMD .label text{fill:#131300;}#mermaid-svg-kgPNgdQvXOv0pjMD .labelBkg{background:#ECECFF;}#mermaid-svg-kgPNgdQvXOv0pjMD .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-kgPNgdQvXOv0pjMD .classTitle{font-weight:bolder;}#mermaid-svg-kgPNgdQvXOv0pjMD .node rect,#mermaid-svg-kgPNgdQvXOv0pjMD .node circle,#mermaid-svg-kgPNgdQvXOv0pjMD .node ellipse,#mermaid-svg-kgPNgdQvXOv0pjMD .node polygon,#mermaid-svg-kgPNgdQvXOv0pjMD .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kgPNgdQvXOv0pjMD .divider{stroke:#9370DB;stroke-width:1;}#mermaid-svg-kgPNgdQvXOv0pjMD g.clickable{cursor:pointer;}#mermaid-svg-kgPNgdQvXOv0pjMD g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-kgPNgdQvXOv0pjMD g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-kgPNgdQvXOv0pjMD .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-kgPNgdQvXOv0pjMD .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-kgPNgdQvXOv0pjMD .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-kgPNgdQvXOv0pjMD .dashed-line{stroke-dasharray:3;}#mermaid-svg-kgPNgdQvXOv0pjMD .dotted-line{stroke-dasharray:1 2;}#mermaid-svg-kgPNgdQvXOv0pjMD #compositionStart,#mermaid-svg-kgPNgdQvXOv0pjMD .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kgPNgdQvXOv0pjMD #compositionEnd,#mermaid-svg-kgPNgdQvXOv0pjMD .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kgPNgdQvXOv0pjMD #dependencyStart,#mermaid-svg-kgPNgdQvXOv0pjMD .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kgPNgdQvXOv0pjMD #dependencyStart,#mermaid-svg-kgPNgdQvXOv0pjMD .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kgPNgdQvXOv0pjMD #extensionStart,#mermaid-svg-kgPNgdQvXOv0pjMD .extension{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kgPNgdQvXOv0pjMD #extensionEnd,#mermaid-svg-kgPNgdQvXOv0pjMD .extension{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kgPNgdQvXOv0pjMD #aggregationStart,#mermaid-svg-kgPNgdQvXOv0pjMD .aggregation{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kgPNgdQvXOv0pjMD #aggregationEnd,#mermaid-svg-kgPNgdQvXOv0pjMD .aggregation{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kgPNgdQvXOv0pjMD #lollipopStart,#mermaid-svg-kgPNgdQvXOv0pjMD .lollipop{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kgPNgdQvXOv0pjMD #lollipopEnd,#mermaid-svg-kgPNgdQvXOv0pjMD .lollipop{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kgPNgdQvXOv0pjMD .edgeTerminals{font-size:11px;line-height:initial;}#mermaid-svg-kgPNgdQvXOv0pjMD .classTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-kgPNgdQvXOv0pjMD .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-kgPNgdQvXOv0pjMD .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-kgPNgdQvXOv0pjMD :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} "请求/响应"
"包含"
AddImagesRequest
+string draft_url
+string image_infos
+float alpha
+float scale_x
+float scale_y
+int transform_x
+int transform_y
SegmentInfo
+string id
+int start
+int end
AddImagesResponse
+string draft_url
+string track_id
+string\[\] image_ids
+string\[\] segment_ids
+SegmentInfo\[\] segment_infos
架构概览
系统采用分层架构设计,确保功能模块的清晰分离和可维护性:
"核心处理引擎" "草稿管理系统" "业务服务层" "API路由层" "客户端" "核心处理引擎" "草稿管理系统" "业务服务层" "API路由层" "客户端" #mermaid-svg-fuSswXzhxBOm5Obm{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-fuSswXzhxBOm5Obm .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-fuSswXzhxBOm5Obm .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-fuSswXzhxBOm5Obm .error-icon{fill:#552222;}#mermaid-svg-fuSswXzhxBOm5Obm .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-fuSswXzhxBOm5Obm .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-fuSswXzhxBOm5Obm .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-fuSswXzhxBOm5Obm .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-fuSswXzhxBOm5Obm .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-fuSswXzhxBOm5Obm .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-fuSswXzhxBOm5Obm .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-fuSswXzhxBOm5Obm .marker{fill:#333333;stroke:#333333;}#mermaid-svg-fuSswXzhxBOm5Obm .marker.cross{stroke:#333333;}#mermaid-svg-fuSswXzhxBOm5Obm svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-fuSswXzhxBOm5Obm p{margin:0;}#mermaid-svg-fuSswXzhxBOm5Obm .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-fuSswXzhxBOm5Obm text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-fuSswXzhxBOm5Obm .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-fuSswXzhxBOm5Obm .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-fuSswXzhxBOm5Obm .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-fuSswXzhxBOm5Obm .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-fuSswXzhxBOm5Obm #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-fuSswXzhxBOm5Obm .sequenceNumber{fill:white;}#mermaid-svg-fuSswXzhxBOm5Obm #sequencenumber{fill:#333;}#mermaid-svg-fuSswXzhxBOm5Obm #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-fuSswXzhxBOm5Obm .messageText{fill:#333;stroke:none;}#mermaid-svg-fuSswXzhxBOm5Obm .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-fuSswXzhxBOm5Obm .labelText,#mermaid-svg-fuSswXzhxBOm5Obm .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-fuSswXzhxBOm5Obm .loopText,#mermaid-svg-fuSswXzhxBOm5Obm .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-fuSswXzhxBOm5Obm .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-fuSswXzhxBOm5Obm .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-fuSswXzhxBOm5Obm .noteText,#mermaid-svg-fuSswXzhxBOm5Obm .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-fuSswXzhxBOm5Obm .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-fuSswXzhxBOm5Obm .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-fuSswXzhxBOm5Obm .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-fuSswXzhxBOm5Obm .actorPopupMenu{position:absolute;}#mermaid-svg-fuSswXzhxBOm5Obm .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-fuSswXzhxBOm5Obm .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-fuSswXzhxBOm5Obm .actor-man circle,#mermaid-svg-fuSswXzhxBOm5Obm line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-fuSswXzhxBOm5Obm :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} POST /v1/add_images 验证请求参数 获取草稿实例 处理图片素材 应用动画效果 设置图像调节参数 添加到轨道 返回结果 响应处理结果 返回成功响应
详细组件分析
图片轨道管理
系统为图片素材创建专用的图片轨道,与主视频轨道分离:
#mermaid-svg-E5lrmwTw1dtbyqW4{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-E5lrmwTw1dtbyqW4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-E5lrmwTw1dtbyqW4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-E5lrmwTw1dtbyqW4 .error-icon{fill:#552222;}#mermaid-svg-E5lrmwTw1dtbyqW4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-E5lrmwTw1dtbyqW4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-E5lrmwTw1dtbyqW4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-E5lrmwTw1dtbyqW4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-E5lrmwTw1dtbyqW4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-E5lrmwTw1dtbyqW4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-E5lrmwTw1dtbyqW4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-E5lrmwTw1dtbyqW4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-E5lrmwTw1dtbyqW4 .marker.cross{stroke:#333333;}#mermaid-svg-E5lrmwTw1dtbyqW4 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-E5lrmwTw1dtbyqW4 p{margin:0;}#mermaid-svg-E5lrmwTw1dtbyqW4 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-E5lrmwTw1dtbyqW4 .cluster-label text{fill:#333;}#mermaid-svg-E5lrmwTw1dtbyqW4 .cluster-label span{color:#333;}#mermaid-svg-E5lrmwTw1dtbyqW4 .cluster-label span p{background-color:transparent;}#mermaid-svg-E5lrmwTw1dtbyqW4 .label text,#mermaid-svg-E5lrmwTw1dtbyqW4 span{fill:#333;color:#333;}#mermaid-svg-E5lrmwTw1dtbyqW4 .node rect,#mermaid-svg-E5lrmwTw1dtbyqW4 .node circle,#mermaid-svg-E5lrmwTw1dtbyqW4 .node ellipse,#mermaid-svg-E5lrmwTw1dtbyqW4 .node polygon,#mermaid-svg-E5lrmwTw1dtbyqW4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-E5lrmwTw1dtbyqW4 .rough-node .label text,#mermaid-svg-E5lrmwTw1dtbyqW4 .node .label text,#mermaid-svg-E5lrmwTw1dtbyqW4 .image-shape .label,#mermaid-svg-E5lrmwTw1dtbyqW4 .icon-shape .label{text-anchor:middle;}#mermaid-svg-E5lrmwTw1dtbyqW4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-E5lrmwTw1dtbyqW4 .rough-node .label,#mermaid-svg-E5lrmwTw1dtbyqW4 .node .label,#mermaid-svg-E5lrmwTw1dtbyqW4 .image-shape .label,#mermaid-svg-E5lrmwTw1dtbyqW4 .icon-shape .label{text-align:center;}#mermaid-svg-E5lrmwTw1dtbyqW4 .node.clickable{cursor:pointer;}#mermaid-svg-E5lrmwTw1dtbyqW4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-E5lrmwTw1dtbyqW4 .arrowheadPath{fill:#333333;}#mermaid-svg-E5lrmwTw1dtbyqW4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-E5lrmwTw1dtbyqW4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-E5lrmwTw1dtbyqW4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-E5lrmwTw1dtbyqW4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-E5lrmwTw1dtbyqW4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-E5lrmwTw1dtbyqW4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-E5lrmwTw1dtbyqW4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-E5lrmwTw1dtbyqW4 .cluster text{fill:#333;}#mermaid-svg-E5lrmwTw1dtbyqW4 .cluster span{color:#333;}#mermaid-svg-E5lrmwTw1dtbyqW4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-E5lrmwTw1dtbyqW4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-E5lrmwTw1dtbyqW4 rect.text{fill:none;stroke-width:0;}#mermaid-svg-E5lrmwTw1dtbyqW4 .icon-shape,#mermaid-svg-E5lrmwTw1dtbyqW4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-E5lrmwTw1dtbyqW4 .icon-shape p,#mermaid-svg-E5lrmwTw1dtbyqW4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-E5lrmwTw1dtbyqW4 .icon-shape .label rect,#mermaid-svg-E5lrmwTw1dtbyqW4 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-E5lrmwTw1dtbyqW4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-E5lrmwTw1dtbyqW4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-E5lrmwTw1dtbyqW4 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 开始添加图片
验证请求参数
检查草稿有效性
创建图片轨道
解析图片信息
处理单个图片
下载图片文件
创建视频片段
应用图像调节设置
添加动画效果
添加到轨道
保存草稿
返回处理结果
完成
图片处理流程
图像调节设置
系统支持多种图像调节参数,通过 ClipSettings 类实现:
| 参数 | 默认值 | 说明 | 范围 |
|---|---|---|---|
| alpha | 1.0 | 透明度 | 0.0 - 1.0 |
| scale_x | 1.0 | X轴缩放 | 任意正值 |
| scale_y | 1.0 | Y轴缩放 | 任意正值 |
| transform_x | 0 | X轴偏移(像素) | 任意整数 |
| transform_y | 0 | Y轴偏移(像素) | 任意整数 |
动画效果系统
系统支持三种类型的动画效果:
- 入场动画:图片进入画面时的效果
- 出场动画:图片离开画面时的效果
- 组合动画:图片在整个显示期间的循环效果
转场效果配置
系统支持丰富的转场效果,包括:
- 基础转场:渐隐、渐显、滑动等
- 特效转场:火焰、雪花、爱心等特效
- 复杂转场:多屏分割、立方体旋转等
每种转场都有预设的默认时长和特殊属性。
依赖关系分析
核心依赖关系
#mermaid-svg-Eq35XhqtF3hb9AZN{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Eq35XhqtF3hb9AZN .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Eq35XhqtF3hb9AZN .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Eq35XhqtF3hb9AZN .error-icon{fill:#552222;}#mermaid-svg-Eq35XhqtF3hb9AZN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Eq35XhqtF3hb9AZN .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Eq35XhqtF3hb9AZN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Eq35XhqtF3hb9AZN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Eq35XhqtF3hb9AZN .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Eq35XhqtF3hb9AZN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Eq35XhqtF3hb9AZN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Eq35XhqtF3hb9AZN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Eq35XhqtF3hb9AZN .marker.cross{stroke:#333333;}#mermaid-svg-Eq35XhqtF3hb9AZN svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Eq35XhqtF3hb9AZN p{margin:0;}#mermaid-svg-Eq35XhqtF3hb9AZN .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Eq35XhqtF3hb9AZN .cluster-label text{fill:#333;}#mermaid-svg-Eq35XhqtF3hb9AZN .cluster-label span{color:#333;}#mermaid-svg-Eq35XhqtF3hb9AZN .cluster-label span p{background-color:transparent;}#mermaid-svg-Eq35XhqtF3hb9AZN .label text,#mermaid-svg-Eq35XhqtF3hb9AZN span{fill:#333;color:#333;}#mermaid-svg-Eq35XhqtF3hb9AZN .node rect,#mermaid-svg-Eq35XhqtF3hb9AZN .node circle,#mermaid-svg-Eq35XhqtF3hb9AZN .node ellipse,#mermaid-svg-Eq35XhqtF3hb9AZN .node polygon,#mermaid-svg-Eq35XhqtF3hb9AZN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Eq35XhqtF3hb9AZN .rough-node .label text,#mermaid-svg-Eq35XhqtF3hb9AZN .node .label text,#mermaid-svg-Eq35XhqtF3hb9AZN .image-shape .label,#mermaid-svg-Eq35XhqtF3hb9AZN .icon-shape .label{text-anchor:middle;}#mermaid-svg-Eq35XhqtF3hb9AZN .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Eq35XhqtF3hb9AZN .rough-node .label,#mermaid-svg-Eq35XhqtF3hb9AZN .node .label,#mermaid-svg-Eq35XhqtF3hb9AZN .image-shape .label,#mermaid-svg-Eq35XhqtF3hb9AZN .icon-shape .label{text-align:center;}#mermaid-svg-Eq35XhqtF3hb9AZN .node.clickable{cursor:pointer;}#mermaid-svg-Eq35XhqtF3hb9AZN .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Eq35XhqtF3hb9AZN .arrowheadPath{fill:#333333;}#mermaid-svg-Eq35XhqtF3hb9AZN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Eq35XhqtF3hb9AZN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Eq35XhqtF3hb9AZN .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Eq35XhqtF3hb9AZN .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Eq35XhqtF3hb9AZN .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Eq35XhqtF3hb9AZN .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Eq35XhqtF3hb9AZN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Eq35XhqtF3hb9AZN .cluster text{fill:#333;}#mermaid-svg-Eq35XhqtF3hb9AZN .cluster span{color:#333;}#mermaid-svg-Eq35XhqtF3hb9AZN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Eq35XhqtF3hb9AZN .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Eq35XhqtF3hb9AZN rect.text{fill:none;stroke-width:0;}#mermaid-svg-Eq35XhqtF3hb9AZN .icon-shape,#mermaid-svg-Eq35XhqtF3hb9AZN .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Eq35XhqtF3hb9AZN .icon-shape p,#mermaid-svg-Eq35XhqtF3hb9AZN .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Eq35XhqtF3hb9AZN .icon-shape .label rect,#mermaid-svg-Eq35XhqtF3hb9AZN .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Eq35XhqtF3hb9AZN .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Eq35XhqtF3hb9AZN .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Eq35XhqtF3hb9AZN :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 配置管理
内部模块
外部依赖
HTTP请求
PIL/Pillow
FastAPI框架
v1.py
add_images.py
schemas/add_images.py
pyJianYingDraft
config.py
logger
错误处理机制
系统采用统一的异常处理机制:
#mermaid-svg-RMTjYwxW35CIHapN{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-RMTjYwxW35CIHapN .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-RMTjYwxW35CIHapN .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-RMTjYwxW35CIHapN .error-icon{fill:#552222;}#mermaid-svg-RMTjYwxW35CIHapN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-RMTjYwxW35CIHapN .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-RMTjYwxW35CIHapN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-RMTjYwxW35CIHapN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-RMTjYwxW35CIHapN .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-RMTjYwxW35CIHapN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-RMTjYwxW35CIHapN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-RMTjYwxW35CIHapN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-RMTjYwxW35CIHapN .marker.cross{stroke:#333333;}#mermaid-svg-RMTjYwxW35CIHapN svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-RMTjYwxW35CIHapN p{margin:0;}#mermaid-svg-RMTjYwxW35CIHapN .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-RMTjYwxW35CIHapN .cluster-label text{fill:#333;}#mermaid-svg-RMTjYwxW35CIHapN .cluster-label span{color:#333;}#mermaid-svg-RMTjYwxW35CIHapN .cluster-label span p{background-color:transparent;}#mermaid-svg-RMTjYwxW35CIHapN .label text,#mermaid-svg-RMTjYwxW35CIHapN span{fill:#333;color:#333;}#mermaid-svg-RMTjYwxW35CIHapN .node rect,#mermaid-svg-RMTjYwxW35CIHapN .node circle,#mermaid-svg-RMTjYwxW35CIHapN .node ellipse,#mermaid-svg-RMTjYwxW35CIHapN .node polygon,#mermaid-svg-RMTjYwxW35CIHapN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-RMTjYwxW35CIHapN .rough-node .label text,#mermaid-svg-RMTjYwxW35CIHapN .node .label text,#mermaid-svg-RMTjYwxW35CIHapN .image-shape .label,#mermaid-svg-RMTjYwxW35CIHapN .icon-shape .label{text-anchor:middle;}#mermaid-svg-RMTjYwxW35CIHapN .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-RMTjYwxW35CIHapN .rough-node .label,#mermaid-svg-RMTjYwxW35CIHapN .node .label,#mermaid-svg-RMTjYwxW35CIHapN .image-shape .label,#mermaid-svg-RMTjYwxW35CIHapN .icon-shape .label{text-align:center;}#mermaid-svg-RMTjYwxW35CIHapN .node.clickable{cursor:pointer;}#mermaid-svg-RMTjYwxW35CIHapN .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-RMTjYwxW35CIHapN .arrowheadPath{fill:#333333;}#mermaid-svg-RMTjYwxW35CIHapN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-RMTjYwxW35CIHapN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-RMTjYwxW35CIHapN .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RMTjYwxW35CIHapN .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-RMTjYwxW35CIHapN .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RMTjYwxW35CIHapN .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-RMTjYwxW35CIHapN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-RMTjYwxW35CIHapN .cluster text{fill:#333;}#mermaid-svg-RMTjYwxW35CIHapN .cluster span{color:#333;}#mermaid-svg-RMTjYwxW35CIHapN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-RMTjYwxW35CIHapN .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-RMTjYwxW35CIHapN rect.text{fill:none;stroke-width:0;}#mermaid-svg-RMTjYwxW35CIHapN .icon-shape,#mermaid-svg-RMTjYwxW35CIHapN .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RMTjYwxW35CIHapN .icon-shape p,#mermaid-svg-RMTjYwxW35CIHapN .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-RMTjYwxW35CIHapN .icon-shape .label rect,#mermaid-svg-RMTjYwxW35CIHapN .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RMTjYwxW35CIHapN .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-RMTjYwxW35CIHapN .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-RMTjYwxW35CIHapN :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否
是
请求处理
参数验证
验证通过?
参数错误
业务处理
成功处理
处理异常
自定义异常
返回成功响应
性能考虑
资源管理
- 内存管理:图片文件下载后及时清理临时文件
- 并发处理:支持多图片并行处理,提高效率
- 缓存策略:草稿内容缓存在内存中,减少重复读取
性能优化建议
- 控制同时添加的图片数量,避免内存峰值过高
- 合理设置图片分辨率,平衡质量与性能
- 使用合适的动画时长,避免过长的处理时间
故障排除指南
常见问题及解决方案
| 错误类型 | 错误码 | 描述 | 解决方案 |
|---|---|---|---|
| 参数错误 | 400 | 草稿URL无效 | 检查草稿URL格式和有效性 |
| 参数错误 | 400 | 图片信息缺失 | 确保提供完整的image_infos参数 |
| 参数错误 | 400 | 图片尺寸无效 | 验证width和height为正数 |
| 参数错误 | 400 | 时间范围无效 | 确保end > start且为正数 |
| 参数错误 | 400 | 透明度超出范围 | 使用0.0-1.0范围内的值 |
| 资源不存在 | 404 | 草稿不存在 | 检查草稿ID是否正确 |
| 资源不存在 | 404 | 图片不存在 | 验证图片URL可访问性 |
| 系统错误 | 500 | 图片添加失败 | 检查服务器日志和网络连接 |
调试技巧
- 日志查看:通过系统日志查看详细的错误信息
- 参数验证:使用测试脚本验证请求参数格式
- 网络诊断:检查图片URL的可访问性和响应时间
结论
剪映草稿图片处理接口提供了完整的图片添加和管理功能。通过清晰的API设计和强大的动画系统,用户可以轻松向视频项目中添加各种图片素材,实现丰富的视觉效果。
系统的主要优势:
- 简洁直观的API接口
- 丰富的动画和转场效果
- 灵活的图像调节参数
- 完善的错误处理机制
- 良好的性能表现
实际使用中建议注意参数的有效性验证和性能优化,以获得最佳使用体验。
文档信息
- 接口文档: docs.jcaigc.cn
- 效果案例: www.jcaigc.cn/workflow
- 开源仓库: capcut-mate