處理超大視頻文件的 AI 理解一直是開發者的痛點——文件太大上傳超時、base64 編碼內存溢出、接口返回 413 錯誤。好消息是,Google 在 2026 年 1 月大幅提升了 Gemini API 的文件處理能力: 內聯上傳限制從 20MB 提升到 100MB,Files API 支持最大 2GB,還新增了 YouTube URL 直接分析功能。本文將詳解這 3 種處理超大視頻的方案,幫你選擇最適合的技術路線。
核心價值: 讀完本文,你將掌握處理 100MB 到 2GB 超大視頻的完整方案,能夠根據視頻大小、使用頻率和業務場景選擇最優的上傳方式。

Gemini 超大視頻文件上傳方案速覽
在深入技術細節之前,先了解 Gemini 提供的三種視頻上傳方式:
| 上傳方式 | 文件大小限制 | 適用場景 | 優勢 | 侷限 |
|---|---|---|---|---|
| Base64 內聯 | ≤ 100MB | 小視頻、快速測試 | 單次請求、代碼簡單 | 大文件內存壓力大 |
| Files API | ≤ 2GB | 大視頻、重複使用 | 支持超大文件、可複用 | 需要兩步操作 |
| YouTube URL | 無限制* | 超長視頻、公開內容 | 無需上傳、處理超長視頻 | 僅支持公開/不公開視頻 |
🎯 核心建議: 對於超過 100MB 的視頻文件,優先考慮上傳到 YouTube 通過 URL 分析,或使用 Files API 上傳。這兩種方式都能穩定處理 GB 級別的視頻文件。
Gemini 視頻理解支持的模型
| 模型 | 最大視頻時長 | 上下文窗口 | 特點 |
|---|---|---|---|
| gemini-3-pro-preview | 6 小時 (低分辨率) | 2M tokens | 最強視頻理解能力 |
| gemini-2.5-flash | 3 小時 (低分辨率) | 1M tokens | 性價比之選 |
| gemini-2.5-pro | 6 小時 (低分辨率) | 2M tokens | 複雜任務首選 |

