跳转到主要内容

Sora 2 迁移到 Veo 3.1:接口改造、视频限制与成本对比

16 分钟阅读AI视频生成

Sora 2 API 计划于2026年9月24日移除。迁移到 Veo 3.1,需要重写任务提交与结果处理,并重新验证短片段、参考图和音频效果。这份指南提供接口对照、可恢复的生成示例及按秒成本计算。

Sora 2 迁移到 Veo 3.1 的接口改造、长镜头编排与成片交付示意

已有 Sora 2 视频业务可以把 Veo 3.1 作为迁移候选,但需要同时改接口和视频制作流程。 OpenAI 于2026年3月24日发出弃用通知,计划在2026年9月24日移除 Videos API、sora-2sora-2-pro 及公告列出的快照版本。截至9月5日,移除日期尚未到来;公告也没有指定 Veo 为官方替代模型。OpenAI 弃用公告

迁移最容易低估的变化有两项:原来一次生成的长镜头可能需要拆分,原来接收任务结果的代码也不能只替换模型名。应先用真实业务素材确认 Veo 能产出可交付的视频,再逐步切换新任务。以下接口和价格均以2026年9月5日的官方文档为准,Google 部分使用 Gemini Developer API,不混用 Vertex AI、消费订阅或第三方平台的计费规则。

先判断哪些视频能直接迁移

如果你的主要业务是短镜头、商品动态展示或多镜头剪辑,Veo 3.1 的单片段生成可以作为起点。如果产品承诺一镜到底的16秒、20秒视频,或依赖 Sora 的角色资产和视频编辑功能,应先改造这些具体能力,再扩大流量。

下表比较的是会改变迁移方案的官方规格。它不能证明哪个模型的物理运动、人物一致性或音画同步更好;这些仍需用你的输入和验收标准判断。Sora 视频生成指南Veo 参数与规格

当前业务依赖Sora 2 APIVeo 3.1 / Fast 的迁移影响
单片段时长当前指南包含16秒和20秒生成常规生成支持4、6、8秒,长场景需要拆镜头或评估延长功能
横竖屏与清晰度720p横竖屏;Pro 支持 1920x10801080x1920 等尺寸支持16:9、9:16与720p、1080p、4K;1080p和4K需要8秒
帧率按实际输出验收文档列出24fps,不能据4K规格承诺60fps
首帧控制input_reference 用于开场画面Python SDK 的 image 用作首帧;首尾帧模式需另传 last_frame
可复用主体非人类角色资产可跨生成复用可使用最多3张素材参考图;Sora 角色 ID 不能直接传入 Google
视频延长有独立的视频延长操作输入须为 Veo 生成的视频,延长模式限720p
音频支持同步音频当前接口原生音频始终开启,需要一并验收

Veo 的标准版模型 ID 是 veo-3.1-generate-preview,Fast 是 veo-3.1-fast-generate-preview。两者目前都是预览模型,建议把精确模型名留在服务配置里,并记录到每个生成任务中,便于后续升级和追溯。Veo 3.1 模型说明

对中国大陆团队,还要先确认实际部署地区和账号资格:中国大陆不在当前 Gemini API 支持地区名单中。中文文档、中文输入和大陆直连可用是不同的事;下面的原生接口示例要求已有符合支持地区及计费条件的环境。Gemini API 支持地区

原生接口怎么改:保留业务任务,重写提供商调用

Sora 原生视频接口使用 POST /v1/videos 创建任务,以 GET /v1/videos/{id} 查询状态,完成后通过 GET /v1/videos/{id}/content 获取 MP4。它不是普通的 chat.completions 调用。OpenAI 视频任务流程

Gemini 的 Veo REST 接口通过 :predictLongRunning 创建长时间运行的操作,返回 name,随后查询这个操作,最终从结果中取得视频地址。它与 OpenAI 的路径、认证、字段和结果结构均不同。Google 异步操作说明

