Omni / Veo 视频(OpenAI 与 Gemini 双协议)
このコンテンツはまだ日本語訳がありません。
Omni / Veo 视频(OpenAI 与 Gemini 双协议)
Section titled “Omni / Veo 视频(OpenAI 与 Gemini 双协议)”Omni(omni-t2v、omni-i2v、omni-r2v、omni-v2v、omni-40s)和 Veo(veo_3_1_*)同一个模型可以用两种协议调用,计费与能力一致,按你的 SDK 选择即可:
| 协议 | 提交 | 查询 | 下载 |
|---|---|---|---|
| OpenAI 兼容 | POST /v1/videos(V2V 用 /v1/videos/edits) | GET /v1/videos/{id} | GET /v1/videos/{id}/content |
| Gemini | POST /v1beta/models/{model}:predictLongRunning | GET /v1beta/operations/{name} | 结果中的 video.uri |
OpenAI 协议用 Authorization: Bearer YOUR_API_KEY;Gemini 协议可用 x-goog-api-key: YOUR_API_KEY 或 ?key=YOUR_API_KEY。
| 模型 | 用途 | 参考图 | 时长(秒) |
|---|---|---|---|
omni-t2v | 文生视频 | 0 | 4、6、8、10 |
omni-i2v | 图生视频(首帧) | 1(首帧) | 4、6、8、10 |
omni-r2v | 参考图生成 | 1–3 | 8 |
omni-v2v | 视频编辑 | 源视频 + 0–2 张参考图 | 1–10 |
omni-40s | 长视频 | 0–9 | 40 |
| 参数(OpenAI / Gemini) | 说明 |
|---|---|
resolution / parameters.resolution | 720p(默认,原生)、360p(原生低清)、1080p(720p 生成后免费放大,omni-40s 同样支持) |
aspect_ratio / parameters.aspectRatio | 16:9(默认)或 9:16 |
duration / parameters.durationSeconds | 见上表 |
Veo 模型名中已包含版本、横竖屏与分辨率(如 veo_3_1_t2v_fast_portrait、veo_3_1_t2v_1080p),参数与提交方式与 Omni 相同。
OpenAI 协议
Section titled “OpenAI 协议”JSON(公网图片 URL)
Section titled “JSON(公网图片 URL)”curl https://api.4allapi.com/v1/videos \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "omni-r2v", "prompt": "参考图中的人物在雨夜霓虹街头行走,电影感", "duration": 8, "aspect_ratio": "16:9", "resolution": "720p", "images": [ "https://cdn.example.com/reference-1.png", "https://cdn.example.com/reference-2.png" ] }'omni-i2v 只用 1 张图片作首帧(image 传单个 URL;多传的图片会被忽略,不支持尾帧):
curl https://api.4allapi.com/v1/videos \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "omni-i2v", "prompt": "画面中的人物缓缓转身看向镜头,镜头缓慢推进", "duration": 8, "aspect_ratio": "16:9", "resolution": "720p", "image": "https://cdn.example.com/first-frame.png" }'图片字段:单张用 image(字符串),多张用 images(数组,按顺序),两者都是公网 URL;omni-r2v 1–3 张、omni-40s 0–9 张用 images,omni-t2v 不传图片。
omni-40s 的 duration 传 40,images 可选(0–9 张)。
上传本地图片(multipart)
Section titled “上传本地图片(multipart)”每张图片重复一个 input_reference 文件字段,顺序即参考顺序(omni-i2v 只传 1 张);V2V 的源视频用 video 字段。
curl https://api.4allapi.com/v1/videos \ -H "Authorization: Bearer $API_KEY" \ -F "model=omni-i2v" \ -F "prompt=画面中的人物缓缓转身看向镜头" \ -F "duration=8" \ -F "aspect_ratio=9:16" \ -F "resolution=1080p" \ -F "input_reference=@first.png;type=image/png"视频编辑请参考 Omni V2V 视频编辑。
curl https://api.4allapi.com/v1/videos/<VIDEO_ID> -H "Authorization: Bearer $API_KEY"curl -L https://api.4allapi.com/v1/videos/<VIDEO_ID>/content \ -H "Authorization: Bearer $API_KEY" -o output.mp4Gemini 协议
Section titled “Gemini 协议”curl "https://api.4allapi.com/v1beta/models/omni-r2v:predictLongRunning?key=$API_KEY" \ -H "Content-Type: application/json" \ -d '{ "instances": [{ "prompt": "参考图中的人物在雨夜霓虹街头行走,电影感", "image": {"gcsUri": "https://cdn.example.com/reference-1.png", "mimeType": "image/png"}, "referenceImages": [ {"gcsUri": "https://cdn.example.com/reference-2.png", "mimeType": "image/png"} ] }], "parameters": {"durationSeconds": 8, "aspectRatio": "16:9", "resolution": "720p"} }'# → {"name": "operations/<OP_ID>"}- 图片可以是公网 URL(
gcsUri)或 Base64({"bytesBase64Encoded": "...", "mimeType": "image/png"})。 - 第一张放
image,其余按顺序放referenceImages(每项直接是图片对象);omni-i2v只传image一张。 - 纯文生视频只传
prompt。
# 轮询直到 done=truecurl "https://api.4allapi.com/v1beta/operations/<OP_ID>?key=$API_KEY"# 完成后 response.generateVideoResponse.generatedSamples[0].video.uri 即成片地址;# 下载时带上 Authorization: Bearer $API_KEYPython(OpenAI 协议)
Section titled “Python(OpenAI 协议)”import timeimport requests
BASE_URL = "https://api.4allapi.com"HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}
body = { "model": "omni-t2v", "prompt": "A koi carp gliding through a sunlit pond, cinematic slow motion.", "duration": 8, "aspect_ratio": "16:9", "resolution": "1080p",}task = requests.post(f"{BASE_URL}/v1/videos", headers=HEADERS, json=body).json()task_id = task["id"]while task.get("status") not in ("completed", "failed"): time.sleep(5) task = requests.get(f"{BASE_URL}/v1/videos/{task_id}", headers=HEADERS).json()video = requests.get(f"{BASE_URL}/v1/videos/{task_id}/content", headers=HEADERS)open("output.mp4", "wb").write(video.content)