Skip to content

Gemini API 视频分析接口文档

接口地址

POST https://www.dmxapi.cn/v1beta/models/{model}:generateContent

POST 请求说明

请求方法

  • HTTP 方法: POST
  • Content-Type: application/json
  • 认证方式: 通过 URL 参数 key 传递 API 密钥

请求格式

http
POST https://www.dmxapi.cn/v1beta/models/{model}:generateContent?key=YOUR_API_KEY
Content-Type: application/json

{
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "inlineData": {
            "mimeType": "video/mp4",
            "data": "base64编码的视频数据"
          }
        },
        {
          "text": "您的分析提示文本"
        }
      ]
    }
  ]
}

必需参数

  • {model}: 模型名称,如 gemini-2.5-flash
  • key: 您的 API 密钥
  • contents: 包含视频数据和文本提示的数组

支持的视频格式

  • MP4 (推荐)
  • MOV
  • AVI
  • WEBM

注意事项

  • 视频文件需要先转换为 Base64 编码
  • 建议视频文件大小不超过 20MB
  • API 密钥请妥善保管,不要在客户端代码中暴露

Python 示例代码

python
# -*- coding: utf-8 -*-
"""
视频分析脚本
使用Gemini API对视频文件进行内容分析
支持将视频文件编码为Base64格式并发送给AI模型进行分析
"""

import base64
import json
import requests

# ==================== 配置参数 ====================
model = "gemini-2.5-flash"  # 使用的AI模型名称,支持视频分析
API_URL = f"https://www.dmxapi.cn/v1beta/models/{model}:generateContent"  # API请求地址
API_KEY = "sk-*****************************"  # API密钥,用于身份验证,替换成您自己的
VIDEO_PATH = "DMXAPI.mp4"  # 要分析的视频文件路径

def encode_video_to_base64(video_path):
    """
    将视频文件编码为Base64字符串
    
    Args:
        video_path (str): 视频文件的路径
        
    Returns:
        str: Base64编码的视频数据字符串,如果失败则返回None
        
    Note:
        Base64编码是将二进制数据转换为ASCII字符串的编码方式
        这样可以通过HTTP请求安全地传输视频数据
    """
    try:
        # 以二进制模式打开视频文件
        with open(video_path, "rb") as video_file:
            # 读取文件内容并进行Base64编码
            video_bytes = video_file.read()
            # 将字节数据编码为Base64字符串
            base64_string = base64.b64encode(video_bytes).decode("utf-8")
            return base64_string
    except Exception as e:
        # 捕获所有可能的异常(文件不存在、权限问题等)
        print(f"视频编码错误: {e}")
        return None

def analyze_video():
    """
    发送视频分析请求到Gemini API
    
    主要流程:
    1. 检查API密钥是否存在
    2. 将视频文件编码为Base64格式
    3. 构建API请求数据
    4. 发送POST请求到Gemini API
    5. 解析并显示分析结果
    """
    # 检查API密钥是否已配置
    if not API_KEY:
        print("错误:请设置API密钥")
        return

    # 第一步:编码视频文件
    print("正在编码视频文件...")
    video_data = encode_video_to_base64(VIDEO_PATH)
    if not video_data:
        print("视频编码失败,程序终止")
        return

    # 第二步:构建HTTP请求
    # 设置请求头,指定内容类型为JSON
    headers = {"Content-Type": "application/json"}
    
    # 构建请求负载(payload)
    # 按照Gemini API的格式要求组织数据
    payload = {
        "contents": [{  # 对话内容数组
            "role": "user",  # 角色:用户
            "parts": [  # 消息部分数组
                {
                    # 内联数据:包含视频的Base64编码
                    "inlineData": {
                        "mimeType": "video/mp4",  # 指定文件类型为MP4视频
                        "data": video_data  # Base64编码的视频数据
                    }
                },
                {
                    # 文本提示:告诉AI要分析什么
                    "text": "视频文件里都显示了哪些内容?"
                }
            ]
        }]
    }

    # 第三步:发送API请求
    try:
        print("正在发送请求到Gemini API...")
        
        # 发送POST请求
        response = requests.post(
            API_URL,  # 请求URL
            headers=headers,  # 请求头
            params={"key": API_KEY},  # URL参数:API密钥
            json=payload  # JSON格式的请求体
        )
        
        # 检查HTTP状态码,如果不是2xx会抛出异常
        response.raise_for_status()
        
        # 第四步:解析API响应
        result = response.json()  # 将响应转换为Python字典
        
        # 第五步:提取并显示分析结果
        # 检查响应中是否包含候选结果
        if "candidates" in result and len(result["candidates"]) > 0:
            # 获取第一个候选结果
            candidate = result["candidates"][0]
            
            # 检查候选结果中是否包含内容
            if "content" in candidate and "parts" in candidate["content"]:
                # 提取AI生成的文本内容
                text_content = candidate["content"]["parts"][0].get("text", "")
                
                # 显示分析结果
                print("=== 视频分析结果 ===")
                print(text_content)
                
                # 显示API使用统计信息
                print("\n=== 使用统计 ===")
                if "usageMetadata" in result:
                    usage = result["usageMetadata"]
                    # Token是AI模型处理文本的基本单位
                    print(f"总Token数: {usage.get('totalTokenCount', 0)}")
                    print(f"提示Token数: {usage.get('promptTokenCount', 0)}")  # 输入消耗的Token
                    print(f"回复Token数: {usage.get('candidatesTokenCount', 0)}")  # 输出消耗的Token
            else:
                print("响应格式异常,无法提取文本内容")
        else:
            print("未获得有效的分析结果")
            
        # 调试选项:显示完整的API响应(默认注释掉)
        # 如果需要查看完整的JSON响应,可以取消下面这行的注释
        # print("\n=== 完整响应 ===")
        # print(json.dumps(result, indent=2, ensure_ascii=False))
        
    except requests.exceptions.RequestException as e:
        # 捕获所有requests相关的异常
        print(f"请求失败: {e}")
        
        # 如果有响应对象,显示详细的错误信息
        if hasattr(e, 'response') and e.response:
            print(f"状态码: {e.response.status_code}")
            print(f"响应: {e.response.text}")

# ==================== 程序入口 ====================
if __name__ == "__main__":
    # 当脚本直接运行时执行视频分析
    # 这样可以防止模块被导入时自动执行
    analyze_video()

一个 Key 用全球大模型