Gemini Omni Flash:Google 的对话式视频生成与编辑模型怎么用

梳理 Gemini Omni Flash 的定位、文生视频、图生视频、有状态视频编辑、URI 传送、提示写法、技术限制和开发者接入建议。

Gemini Omni Flash 是 Google 在 Gemini API 中提供的预览版多模态视频模型,模型名为 gemini-omni-flash-preview。它面向高速视频生成、视频编辑和镜头控制,重点不只是“根据一句话生成视频”,而是把文本、图片、音频、视频和多轮交互放进同一个工作流里。

这类能力最值得关注的地方,是视频生成开始从一次性输出走向可迭代编辑。开发者可以先生成一段视频,再用后续提示修改光效、背景、物体、文字或风格,并通过 previous_interaction_id 让模型沿用上一轮视频状态。对短视频工具、广告素材、产品演示、教育内容和创意原型来说,这比每次重新生成更接近真实工作流。

需要先明确一点:Gemini Omni Flash 目前仍是预览版。它适合实验、原型验证和内部工具接入,但不应该在没有兜底方案的情况下直接承担关键生产流程。

Gemini Omni Flash 能做什么

官方文档把 Gemini Omni Flash 定位为高性能多模态模型,核心能力可以概括为三类:

  • 文生视频:输入文字提示,生成带音频的视频。
  • 图生视频:上传参考图片,再用提示描述动作、镜头和氛围。
  • 有状态视频编辑:基于上一轮生成的视频继续修改,不必完整重述所有画面细节。

它和传统视频模型的差异主要在“交互”。通过 Gemini API 的 Interactions API,一次生成或编辑会成为一个 interaction。后续请求可以引用之前的 interaction,让模型理解上下文,并尽量保留未被要求修改的内容。

最小调用方式

Gemini Omni Flash 使用 interactions.create 调用。最简单的文生视频请求只需要模型名和提示词:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import base64
from google import genai

client = genai.Client()

interaction = client.interactions.create(
    model="gemini-omni-flash-preview",
    input="A marble rolling fast on a chain reaction style track, continuous smooth shot."
)

with open("marble.mp4", "wb") as f:
    f.write(base64.b64decode(interaction.output_video.data))

如果直接走 REST API,请注意响应结构和 SDK 有差异。SDK 会提供 interaction.output_video 这样的便捷字段;REST 响应里通常需要从 steps 数组里的 model_output 找到视频内容。

控制画幅和输出

默认输出是横屏 16:9。如果要生成竖屏视频,可以在 response_format 中设置 aspect_ratio

1
2
3
4
5
6
7
8
interaction = client.interactions.create(
    model="gemini-omni-flash-preview",
    input="A futuristic city with neon lights and flying cars, cyberpunk style",
    response_format={
        "type": "video",
        "aspect_ratio": "9:16"
    }
)

这对短视频、广告素材和移动端内容尤其重要。建议在产品层把横屏和竖屏作为明确选项,而不是让用户只在提示词里描述,因为参数比自然语言更稳定。

图生视频怎么接入

图生视频的输入是图片加文本。图片可以作为动作参考、主体参考、风格参考或起始帧。最基本的输入结构是:

1
2
3
4
5
6
7
interaction = client.interactions.create(
    model="gemini-omni-flash-preview",
    input=[
        {"type": "image", "data": base64_image, "mime_type": "image/jpeg"},
        {"type": "text", "text": "Turn this into realistic footage, using the drawing only as a guide for movement."}
    ],
)

实际使用时,不要只写“让它动起来”。更好的提示应说明动作、镜头、场景、光效和需要保留的元素。例如产品图生成短视频时,可以写清楚产品应保持外观一致、镜头如何移动、背景如何变化,以及不要改变品牌标识。

如果输入里有多张图片,建议用 video_config.task 指明任务类型,减少模型猜测:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
interaction = client.interactions.create(
    model="gemini-omni-flash-preview",
    input=[
        {"type": "image", "data": base64_image, "mime_type": "image/jpeg"},
        {"type": "text", "text": "Use this image as a reference and generate a cinematic product shot."}
    ],
    generation_config={
        "video_config": {
            "task": "image_to_video"
        }
    },
)

task 可用于区分 text_to_videoimage_to_videoreference_to_videoedit。对应用开发来说,这是一个值得暴露给高级用户或内部模板系统的参数。

有状态视频编辑

有状态编辑是 Gemini Omni Flash 更像“创作工具”而不是“单次生成接口”的地方。第一轮生成视频后,第二轮可以用 previous_interaction_id 引用上一轮结果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
first = client.interactions.create(
    model="gemini-omni-flash-preview",
    input="A woman playing violin outdoors."
)