Gemini 視頻理解方案一: YouTube URL 直接分析
對於超大視頻文件,最優雅的解決方案是上傳到 YouTube,然後通過 URL 直接讓 Gemini 分析。這是 Google 的原生集成,無需任何文件傳輸。
YouTube URL 方案核心優勢
| 優勢 | 說明 |
|---|---|
| 無文件大小限制 | YouTube 支持上傳最大 256GB 的視頻 |
| 無需重複上傳 | 視頻已在 YouTube,直接引用即可 |
| 原生集成 | Google 自家產品,延遲最低 |
| 支持超長視頻 | 付費版無時長限制 |
YouTube URL 視頻理解代碼示例
import openai
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.apiyi.com/v1" # 使用 API易 統一接口
)
# 通過 YouTube URL 分析視頻
response = client.chat.completions.create(
model="gemini-3-pro-preview",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "請分析這個視頻的主要內容,列出關鍵時間點和對應的事件"
},
{
"type": "video_url",
"video_url": {
"url": "https://www.youtube.com/watch?v=VIDEO_ID"
}
}
]
}
],
max_tokens=4096
)
print(response.choices[0].message.content)
YouTube URL 方案使用限制
| 限制項 | 免費版 | 付費版 |
|---|---|---|
| 每日上傳時長 | 8 小時 | 無限制 |
| 單次請求視頻數 | 1 個 | 10 個 (Gemini 2.5+) |
| 視頻可見性要求 | 公開/不公開 | 公開/不公開 |
| 私有視頻 | ❌ 不支持 | ❌ 不支持 |
💡 實用技巧: 如果視頻內容涉及隱私,可以將 YouTube 視頻設爲"不公開"(Unlisted),這樣只有知道鏈接的人才能訪問,但 Gemini API 仍可正常分析。通過 API易 apiyi.com 調用時,YouTube URL 功能同樣支持。
時間戳查詢示例
Gemini 支持對視頻特定時間點進行精確查詢:
# 查詢視頻特定時間點的內容
response = client.chat.completions.create(
model="gemini-3-pro-preview",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "請告訴我視頻 02:30 和 05:45 這兩個時間點分別在展示什麼內容?"
},
{
"type": "video_url",
"video_url": {
"url": "https://www.youtube.com/watch?v=VIDEO_ID"
}
}
]
}
]
)
Gemini 視頻理解方案二: Files API 上傳大文件
對於無法上傳到 YouTube 的私有視頻 (如內部培訓、商業機密),Files API 是處理 100MB-2GB 視頻的最佳選擇。
Files API 上傳流程
本地視頻文件 → Files API 上傳 → 獲取 file_uri → 發起分析請求
Files API 完整代碼示例
import google.generativeai as genai
import time
# 配置 API
genai.configure(api_key="YOUR_API_KEY")
def upload_large_video(video_path: str) -> str:
"""
上傳大視頻文件到 Gemini Files API
支持最大 2GB 文件
"""
print(f"正在上傳視頻: {video_path}")
# 上傳文件
video_file = genai.upload_file(
path=video_path,
display_name="large_video"
)
# 等待文件處理完成
while video_file.state.name == "PROCESSING":
print("處理中...")
time.sleep(5)
video_file = genai.get_file(video_file.name)
if video_file.state.name == "FAILED":
raise ValueError(f"文件處理失敗: {video_file.state.name}")
print(f"上傳成功! URI: {video_file.uri}")
return video_file.uri
def analyze_video(file_uri: str, prompt: str) -> str:
"""
分析已上傳的視頻
"""
model = genai.GenerativeModel("gemini-3-pro-preview")
response = model.generate_content([
file_uri,
prompt
])
return response.text
# 使用示例
video_uri = upload_large_video("/path/to/large_video.mp4")
result = analyze_video(
video_uri,
"請詳細分析這個視頻的內容,包括主要場景、人物活動和關鍵信息"
)
print(result)
Files API 文件管理
# 列出所有已上傳的文件
for file in genai.list_files():
print(f"文件名: {file.name}")
print(f" URI: {file.uri}")
print(f" 大小: {file.size_bytes / 1024 / 1024:.2f} MB")
print(f" 狀態: {file.state.name}")
print()
# 刪除不再需要的文件 (節省存儲空間)
genai.delete_file(file.name)
🎯 成本優化: Files API 上傳的文件可以在多次請求中複用,避免重複上傳。建議對於需要多次分析的視頻,先上傳一次,然後保存 file_uri 供後續使用。通過 API易 apiyi.com 平臺調用時,同樣支持 Files API 的完整功能。