集成位置Sora 原生接口Veo 的 Gemini 原生接口
认证Authorization: Bearer ...x-goog-api-key: ...
创建POST https://api.openai.com/v1/videosPOST https://generativelanguage.googleapis.com/v1beta/models/veo-3.1-generate-preview:predictLongRunning
创建结果保存视频任务 id保存完整操作 name
查询GET /v1/videos/{id}GET https://generativelanguage.googleapis.com/v1beta/{name}
完成判断statuscompletedfailed检查 done,再检查 error 和视频结果
获取文件完成后请求 /contentresponse.generateVideoResponse.generatedSamplesvideo.uri,带认证下载

业务数据库可以继续使用自己的任务编号,但应增加提供商、精确模型名、提供商任务标识、输入参数、生成状态、下载状态和最终文件位置。不要把 Google 的 name 填进只能接受 video_... 的旧字段,也不要继续依赖旧的进度百分比。

建议把“生成完成”和“交付完成”分开:生成成功后下载文件,验证视频流、时长、尺寸及播放情况,再向用户展示最终地址。Google 返回 done: true 只代表操作结束;它可能带错误,也可能没有可用的视频结果。即使已经拿到视频地址,下载失败仍然需要处理。

Veo 异步视频任务从提交、查询到下载和媒体验收的状态流程

一个可继续查询的 Python REST 示例

下面示例对应 Google 文档中的 REST 字段,展示从文本生成一个8秒、720p横屏视频的流程。先安装 requests,在环境变量中设置 GEMINI_API_KEY。这是基于接口文档编写的集成示例,不代表已验证生成画面质量。

代码为每个业务任务使用单独目录,先保存提交标记,再保存服务端返回的操作名。轮询或下载中断后,使用相同目录运行会继续查询原操作;新任务应换一个目录。

bash
python -m pip install requests # 在运行环境中设置 GEMINI_API_KEY;不要写进源码或提交到仓库。 python generate_video.py order-20260905-001

将以下代码保存为 generate_video.py

python
import json import os from pathlib import Path import sys import time import requests base = "https://generativelanguage.googleapis.com/v1beta" headers = {"x-goog-api-key": os.environ["GEMINI_API_KEY"]} job_dir = Path(sys.argv[1]) job_dir.mkdir(parents=True, exist_ok=True) operation_file = job_dir / "operation.json" submitted = job_dir / "submitted.lock" output = job_dir / "video.mp4" if operation_file.exists(): name = json.loads(operation_file.read_text())["name"] else: if submitted.exists(): raise RuntimeError( "上次提交结果不明:先查明是否已创建任务,不要直接重复提交。" ) # 每个目录只允许一个进程提交;标记保留到人工核对。 submitted.touch(exist_ok=False) result = requests.post( f"{base}/models/veo-3.1-fast-generate-preview:predictLongRunning", headers=headers, json={ "instances": [{ "prompt": ( "A ceramic teapot on a wooden table. " "The camera slowly moves closer as steam rises. " "Soft morning light, quiet room ambience, no dialogue." ) }], "parameters": { "aspectRatio": "16:9", "durationSeconds": 8, "resolution": "720p", }, }, timeout=60, ) result.raise_for_status() name = result.json()["name"] temp = job_dir / "operation.tmp" temp.write_text(json.dumps({"name": name}), encoding="utf-8") temp.replace(operation_file) # 本地等待上限为示例设置,不代表服务端任务的最长运行时间。 deadline = time.monotonic() + 20 * 60 while True: if time.monotonic() >= deadline: raise TimeoutError("停止本地等待;任务未取消,可用同一目录继续查询。") result = requests.get(f"{base}/{name}", headers=headers, timeout=30) result.raise_for_status() status = result.json() if status.get("done"): break time.sleep(10) if status.get("error"): raise RuntimeError(f"生成失败:{status['error']}") samples = ( status.get("response", {}) .get("generateVideoResponse", {}) .get("generatedSamples", []) ) uri = samples[0].get("video", {}).get("uri") if samples else None if not uri: raise RuntimeError("操作已结束,但没有视频地址;请检查返回结果和过滤信息。") partial = job_dir / "video.part" with requests.get(uri, headers=headers, stream=True, timeout=60) as response: response.raise_for_status() with partial.open("wb") as file: for chunk in response.iter_content(chunk_size=1024 * 1024): if chunk: file.write(chunk) if partial.stat().st_size == 0: raise RuntimeError("下载文件为空,保留任务编号后重试下载。") partial.replace(output) print(f"文件已保存:{output}。接下来验证视频流和实际播放。")

