You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于Gemini 1.5 Pro/Flash处理MP4视频并提取场景截图的技术咨询

Gemini 1.5 Pro/Flash处理MP4视频并提取场景截图的技术咨询

你好!针对你用Gemini 1.5 Pro/Flash处理MP4视频提取场景截图的问题,我整理了目前可行的方案和细节:

核心结论:无法直接返回截图

Gemini 1.5系列(包括Pro和Flash)目前不支持直接返回视频场景的图片文件。它的视频交互能力聚焦于基于视频内容生成文本输出——比如分析画面、描述场景、识别时间戳,没办法直接输出图片格式的帧数据。

可行替代方案:时间戳 + 第三方工具截取

你想到的思路是完全可行的:先让模型识别视频中的关键场景,返回对应的时间戳(分/秒),再用Python的第三方库(比如OpenCV、FFmpeg)根据时间戳截取视频帧。

调整后的Vertex AI调用代码(获取关键场景时间戳)

针对你用Python调用的场景,我修改了官方示例,让模型返回结构化的关键场景时间戳列表:

import vertexai
from vertexai.generative_models import GenerativeModel, Part

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

model = GenerativeModel("gemini-1.5-flash-002")

video_file_uri = (
    "gs://cloud-samples-data/generative-ai/video/behind_the_scenes_pixel.mp4"
)

# 明确prompt指令,让模型输出标准化的时间戳+场景描述
prompt = """
仔细遍历视频的每一个关键画面,识别出所有内容发生明显变化的关键场景,按以下格式输出:
- [时间戳(mm:ss)]: 场景简要描述
严格基于视频内容输出,不要添加任何视频中没有的信息。
"""

contents = [
    Part.from_uri(video_file_uri, mime_type="video/mp4"),
    prompt,
]

response = model.generate_content(contents)
print(response.text)

用OpenCV根据时间戳截取帧

拿到模型返回的时间戳后,你可以用OpenCV快速截取对应帧并保存为图片,示例代码如下:

import cv2

def save_scene_screenshot(video_local_path, timestamp, save_filename=None):
    # 解析时间戳为毫秒(比如"00:48"转为48000毫秒)
    mins, secs = map(int, timestamp.split(":"))
    target_ms = (mins * 60 + secs) * 1000

    # 打开视频文件
    video_cap = cv2.VideoCapture(video_local_path)
    # 设置读取位置到目标时间戳
    video_cap.set(cv2.CAP_PROP_POS_MSEC, target_ms)
    # 读取帧
    success, frame = video_cap.read()
    
    if success:
        # 自动生成保存文件名(如果没指定)
        if not save_filename:
            save_filename = f"scene_{timestamp.replace(':', '_')}.png"
        cv2.imwrite(save_filename, frame)
        print(f"已保存场景截图:{save_filename}")
    else:
        print(f"无法读取时间戳{timestamp}对应的帧")
    
    video_cap.release()

# 示例调用:假设从Gemini获取的时间戳是"00:48"
save_scene_screenshot("your_video.mp4", "00:48")

关于官方示例的补充

你参考的Vertex AI官方示例(包括你贴出的代码)都只返回文本,这是因为Gemini模型的设计定位是多模态输入-文本输出,暂时没有开放直接返回图片的能力,所以你找不到返回截图的相关接口。

备注:内容来源于stack exchange,提问作者Yuval Maliniak

火山引擎 最新活动