动态照片封装
上传一张照片和一段视频,直出安卓动态照片与苹果实况照片(Live Photo)。
本接口只做封装,不生成画面:照片就是你传的照片,视频就是你传的视频。适合已经有素材、只想让它在手机相册里「长按会动」的场景。 如果你只有一张照片、想让它自己动起来,请用「图片转 Live Photo」。
交付平台由 target 选择:安卓、苹果,或两套都要(默认)。
创建任务
基本信息
| 项目 | 值 |
|---|---|
| 请求方法 | POST |
| 请求路径 | /task/live_photo_pack |
| Content-Type | application/json |
| 鉴权方式 | Authorization 请求头(直接传 API Key) |
请求参数(Body)
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
file_id | string | 是 | — | 已上传照片的文件 ID,支持 jpg / jpeg / png / webp / bmp |
video_file_id | string | 是 | — | 已上传视频的文件 ID。体积不超过 1 GB,时长不超过 2 小时 |
target | string | 否 | both | 交付平台:android / ios / both。取值无法识别时按 both 处理 |
mute | boolean | 否 | false | 是否去掉视频里的声音 |
请求示例
curl -X POST https://api.ai-mcn.tv:10000/task/live_photo_pack \
-H "Authorization: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"file_id": "537489015178246", "video_file_id": "537489015178250"}'
只要苹果实况照片,并去掉声音:
curl -X POST https://api.ai-mcn.tv:10000/task/live_photo_pack \
-H "Authorization: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"file_id": "537489015178246", "video_file_id": "537489015178250", "target": "ios", "mute": true}'
成功响应示例
{
"code": 200,
"msg": "success",
"data": {
"task_id": "537489015178247",
"task_type": "live_photo_pack",
"status": "queued"
}
}
查询任务结果
基本信息
| 项目 | 值 |
|---|---|
| 请求方法 | GET |
| 请求路径 | /task/live_photo_pack/{task_id} |
| 鉴权方式 | Authorization 请求头(直接传 API Key) |
响应参数(output_result)
| 参数名 | 类型 | 何时返回 | 说明 |
|---|---|---|---|
target | string | 始终 | 实际生效的交付平台 |
file_id | string | 始终 | 主产物文件 ID。target 为 android 或 both 时是安卓动态照片,为 ios 时是苹果实况照片的静图 |
download_url | string | 始终 | 主产物下载路径 |
ios_photo_file_id | string | 仅 target=both | 苹果实况照片的静图(.jpg) |
ios_photo_download_url | string | 仅 target=both | 同上,下载路径 |
ios_video_file_id | string | target 为 ios 或 both | 苹果实况照片的视频(.mov) |
ios_video_download_url | string | target 为 ios 或 both | 同上,下载路径 |
成功响应示例
target=both(默认):
{
"code": 200,
"msg": "success",
"data": {
"task_id": "537489015178247",
"status": "completed",
"progress": 100,
"output_result": {
"target": "both",
"file_id": "537489015178248",
"download_url": "/download/a1/output.jpg",
"ios_photo_file_id": "537489015178249",
"ios_photo_download_url": "/download/a1/output.jpg",
"ios_video_file_id": "537489015178251",
"ios_video_download_url": "/download/a1/output.mov"
},
"create_time": "2026-09-15T08:00:00Z",
"update_time": "2026-09-15T08:00:12Z"
}
}
target=ios:
{
"code": 200,
"msg": "success",
"data": {
"task_id": "537489015178247",
"status": "completed",
"progress": 100,
"output_result": {
"target": "ios",
"file_id": "537489015178248",
"download_url": "/download/a1/output.jpg",
"ios_video_file_id": "537489015178251",
"ios_video_download_url": "/download/a1/output.mov"
},
"create_time": "2026-09-15T08:00:00Z",
"update_time": "2026-09-15T08:00:12Z"
}
}
产物规格
安卓动态照片
主产物是单个 .jpg 文件:静图末尾内嵌你上传的视频,位置由图片内的元数据声明。它同时是一张普通图片,任何看图工具都能打开;支持该标准的安卓相册会把它识别为动态照片,长按播放。
| 项目 | 说明 |
|---|---|
| 容器 | JPEG(静图 + 内嵌 MP4,单文件) |
| 静图 | 保留原图分辨率,按视频画幅居中裁切,保证静图与动图构图一致 |
| 内嵌视频 | H.264 / HEVC 视频画面不重新编码;上传的本就是标准 MP4 时,内嵌的就是原文件 |
| 文件大小 | 约等于照片与视频之和 |
苹果实况照片
苹果的实况照片是一对文件:一张 .jpg 静图和一段 .mov 视频,两者靠内嵌的同一个标识配对。
| 项目 | 说明 |
|---|---|
| 静图 | JPEG,保留原图分辨率,按视频画幅居中裁切;原图的拍摄信息保留 |
| 视频 | MOV,H.264 / HEVC 视频画面不重新编码 |
| 配对 | 每次任务生成新的标识,同一对素材提交两次得到的是两组互不相干的实况照片 |
视频处理规则
- 视频编码为 H.264 或 HEVC 时,画面不做任何二次编码,只换容器。
- 其他编码的视频会先转码为 H.264,画质会有轻微损失。
- 视频里有多条画面流时(如带封面图),只保留真正的视频画面。
mute=true时两个平台的视频都去掉声音;默认保留声音。
兼容边界
请在接入前确认目标场景:
苹果
- 静图与视频必须在同一次导入中一起导入,才会被识别为实况照片。可行的方式:在 Mac 的「照片」App 里一次选中两个文件导入(随 iCloud 同步到 iPhone);或在你自己的 App 里通过系统相册接口同时存入两个文件。
- 在 iPhone 上分别下载两个文件再各自存入相册,不会配对,只会得到一张照片和一段视频。
- 程序生成的实况照片不能设为动态壁纸,这是系统限制。
安卓
- Pixel、小米、三星等支持该标准的机型相册可识别并播放。
- 厂商实现存在差异,少数机型可能只显示为静态图片。
- iOS 相册不识别安卓动态照片,会显示为普通静态图片。
处理时长
标准 H.264 / HEVC 视频通常在数秒到一分钟内完成。需要转码的视频越长耗时越久。任务为异步执行,提交后请通过查询接口轮询 status。
使用建议
- 照片与视频的画幅:静图会按视频画幅裁切。想保住照片构图,请让视频与照片宽高比一致。
- 视频时长:手机原生实况照片约 3 秒。视频过长时,部分相册加载缓慢或只显示静图,建议控制在十几秒以内。
- 计费:按次计费,与视频时长和体积无关。实际价格以价格说明为准。
错误码
| 错误码 | HTTP 状态码 | 说明 | 解决方案 |
|---|---|---|---|
6013 | 400 | file_id 或 video_file_id 缺失 | 两个参数都必须传 |
6014 | 400 | 文件类型与参数不匹配 | file_id 传照片、video_file_id 传视频 |
6004 | 404 | 文件不存在 | 检查文件 ID 是否正确 |
6002 | 413 | 视频超过 1 GB | 压缩或截短视频后重新上传 |
6019 | 400 | 视频时长为 0 或超过 2 小时 | 截短视频后重新上传 |
6017 | 400 | 视频无法解析 | 检查视频是否损坏,或换一种格式导出 |
6502 | 401 | 鉴权失败 | 检查 Authorization 请求头 |
6202 | 402 | 余额不足 | 前往仪表盘充值 |