# Midjourney 视频 API 接入

Midjourney 视频模型为 `midjourney-video`，使用 `/v1/video/generations` 创建任务，使用 `/v1/video/generations/{task_id}` 查询。虽然端点与其他视频模型相同，参数并不通用。

## 从图片生成视频

```json title="midjourney-video-generate.json"
{
  "model": "midjourney-video",
  "images": [
    "https://example.com/start.png"
  ],
  "prompt": "The camera slowly moves forward through the greenhouse",
  "resolution": "480p",
  "speed": "fast",
  "motion": "low",
  "n": 2
}
```

`images` 的第一张为首帧，可选第二张为尾帧；至少提供一张图片，不能只传提示词。`prompt` 用于描述运动。循环视频可用 `loop`，但不能同时提供尾帧。

先向 `/v1/video/generations/estimate` 发送相同 JSON，确认该规格已开放和完整任务的 `estimated_cost_usd`，再提交。示例图片需替换成真实可访问的素材。

## 分辨率、速度与时长

| 项目 | 请求方式 |
| --- | --- |
| SD / HD | `resolution: "480p"` / `"720p"` |
| 速度 | 显式指定 `speed`；HD 必须 Fast，SD Relax 还需要当前服务及报价支持 |
| 运动强度 | `motion: "low"` 或 `"high"` |
| 一次输出数量 | `n: 1`、`2` 或 `4`，表示视频条数 |
| 初次时长 | 约 5 秒，实际编码时长可能略有差异 |

不接受用 `duration` 或 `seconds` 指定任意时长，也不使用 `first_frame_url`、`reference_video_urls`、`aspect_ratio` 等其它视频模型字段。详细限制见[视频参数参考](https://api.hamubox.com/docs/models/midjourney/#视频生成与延长)。

## 读取所有视频

生成完成后遍历 `outputs[].url`。`metadata.url` 仅兼容提供第一条视频，不能用于判断结果只有一条。视频 `n` 和 MJ 图片按组提交的 `n: 1` 含义不同；估价已包含当前请求的批量，不要再乘一次数量。

若提供 `metadata.result_transfer_status`，它是保存状态。官方 CDN 地址可能在转存后更新为本站地址，需要长期地址的客户端按[下载规则](https://api.hamubox.com/docs/midjourney/faq/#生成完成后为什么下载失败)等待保存；不重新生成。

## 延长已有视频

延长只适用于本站已完成的 MJ 视频任务，不是上传任意视频后续写。使用 `operation: "extend"`、本站 `parent_task_id`、原始 `output_index`，并保持与父任务相同的分辨率；不再传 `images` 或开启 `loop`。

每次延长约 4 秒，最多 4 次；每次都会创建新任务，再次延长使用最新的任务 ID。可用次数与父任务信息仍需服务端验证。**延长需要独立定价和能力支持，不能因为模型可见就直接提交**；应先估价，不可估价则尚不可用。

完整请求见[视频延长示例](https://api.hamubox.com/docs/models/midjourney/#视频生成与延长)。