Gemini 視頻理解方案三: Base64 內聯上傳
對於 100MB 以下的小視頻,Base64 內聯上傳是最簡單的方式,只需一次 API 調用即可完成。
Base64 內聯上傳代碼示例
import openai
import base64
from pathlib import Path
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.apiyi.com/v1" # API易 統一接口
)
def analyze_video_inline(video_path: str, prompt: str) -> str:
"""
內聯上傳視頻進行分析 (適用於 ≤100MB 的視頻)
"""
# 讀取並編碼視頻
video_bytes = Path(video_path).read_bytes()
video_size_mb = len(video_bytes) / 1024 / 1024
if video_size_mb > 100:
raise ValueError(f"視頻大小 {video_size_mb:.2f}MB 超過 100MB 限制,請使用 Files API")
video_base64 = base64.b64encode(video_bytes).decode('utf-8')
# 確定 MIME 類型
suffix = Path(video_path).suffix.lower()
mime_types = {
'.mp4': 'video/mp4',
'.avi': 'video/avi',
'.mov': 'video/quicktime',
'.webm': 'video/webm',
'.mkv': 'video/x-matroska'
}
mime_type = mime_types.get(suffix, 'video/mp4')
response = client.chat.completions.create(
model="gemini-3-pro-preview",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": prompt},
{
"type": "image_url", # 視頻也使用 image_url 類型
"image_url": {
"url": f"data:{mime_type};base64,{video_base64}"
}
}
]
}
],
max_tokens=4096
)
return response.choices[0].message.content
# 使用示例
result = analyze_video_inline(
"short_clip.mp4",
"請描述這個視頻片段的主要內容"
)
print(result)
Base64 內聯上傳注意事項
| 注意事項 | 說明 |
|---|---|
| 內存佔用 | Base64 編碼會使數據量增加約 33% |
| 超時風險 | 大文件上傳時間長,可能觸發超時 |
| 不可複用 | 每次請求都需要重新上傳 |
| 建議時長 | 1 分鐘以內的短視頻 |
Gemini 視頻理解 Token 計算與成本優化
理解 Token 計算規則對於控制成本至關重要。
Gemini 視頻 Token 計算公式
| 分辨率 | 視頻幀 | 音頻 | 每秒總計 |
|---|---|---|---|
| 標準/高 | 258 tokens/幀 | 32 tokens/秒 | ~300 tokens/秒 |
| 低 (360p) | 66 tokens/幀 | 32 tokens/秒 | ~100 tokens/秒 |
不同時長視頻的 Token 消耗
| 視頻時長 | 標準分辨率 | 低分辨率 | 節省比例 |
|---|---|---|---|
| 1 分鐘 | 18,000 | 6,000 | 67% |
| 10 分鐘 | 180,000 | 60,000 | 67% |
| 1 小時 | 1,080,000 | 360,000 | 67% |
| 6 小時 | 6,480,000 | 2,160,000 | 67% |
設置低分辨率節省成本
# 使用低分辨率處理長視頻,節省 67% token
response = client.chat.completions.create(
model="gemini-3-pro-preview",
messages=[...],
extra_body={
"media_resolution": "low" # 360p,100 tokens/秒
}
)
💰 成本優化: 對於內容理解類任務 (如視頻摘要、內容分類),使用低分辨率通常足夠。只有在需要識別細節 (如文字、小物體) 時才需要高分辨率。通過 API易 apiyi.com 調用 Gemini 視頻理解功能,可以獲得更優惠的價格。
Gemini 超大視頻處理實戰: 完整工作流
下面是一個根據視頻大小自動選擇最佳上傳方式的完整解決方案。
點擊展開完整代碼
"""
Gemini 超大視頻文件理解完整解決方案
自動根據視頻大小選擇最佳上傳方式
"""
import openai
import google.generativeai as genai
import base64
import time
from pathlib import Path
from typing import Optional, Union
from dataclasses import dataclass
from enum import Enum
class UploadMethod(Enum):
INLINE = "inline"
FILES_API = "files_api"
YOUTUBE = "youtube"
@dataclass
class VideoAnalysisResult:
success: bool
method: UploadMethod
content: Optional[str] = None
error: Optional[str] = None
tokens_used: Optional[int] = None
class GeminiVideoAnalyzer:
"""
智能視頻分析器
自動選擇最佳上傳方式處理各種大小的視頻
"""
# 文件大小閾值 (字節)
INLINE_MAX_SIZE = 100 * 1024 * 1024 # 100MB
FILES_API_MAX_SIZE = 2 * 1024 * 1024 * 1024 # 2GB
def __init__(
self,
api_key: str,
base_url: str = "https://api.apiyi.com/v1"
):
self.client = openai.OpenAI(
api_key=api_key,
base_url=base_url
)
genai.configure(api_key=api_key)
def _get_file_size(self, video_path: str) -> int:
"""獲取文件大小"""
return Path(video_path).stat().st_size
def _choose_method(
self,
video_path: Optional[str] = None,
youtube_url: Optional[str] = None
) -> UploadMethod:
"""根據輸入自動選擇上傳方式"""
if youtube_url:
return UploadMethod.YOUTUBE
if video_path:
file_size = self._get_file_size(video_path)
if file_size <= self.INLINE_MAX_SIZE:
return UploadMethod.INLINE
elif file_size <= self.FILES_API_MAX_SIZE:
return UploadMethod.FILES_API
else:
raise ValueError(
f"文件大小 {file_size / 1024 / 1024 / 1024:.2f}GB "
f"超過 2GB 限制,請上傳到 YouTube 後使用 URL 分析"
)
raise ValueError("必須提供 video_path 或 youtube_url")
def _analyze_inline(
self,
video_path: str,
prompt: str,
media_resolution: str = "standard"
) -> str:
"""內聯上傳分析"""
video_bytes = Path(video_path).read_bytes()
video_base64 = base64.b64encode(video_bytes).decode('utf-8')
suffix = Path(video_path).suffix.lower()
mime_types = {
'.mp4': 'video/mp4',
'.avi': 'video/avi',
'.mov': 'video/quicktime',
'.webm': 'video/webm'
}
mime_type = mime_types.get(suffix, 'video/mp4')
response = self.client.chat.completions.create(
model="gemini-3-pro-preview",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": prompt},
{
"type": "image_url",
"image_url": {
"url": f"data:{mime_type};base64,{video_base64}"
}
}
]
}],
extra_body={"media_resolution": media_resolution}
)
return response.choices[0].message.content
def _analyze_files_api(
self,
video_path: str,
prompt: str,
media_resolution: str = "standard"
) -> str:
"""Files API 上傳分析"""
# 上傳文件
video_file = genai.upload_file(path=video_path)
# 等待處理完成
while video_file.state.name == "PROCESSING":
time.sleep(5)
video_file = genai.get_file(video_file.name)
if video_file.state.name == "FAILED":
raise ValueError("文件處理失敗")
# 分析視頻
model = genai.GenerativeModel("gemini-3-pro-preview")
response = model.generate_content(
[video_file, prompt],
generation_config={
"media_resolution": media_resolution
}
)
return response.text
def _analyze_youtube(
self,
youtube_url: str,
prompt: str,
media_resolution: str = "standard"
) -> str:
"""YouTube URL 分析"""
response = self.client.chat.completions.create(
model="gemini-3-pro-preview",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": prompt},
{
"type": "video_url",
"video_url": {"url": youtube_url}
}
]
}],
extra_body={"media_resolution": media_resolution}
)
return response.choices[0].message.content
def analyze(
self,
prompt: str,
video_path: Optional[str] = None,
youtube_url: Optional[str] = None,
media_resolution: str = "standard",
force_method: Optional[UploadMethod] = None
) -> VideoAnalysisResult:
"""
分析視頻內容
Args:
prompt: 分析提示詞
video_path: 本地視頻路徑 (可選)
youtube_url: YouTube 視頻 URL (可選)
media_resolution: 分辨率 ("low"/"standard"/"high")
force_method: 強制使用的上傳方式 (可選)
Returns:
VideoAnalysisResult 對象
"""
try:
# 選擇上傳方式
method = force_method or self._choose_method(video_path, youtube_url)
print(f"使用上傳方式: {method.value}")
# 執行分析
if method == UploadMethod.INLINE:
content = self._analyze_inline(video_path, prompt, media_resolution)
elif method == UploadMethod.FILES_API:
content = self._analyze_files_api(video_path, prompt, media_resolution)
elif method == UploadMethod.YOUTUBE:
content = self._analyze_youtube(youtube_url, prompt, media_resolution)
return VideoAnalysisResult(
success=True,
method=method,
content=content
)
except Exception as e:
return VideoAnalysisResult(
success=False,
method=method if 'method' in dir() else UploadMethod.INLINE,
error=str(e)
)
# 使用示例
if __name__ == "__main__":
analyzer = GeminiVideoAnalyzer(api_key="your-api-key")
# 示例1: 小視頻 (自動使用內聯上傳)
result = analyzer.analyze(
prompt="請描述視頻內容",
video_path="small_clip.mp4"
)
# 示例2: 大視頻 (自動使用 Files API)
result = analyzer.analyze(
prompt="請分析這個培訓視頻的主要知識點",
video_path="training_video_500mb.mp4",
media_resolution="low" # 長視頻用低分辨率節省成本
)
# 示例3: YouTube 視頻
result = analyzer.analyze(
prompt="請總結這個視頻的核心觀點",
youtube_url="https://www.youtube.com/watch?v=VIDEO_ID"
)
if result.success:
print(f"分析方式: {result.method.value}")
print(f"結果:\n{result.content}")
else:
print(f"分析失敗: {result.error}")
Gemini 視頻理解常見問題
Q1: 超過 2GB 的視頻怎麼處理?
超過 2GB 的視頻有以下解決方案:
- 上傳到 YouTube: 最推薦的方式,YouTube 支持最大 256GB 的視頻,設爲"不公開"即可保護隱私
- 視頻壓縮: 使用 FFmpeg 降低分辨率或碼率
- 視頻分割: 將長視頻分割成多個片段分別分析
# FFmpeg 壓縮視頻到 1GB 以內
ffmpeg -i input.mp4 -vcodec h264 -acodec aac -fs 1G output.mp4
# 分割視頻爲 10 分鐘片段
ffmpeg -i input.mp4 -c copy -segment_time 600 -f segment output_%03d.mp4
通過 API易 apiyi.com 平臺調用時,支持所有標準的視頻處理方式。
Q2: YouTube 私有視頻能分析嗎?
目前 Gemini API 不支持分析私有 (Private) 視頻,但支持以下兩種:
| 可見性 | 支持情況 | 說明 |
|---|---|---|
| 公開 (Public) | ✅ 支持 | 任何人可見 |
| 不公開 (Unlisted) | ✅ 支持 | 僅知道鏈接可見 |
| 私有 (Private) | ❌ 不支持 | 僅作者可見 |
建議: 如果視頻涉及隱私,設爲"不公開"是最佳選擇,既能保護隱私又能使用 API 分析。
Q3: 如何分析視頻的特定片段?
Gemini 支持兩種方式指定視頻片段:
方式一: 時間戳查詢
prompt = "請分析視頻 05:30 到 08:45 之間的內容"
方式二: 視頻裁剪參數 (2026 新功能)
response = client.chat.completions.create(
model="gemini-3-pro-preview",
messages=[...],
extra_body={
"video_clip": {
"start_time": "00:05:30",
"end_time": "00:08:45"
}
}
)
Q4: 分析長視頻時如何節省成本?
長視頻成本優化的 3 個技巧:
- 使用低分辨率: 設置
media_resolution: "low"可節省 67% token - 指定分析片段: 只分析需要的部分,避免全量處理
- 複用已上傳文件: 通過 Files API 上傳後保存 URI,避免重複上傳
通過 API易 apiyi.com 調用 Gemini 視頻理解,價格比官方更優惠,適合大量視頻分析場景。
Gemini 超大視頻處理方案總結

本文介紹了處理超大視頻文件的 3 種完整方案:
| 方案 | 文件大小 | 最佳場景 | 複雜度 |
|---|---|---|---|
| Base64 內聯 | ≤ 100MB | 快速測試、短視頻 | ⭐ |
| Files API | ≤ 2GB | 私有大視頻、重複分析 | ⭐⭐ |
| YouTube URL | 無限制 | 超長視頻、公開內容 | ⭐ |
方案選擇決策流程
視頻是否已在 YouTube?
├── 是 → 使用 YouTube URL (最簡單)
└── 否 → 視頻大小?
├── ≤ 100MB → Base64 內聯 (單次請求)
├── 100MB-2GB → Files API (支持複用)
└── > 2GB → 上傳到 YouTube 或壓縮/分割
🎯 最終建議: 對於超大視頻文件,優先考慮 YouTube URL 方案,它不僅無文件大小限制,還能利用 Google 的原生集成實現最低延遲。推薦通過 API易 apiyi.com 調用 Gemini 視頻理解功能,獲得更優惠的價格和穩定的服務。
本文由 API易技術團隊撰寫。如需瞭解更多多模態 AI API 的使用技巧,歡迎訪問 apiyi.com 獲取技術支持。