使用 Animate Old Photos API 将老照片动画化为 AI 生成的视频。上传一张照片,生成一段 5 秒钟的动画视频,并下载结果。
动画老照片是一项面向实际任务的技能,主要用于动画老照片通过动画老照片 API 输入 AI 生成的视频;代理上传一张照片, 提交动画任务, 民调完成, 下载 Res。
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
通过 Animate Old Photos API 将老照片转换为 AI 生成的视频。该智能体将上传一张照片,提交动画任务,轮询任务完成状态,并下载生成的 MP4 视频。
本服务为付费服务。 您需要有效的 API 密钥及可用积分。
- 官方网站:Animate Old Photos
- 获取您的 API 密钥:Profile > API Key
- 购买积分:Buy Credits
每次动画生成消耗 3 积分。查看定价方案
系统要求:curl 和 jq 必须在当前 shell 环境中可用。
AOP_API_KEY 未设置,则向用户询问其 API 密钥。使用 API 密钥换取短期有效的访问令牌,并检查当前积分余额。
API_KEY="${AOP_API_KEY}"
AUTH=$(curl -s -X POST https://animateoldphotos.org/api/extension/auth
-H "Content-Type: application/json"
-d '{"licenseKey":"'"${API_KEY}"'"}')
TOKEN=$(echo "$AUTH" | jq -r '.accessToken')
CREDITS=$(echo "$AUTH" | jq -r '.creditBalance')
echo "已认证。当前可用积分为:$CREDITS"
若响应中缺失 accessToken,或 error_code 为 4010/4011,请告知用户其 API 密钥无效,并引导其前往 https://animateoldphotos.org/profile/interface-key 获取新密钥。
若当前积分少于 3,请提示用户前往 https://animateoldphotos.org/pricing 购买更多积分,并终止流程。
获取预签名上传 URL,随后将图像二进制数据 PUT 至云存储。
IMAGE_PATH="photo.jpg"
FILE_SIZE=$(stat -f%z "$IMAGE_PATH" 2>/dev/null || stat -c%s "$IMAGE_PATH" 2>/dev/null)
CONTENT_TYPE="image/jpeg" # 若为 .png 文件,请使用 image/png
UPLOAD=$(curl -s -X POST https://animateoldphotos.org/api/extension/upload-token
-H "Authorization: Bearer $TOKEN"
-H "Content-Type: application/json"
-d '{"fileName":"'"$(basename "$IMAGE_PATH")"'","contentType":"'"${CONTENT_TYPE}"'","fileSize":'"${FILE_SIZE}"'}')
UPLOAD_URL=$(echo "$UPLOAD" | jq -r '.uploadUrl')
KEY=$(echo "$UPLOAD" | jq -r '.key')
PUBLIC_URL=$(echo "$UPLOAD" | jq -r '.publicUrl')
curl -s -X PUT "$UPLOAD_URL"
-H "Content-Type: ${CONTENT_TYPE}"
--data-binary "@${IMAGE_PATH}"
echo "图像已上传。"
确认上传已完成,并接收后续任务提交所需的加密载荷(payload)。
FINALIZE=$(curl -s -X POST https://animateoldphotos.org/api/extension/upload-finalize
-H "Authorization: Bearer $TOKEN"
-F "key=${KEY}"
-F "publicUrl=${PUBLIC_URL}")
IMAGE_URL=$(echo "$FINALIZE" | jq -r '.url')
SS_MESSAGE=$(echo "$FINALIZE" | jq -r '.message')
DNT=$(echo "$FINALIZE" | jq -r '.dnt')
echo "上传已完成。"
提交动画生成任务。Ss 请求头 必须 包含步骤 3 中返回的 message 值。
PROMPT="" # 可选的用户提示词
TASK=$(curl -s -X POST https://animateoldphotos.org/api/extension/animate
-H "Authorization: Bearer $TOKEN"
-H "Ss: ${SS_MESSAGE}"
-F "prompt=${PROMPT}"
-F "input_image_url=${IMAGE_URL}"
-F "dnt=${DNT}"
-F "type=m2v_img2video"
-F "duration=5"
-F "public=false")
TASK_ID=$(echo "$TASK" | jq -r '.taskId')
TASK_DNT=$(echo "$TASK" | jq -r '.dnt')
TASK_DID=$(echo "$TASK" | jq -r '.did')
echo "任务已提交(ID:$TASK_ID)。正在轮询结果……"
若响应中包含 error_code 999990 或 10009,说明用户积分不足,请引导其前往 https://animateoldphotos.org/pricing 购买积分。
每 30 秒轮询一次。典型处理耗时为 2–5 分钟。
OUTPUT="output.mp4"
while true; do
sleep 30
STATUS=$(curl -s -G "https://animateoldphotos.org/api/extension/animate"
--data-urlencode "taskId=${TASK_ID}"
--data-urlencode "dnt=${TASK_DNT}"
--data-urlencode "did=${TASK_DID}"
--data-urlencode "type=m2v_img2video"
-H "Authorization: Bearer $TOKEN")
ERR_MSG=$(echo "$STATUS" | jq -r '.message // empty')
if [ -n "$ERR_MSG" ]; then
echo "任务失败:$ERR_MSG"
break
fi
S=$(echo "$STATUS" | jq -r '.status')
RESOURCE=$(echo "$STATUS" | jq -r '.resource // empty')
if [ "$S" -ge 99 ] 2>/dev/null && [ -n "$RESOURCE" ]; then
curl -s -o "$OUTPUT" "$RESOURCE"
echo "视频已保存至 $OUTPUT"
break
fi
echo "仍在处理中(状态:$S)……"
done
任务完成后,向用户报告生成视频的保存路径。
您也可以直接运行封装好的脚本执行完整流程:
bash scripts/animate.sh[PROMPT] [OUTPUT_PATH]
详情请参阅 scripts/animate.sh。
| error_code | 含义 | 处理方式 |
|---|---|---|
4010 |
API 密钥无效 | 引导用户获取有效密钥 |
4011 |
API 密钥已过期 | 引导用户更新密钥 |
999998 |
访问令牌无效 | 重新执行步骤 1 获取新令牌 |
999990 |
积分不足 | 引导用户购买积分 |
10009 |
积分不足 | 引导用户购买积分 |
对于网络错误,请最多重试 3 次,采用指数退避策略(延迟时间依次为 2s、4s、8s)。
AOP_API_KEY 未设置,则索取 API 密钥;再索取图像路径;最后可选地索取提示词(prompt)。{output_path}。”完整 API 接口参考请参阅 animate-old-photos-api.md。
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习