second = client.interactions.create(
    model="gemini-omni-flash-preview",
    previous_interaction_id=first.id,
    input="Make the violin invisible. Keep everything else the same."
)

这里的关键不是写长提示,而是写准改动。官方提示指南也强调,视频编辑通常更适合短指令。要修改某个局部元素时,可以追加 Keep everything else the same.,减少模型把其他画面也一起改掉的概率。

编辑自己的视频

如果要编辑用户上传的视频,官方建议先通过 Files API 上传视频,再把文件 URI 作为输入传给 Gemini Omni Flash。原因很简单:视频文件可能很大,直接塞 base64 不利于请求体大小和稳定性。

接入这类功能时,产品层至少要处理四件事:

  • 上传后轮询文件状态,确认不再是 PROCESSING
  • 处理 FAILED 状态,并给用户可理解的失败原因。
  • 对大文件、长视频和高分辨率素材设置明确限制。
  • 在不支持上传视频编辑的地区隐藏或降级该功能。

官方文档也提醒,并非所有地区都支持编辑上传视频。面向全球用户时,不要把“可编辑模型生成视频”和“可编辑用户上传视频”混为一谈。

大视频建议使用 URI 传送

如果生成视频超过 4MB,建议在 response_format 里使用 delivery: "uri"。这样响应返回的是 Google 托管 URI,客户端再轮询状态并下载视频,而不是在 JSON 里直接返回一大段 base64。

这对 Web 应用很实用:前端可以先显示任务进度,后端负责轮询和下载,避免浏览器处理巨大的内嵌响应。需要注意的是,官方文档提到 GET /v1beta/interactions/{id} 目前可能仍会在 data 字段返回内嵌 base64,uri 字段只保证在初始创建响应或 SSE 流里提供。因此如果你的流程依赖 URI,最好在创建请求的响应阶段就保存好相关信息。

提示词写法:把镜头说清楚

Gemini Omni Flash 默认可能生成多个镜头。如果你需要单镜头,要明确写:

  • 单个不间断场景;
  • 连续镜头;
  • 不要场景剪辑。

如果你需要控制节奏,可以用自然语言描述时间点,例如“3 秒后人物进入画面”,也可以写成 [0-3s][3-6s] 这样的时间段。对广告、教程和产品展示来说,这比只描述画面更可控。

视频里需要文字时,也应该把文字内容直接写清楚。模型可以尝试渲染可读文字,但如果提示里没有定义招牌、字幕或屏幕文字,它可能会生成不稳定或无意义的文本。

当前限制

Gemini Omni Flash 预览版还有不少边界,接入前需要认真看一遍:

  • 欧洲经济区、瑞士和英国不支持上传和编辑包含未成年人的图片。
  • 某些可识别人物的图片不支持上传和编辑。
  • 欧洲经济区、瑞士和英国用户目前不能编辑上传视频,但可以编辑模型生成的视频。
  • 当前 API 不支持上传音频参考。
  • 不支持跨多个视频进行引用或推理。
  • 不支持视频扩展、视频插值和语音编辑。
  • 不支持预配吞吐量。
  • 不支持系统指令、温度、top_p、停止序列和负面提示等常见生成参数。
  • 不支持把 YouTube 视频作为媒体来源。

这些限制会直接影响产品设计。比如面向企业用户时,要把地区、人物素材、上传视频、审核策略和失败提示都放进流程,而不是只做一个输入框和生成按钮。

开发者接入建议

如果你准备把 Gemini Omni Flash 接进自己的应用,可以按这个顺序做:

  1. 先做文生视频 MVP,只支持 16:99:16 两种画幅。
  2. 增加图生视频,限制上传图片格式和大小,并提供提示模板。
  3. 再做有状态编辑,把每轮 interaction.id 存到任务记录里。
  4. 对大视频启用 URI 传送,避免 base64 响应拖垮前后端。
  5. 把地区限制、内容安全失败、文件处理失败和超时都做成明确状态。
  6. 最后再开放多图片参考、时间码、文字渲染和更复杂的镜头模板。

它现在更适合“创意工作流工具”而不是普通聊天接口。好的产品体验应该围绕任务来组织:生成短广告、让产品图动起来、替换背景、修改光效、加字幕、做竖屏版本,而不是把所有能力都塞进一个自由文本框。

小结

Gemini Omni Flash 的价值在于把视频生成、图片参考和多轮编辑放进同一个 Interactions API 流程里。它不是最稳妥的生产级视频管线,但已经很适合做创意原型、素材生成工具和内部自动化流程。

真正接入时,重点不只是会调用 gemini-omni-flash-preview,而是要把任务状态、文件上传、地区限制、提示模板和失败处理一起设计好。视频模型越强,产品层越需要把边界说清楚。

记录并分享
使用 Hugo 构建
主题 StackJimmy 设计