Skip to content

Gemini API 视频分析接口文档

📌 接口地址

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

💻 Python 示例代码

python
"""
========================================
视频分析脚本 - DMXAPI Gemini API 视频内容分析工具
========================================

功能说明:
    使用 DMXAPI Gemini API 对视频文件进行智能内容分析
    支持将视频文件编码为 Base64 格式并发送给 AI 模型进行分析
    
作者: DMXAPI团队
"""

import base64
import json
import requests


# ========================================
# 配置参数
# ========================================

model = "gemini-2.5-flash"          # AI 模型名称,支持视频分析
API_URL = f"https://www.dmxapi.cn/v1beta/models/{model}:generateContent"
API_KEY = "sk-*****************************************"  # 请替换为您自己的 DMXAPI 密钥
VIDEO_PATH = "test/example.mp4"      # 视频文件路径


# ========================================
# 视频编码函数
# ========================================

def encode_video_to_base64(video_path):
    """
    将视频文件编码为 Base64 字符串
    
    参数:
        video_path (str): 视频文件的路径
        
    返回:
        str: Base64 编码的视频数据字符串,失败返回 None
        
    说明:
        Base64 编码是将二进制数据转换为 ASCII 字符串的编码方式,
        这样可以通过 HTTP 请求安全地传输视频数据。
    """
    try:
        # 以二进制模式打开视频文件
        with open(video_path, "rb") as video_file:
            # 读取文件内容
            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. 解析并显示分析结果
    """
    
    # ----------------------------------------
    # 步骤 1: 检查 DMXAPI 密钥
    # ----------------------------------------
    if not API_KEY:
        print("❌ 错误: 请设置 API 密钥")
        return

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

    # ----------------------------------------
    # 步骤 3: 构建 HTTP 请求
    # ----------------------------------------
    # 设置请求头
    headers = {"Content-Type": "application/json"}
    
    # 构建请求负载 (按照 DMXAPI Gemini API 格式要求)
    payload = {
        "contents": [{
            "role": "user",                    # 角色: 用户
            "parts": [
                {
                    "inlineData": {
                        "mimeType": "video/mp4",    # 文件类型
                        "data": video_data          # Base64 编码的视频数据
                    }
                },
                {
                    "text": "视频文件里都显示了哪些内容?"  # 分析提示词
                }
            ]
        }]
    }

    # ----------------------------------------
    # 步骤 4: 发送 API 请求
    # ----------------------------------------
    try:
        print("🚀 正在发送请求到 Gemini API...")
        
        # 发送 POST 请求
        response = requests.post(
            API_URL,
            headers=headers,
            params={"key": API_KEY},
            json=payload
        )
        
        # 检查 HTTP 状态码
        response.raise_for_status()
        
        # ----------------------------------------
        # 步骤 5: 解析响应结果
        # ----------------------------------------
        result = response.json()
        
        # 提取并显示分析结果
        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("\n" + "=" * 50)
                print("📊 视频分析结果")
                print("=" * 50)
                print(text_content)
                
                # 显示 API 使用统计
                print("\n" + "=" * 50)
                print("📈 使用统计")
                print("=" * 50)
                if "usageMetadata" in result:
                    usage = result["usageMetadata"]
                    print(f"总 Token 数:  {usage.get('totalTokenCount', 0)}")
                    print(f"提示 Token 数: {usage.get('promptTokenCount', 0)}")
                    print(f"回复 Token 数: {usage.get('candidatesTokenCount', 0)}")
            else:
                print("⚠️  响应格式异常,无法提取文本内容")
        else:
            print("⚠️  未获得有效的分析结果")
            
        # 调试选项: 显示完整的 API 响应(可选)
        # print("\n" + "=" * 50)
        # print("🔍 完整响应")
        # print("=" * 50)
        # print(json.dumps(result, indent=2, ensure_ascii=False))
        
    except requests.exceptions.RequestException as e:
        # 捕获所有 requests 相关的异常
        print(f"\n❌ 请求失败: {e}")
        
        # 显示详细的错误信息
        if hasattr(e, 'response') and e.response:
            print(f"状态码: {e.response.status_code}")
            print(f"响应: {e.response.text}")



# ========================================
# 程序入口
# ========================================

if __name__ == "__main__":
    """
    主程序入口
    当脚本直接运行时执行视频分析
    (防止模块被导入时自动执行)
    """
    print("=" * 50)
    print("🎬 Gemini 视频分析工具启动")
    print("=" * 50 )
    
    analyze_video()
    
    print("=" * 50)
    print("✅ 分析完成")
    print("=" * 50  )

✅ 返回示例

json
==================================================
🎬 Gemini 视频分析工具启动
==================================================
📹 正在编码视频文件...
🚀 正在发送请求到 Gemini API...

==================================================
📊 视频分析结果
==================================================
这段视频的开头显示了一只白色的鸟在黑暗的背景中飞翔。它很快变成了蓝色背景中的一只鸟,俯冲到蓝色背景中的水面上。这只鸟潜入水中,露出了水下正在迁徙的一大群鱼。随后,一群白色的鸟潜入水中,露出了另一大群鱼。在这之后,一群海豚在捕食 那些鱼。这又引发了一群鲨鱼吃鱼。最后,在视频的结尾,一条鲸鱼从水里跳出来。

==================================================
📈 使用统计
==================================================
总 Token 数:  13391
提示 Token 数: 13285
回复 Token 数: 106
==================================================
✅ 分析完成
==================================================

© 2025 DMXAPI Gemini 视频

一个 Key 用全球大模型