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-flashkey: 您的 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()