示例不会自动重试创建请求。原因是网络超时可能发生在服务端已经接收任务之后:没有拿到操作名,不能据此判定生成没有开始。生产环境应记录提交时间和业务任务号,核对后再决定是否重发。查询与下载失败则应尽量围绕已有操作名恢复,避免为一次文件传输问题重新生成视频。

这里的非空检查也不等于媒体验收。入库前还应通过播放器或媒体探测工具确认它确实包含视频流,时长和分辨率符合请求,并且音频没有影响业务交付。只有这些步骤完成,才能将订单标成可下载。

Google 当前仅保留生成视频 2天,应在任务完成后及时下载到自己的持久存储,不能把提供商的临时地址作为长期素材库。下载失败的任务需要在这个窗口内优先恢复。Veo 文件保留限制

长镜头、参考图和中文对白分别怎么处理

16秒、20秒任务需要重新编排

把 Sora 的 seconds="20" 原样移植给 Veo,会越过常规生成的时长范围。更稳妥的做法是先区分“用户需要20秒成片”与“用户需要连续20秒的同一镜头”。

前者可以重新分镜。例如,一个20秒的茶壶商品视频,可设计为环境展示、倒茶动作和产品收尾三个镜头,再在剪辑阶段裁切到目标长度。镜头之间允许切换,就不必强求生成模型一次完成所有动作;每个镜头仍需独立检查商品外观是否一致。

后者需要专门验证延长效果。Veo 3.1 的延长功能每次增加7秒,最多延长20次,但只能延长 Veo 生成的视频,且延长模式限720p。它不能直接把任意 Sora MP4 接过去继续拍摄;也不能把“支持延长”理解为整段运动、对白和音色必然连续。Veo 视频延长文档

如果现有产品要求1080p连续长镜头,先确认能否接受分镜剪辑,或调整交付规格。不要把延长模式与1080p、4K选项随意组合。

首帧、首尾帧和素材参考是不同控制方式

Sora 的 input_reference 与 Veo 的首帧输入具有相近用途:指定开场画面。迁移时可以重新使用符合要求的原始图片,但需要按新接口提交。Veo Python SDK 中,image 是首帧,last_frame 在生成配置中指定尾帧,reference_images 则用于最多3张素材参考图;参考图模式需要8秒生成。Veo 图像输入与参数

对已有角色或商品库,值得保留的是你有权使用的原始图片、文字描述、已下载成片和业务编号。Sora 角色 ID、视频任务 ID 并不是跨平台资产,不能作为 Google 的素材标识直接复用。从旧视频抽取一帧可以提供视觉参考,但不会导入原来的角色状态、项目或运动过程。

验收参考图时应看具体对象:商品的把手形状、标识位置、材质颜色,或者吉祥物的服装和比例。不能仅凭“支持参考图”就宣称一致性已经迁移成功。

中文对白要单独验收

Veo 当前文档说明英语获得完整支持,其他语言尚未评估,效果可能变化;同时原生音频在该接口中始终开启,音频过滤或处理问题也可能阻止视频生成。Veo 语言与音频限制

因此,面向中文短视频业务,建议把画面可用和对白可用分开记录。检查实际说出的字词、专有名词、句尾是否截断、口型是否影响观感。如果交付要求逐字准确,可以评估后期配音与字幕流程;但这是制作流程的调整,仍要验证原声处理和声画衔接。不要向用户承诺“输入中文即可稳定输出准确中文对白”。

迁移后的账单:按生成秒数和采用率计算

API 价格应与 API 价格比较,不能拿 ChatGPT 或 Google 的个人订阅月费来推导迁移节省比例。下表均为美元,按官方列出的每秒生成价格计算单条8秒视频,不含剪辑、存储等额外开销。Sora 2 定价Sora 2 Pro 定价Gemini API Veo 定价

模型与输出规格每秒价格8秒视频生成费
Sora 2,1280x720 / 720x1280$0.10$0.80
Sora 2 Pro,1280x720 / 720x1280$0.30$2.40
Sora 2 Pro,1792x1024 / 1024x1792$0.50$4.00
Sora 2 Pro,1920x1080 / 1080x1920$0.70$5.60
Veo 3.1 Standard,720p / 1080p,含音频$0.40$3.20
Veo 3.1 Standard,4K,含音频$0.60$4.80
Veo 3.1 Fast,720p,含音频$0.10$0.80
Veo 3.1 Fast,1080p,含音频$0.12$0.96
Veo 3.1 Fast,4K,含音频$0.30$2.40

对相同的8秒720p片段,Sora 2 与 Veo 3.1 Fast 的标价都是 $0.80;换成 Veo Standard 则是 $3.20。迁移不必然降价。相反,如果原来使用 Sora 2 Pro 的完整1080p档位,Veo 的1080p价格可能更低,但仍需比较实际采用率和制作要求。

Google 还列有 Veo 3.1 Lite:720p为 $0.05/秒,1080p为 $0.08/秒,没有4K档位。它可以作为单独的成本候选评估,不应在切换时无提示地替代已验收的 Standard 或 Fast。Veo 当前没有免费 API 档位;Google 按成功生成的视频收费,但成功生成后因创意不合格而弃用的片段仍需计入成本。Google Veo 价格说明

预算可以先按这个公式估算:

text
每条采用片段的平均生成成本 = 所有成功生成片段的生成费 ÷ 最终采用片段数

例如,同样生成100条8秒720p视频,假设 Fast 最终采用50条,生成费为 $80,平均每条采用片段 $1.60;假设 Standard 采用80条,生成费为 $320,平均每条采用片段 $4.00。这只是说明计算方法的假设,不是模型采用率测试。若一条成片要用多个镜头,还应将这些镜头的生成费全部归到成片,再加上剪辑与音频处理成本。

以假设采用数量计算 Veo Fast 与 Standard 每条采用片段生成成本的示例

什么时候可以切换生产流量

先从现有订单里选择有代表性的输入:最常见的视频类型、最长片段、参考图任务、中文对白,以及过去容易失败的内容。为这些样本保留原始要求,让审核人员按同一交付标准判断;不要只比较最漂亮的单个结果。

一次小规模试运行至少应回答这些业务问题:

  • 素材能否交付: 时长、尺寸、商品或角色外观、镜头运动和音频是否满足已有承诺。
  • 任务能否恢复: 提交后断网、轮询超时、进程重启和下载中断时,是否会重复生成或丢失订单。
  • 失败能否解释: 提交失败、生成失败、没有视频结果、下载失败是否能分别定位,客服能否看到原任务编号。
  • 成本能否接受: 统计真实生成费、采用片段数和制作工时,而不只比较每秒单价。

通过后再分批切换新建任务,并让原有 Sora 任务继续由原服务完成查询和下载。数据库和下载页面要能同时识别两种提供商记录,避免切换配置后旧订单无法取回文件。考虑到9月24日的计划移除日期,不应把 Sora 作为截止日期之后仍可依赖的回退方案。

如果通过第三方服务接入,需要按该服务的视频文档重新验证认证、模型名、提交字段、任务查询和下载方式。LaoZhang 文档列有 Veo 3.1 异步视频接口,可用于进一步了解接入方式;其请求规则和价格应以具体接口说明为准,不能由“统一认证”推导出与原生接口完全兼容。

完成迁移的标志,是已有类型的订单能够生成、恢复、保存并交付可播放的视频,而且成本处于可接受范围。停服时间线及其对已有集成的影响,可继续查看 Sora 2 API 停用说明;评估包含后期制作在内的预算,可阅读 AI 视频生成成本指南

#Sora 2#Veo 3.1#视频生成API#API迁移
分享文章: