You need to enable JavaScript to run this app.
文档中心
火山方舟

火山方舟

复制全文
下载 pdf
多模态理解
视频理解
复制全文
下载 pdf
视频理解
视觉大模型可理解视频中的视觉信息,完成如描述其中的物体、分析动作逻辑等视觉相关任务,可用于自动化视频内容审核、智能监控分析等,大幅节省人工成本,适用于智能安防、体育赛事分析、媒体内容管理等领域。这篇教程帮助您通过 API 完成含视频输入的各类任务。​
说明​
方舟平台的新用户?获取 API Key 及 开通模型等准备工作,请参见 快速入门。​
支持模型​
请参见视觉理解能力。​
API 接口​
视频传入方式​
支持的视频文件传入方式如下:​
  • 本地文件上传:​
  • Files API 上传(推荐):直接传入本地文件,文件存储在方舟平台托管的默认存储空间中时,支持最大 512 MB 文件的上传;文件存储在火山引擎对象存储 TOS Bucket 中时,支持最大 2 GB 的视频文件的上传,从而满足大文件处理需求。​
  • Base64 编码传入:适用于文件体积较小的场景,视频文件小于 50 MB,请求体不能超过 64 MB。​
  • 视频 URL 传入:适用于文件已存在公网可访问 URL 的场景,视频文件大小不能超过 50 MB。​
本地文件上传​
Files API 上传(推荐)​
建议优先使用 Files API 上传本地文件。该方式下,文件存储在方舟平台托管的默认存储空间时,支持最大 512 MB 文件上传;存储在火山引擎对象存储 TOS Bucket 时,支持最大 2 GB 视频文件上传,可充分满足大文件处理需求。同时可避免请求时重复上传内容,减少预处理时延,文件还能在多次请求中复用,节省公网下载耗时。​
通过 Files API 上传视频时,需在上传请求的 preprocess_configs.video.model 中传入支持视频理解的模型 ID。该配置用于指定视频预处理和抽帧策略;后续调用 Responses API 或 Chat API 时,仍需在请求的 model 中传入实际用于推理的模型或接入点。​
上传成功并待文件状态变为 active 后,Responses API 和 Chat API 均支持通过 file_id 方式传入视频。​
  • 该方式上传的文件默认存储 7 天,存储有效期取值范围为1-30天。​
  • 如果需要实时获取分析内容,或者要规避复杂任务引发的客户端超时失败问题,可采用流式输出的方式,具体示例见流式输出。​
不传 TOS 参数时,文件默认存储至方舟平台托管的默认存储空间。示例代码如下:​
  • Responses API 示例代码:​
​
Curl
Python
Go
Java
OpenAI SDK
​
  1. 上传视频文件获取File ID。​
  • ​
    curl https://ark.cn-beijing.volces.com/api/v3/files \​
    -H "Authorization: Bearer $ARK_API_KEY" \​
    -F 'purpose=user_data' \​
    -F 'file=@/Users/doc/demo.mp4' \​
    -F 'preprocess_configs[video][model]=doubao-seed-2-1-pro-260915' \​
    -F 'preprocess_configs[video][fps]=0.3'​
    ​
  1. 在Responses API中引用File ID。​
  • ​
    curl https://ark.cn-beijing.volces.com/api/v3/responses \​
    -H "Authorization: Bearer $ARK_API_KEY" \​
    -H 'Content-Type: application/json' \​
    -d '{​
    "model": "doubao-seed-2-1-pro-260915",​
    "input": [​
    {​
    "role": "user",​
    "content": [​
    {​
    "type": "input_video",​
    "file_id": "file-20251018****"​
    },​
    {​
    "type": "input_text",​
    "text": "请你描述下视频中的人物的一系列动作,以JSON格式输出开始时间(start_time)、结束时间(end_time)、事件(event)、是否危险(danger),请使用HH:mm:ss表示时间戳。"​
    }​
    ]​
    }​
    ]​
    }'​
    ​
​
  • Chat API 示例代码:​
​
Curl
Python
Go
Java
​
  1. 上传视频文件获取 File ID。​
  • ​
    curl https://ark.cn-beijing.volces.com/api/v3/files \​
    -H "Authorization: Bearer $ARK_API_KEY" \​
    -F 'purpose=user_data' \​
    -F 'file=@/Users/doc/demo.mp4' \​
    -F 'preprocess_configs[video][model]=doubao-seed-2-1-pro-260915' \​
    -F 'preprocess_configs[video][fps]=0.3'​
    ​
  1. 在 Chat API 中引用 File ID。​
​
curl https://ark.cn-beijing.volces.com/api/v3/chat/completions \​
-H "Authorization: Bearer $ARK_API_KEY" \​
-H "Content-Type: application/json" \​
-d '{​
"model": "doubao-seed-2-1-pro-260915",​
"messages": [​
{​
"role": "user",​
"content": [​
{​
"type": "video_url",​
"video_url": {​
"file_id": "file-20251018****"​
}​
},​
{​
"type": "text",​
"text": "请你描述下视频中的人物的一系列动作,以 JSON 格式输出开始时间(start_time)、结束时间(end_time)、事件(event)、是否危险(danger),请使用 HH:mm:ss 表示时间戳。"​
}​
]​
}​
]​
}'​
​
​
传 TOS 参数时,文件存储至用户指定的火山引擎对象存储 TOS Bucket,支持最大 2 GB 的视频文件上传。示例代码如下:​
  • Responses API 示例代码:​
​
Curl
Python SDK
Go SDK
Java SDK
​
​
curl -X POST "https://ark.cn-beijing.volces.com/api/v3/files" \​
-H "Authorization: Bearer $ARK_API_KEY" \​
-F "purpose=user_data" \​
-F "url=tos://my-bucket/videos/long-video.mp4" \​
-F "tos[bucket]=my-bucket" \​
-F "tos[prefix]=ark-files/" \​
-F "preprocess_configs[video][model]=doubao-seed-2-1-pro-260915" \​
-F "preprocess_configs[video][max_video_tokens]=200000" \​
-F "preprocess_configs[video][min_frames]=16"​
​
​
  • Chat API 示例代码:​
​
Curl
Python SDK
​
  1. 上传视频文件获取 File ID。​
  • ​
    curl -X POST "https://ark.cn-beijing.volces.com/api/v3/files" \​
    -H "Authorization: Bearer $ARK_API_KEY" \​
    -F "purpose=user_data" \​
    -F "url=tos://<your_bucket>/videos/long-video.mp4" \​
    -F "tos[bucket]=<your_bucket>" \​
    -F "tos[prefix]=ark-files/" \​
    -F "preprocess_configs[video][model]=doubao-seed-2-1-pro-260915" \​
    -F "preprocess_configs[video][max_video_tokens]=200000" \​
    -F "preprocess_configs[video][min_frames]=16"​
    ​
  1. 在 Chat API 中引用 File ID。​
​
curl https://ark.cn-beijing.volces.com/api/v3/chat/completions \​
-H "Authorization: Bearer $ARK_API_KEY" \​
-H "Content-Type: application/json" \​
-d '{​
"model": "doubao-seed-2-1-pro-260915",​
"messages": [​
{​
"role": "user",​
"content": [​
{​
"type": "video_url",​
"video_url": {​
"file_id": "file-20251018****"​
}​
},​
{​
"type": "text",​
"text": "请你描述下视频中的人物的一系列动作,以 JSON 格式输出开始时间(start_time)、结束时间(end_time)、事件(event)、是否危险(danger),请使用 HH:mm:ss 表示时间戳。"​
}​
]​
}​
]​
}'​
​
​
Base64 编码传入​
将本地文件转换为 Base64 编码字符串,然后提交给大模型。该方式适用于视频文件体积较小的情况,文件不能超过 50 MB,请求体不能超过 64 MB。(Responses API 和 Chat API 都支持该方式。)​
注意​
将视频文件转换为Base64编码字符串,然后遵循data:{mime_type};base64,{base64_data}格式拼接,传入模型。​
  • {mime_type}:文件的媒体类型,需要与文件格式mime_type对应。支持的视频格式详细见视频格式说明。​
  • {base64_data}:文件经过Base64编码后的字符串。​
  • 使用 Responses API 的示例代码如下:​
​
Curl
Python
Go
Java
OpenAI SDK
​
​
BASE64_FILE=$(base64 < demo.mp4) && curl https://ark.cn-beijing.volces.com/api/v3/responses \​
-H "Content-Type: application/json" \​
-H "Authorization: Bearer $ARK_API_KEY" \​
-d @- <<EOF​
{​
"model": "doubao-seed-2-1-pro-260915",​
"input": [​
{​
"role": "user",​
"content": [​
{​
"type": "input_video",​
"video_url": "data:video/mp4;base64,$BASE64_FILE",​
"fps": 1​
}​
]​
}​
]​
}​
EOF​
​
​
  • 使用 Chat API 的示例代码如下:​
​
Curl
Python
Go
Java
​
​
BASE64_VIDEO=$(base64 < demo.mp4) && curl https://ark.cn-beijing.volces.com/api/v3/chat/completions \​
-H "Content-Type: application/json" \​
-H "Authorization: Bearer $ARK_API_KEY" \​
-d @- <<EOF​
{​
"model": "doubao-seed-2-1-pro-260915",​
"messages": [​
{​
"role": "user",​
"content": [​
{​
"type": "video_url",​
"video_url": {​
"url": "data:video/mp4;base64,$BASE64_VIDEO"​
}​
},​
{​
"type": "text",​
"text": "What is in the video?"​
}​
]​
}​
],​
"max_tokens": 300​
}​
EOF​
​
  • 按需替换 Model ID,查询 Model ID 参见 模型列表。​
​
视频 URL 传入​
如果视频文件已存在公网可访问URL,可以在请求中直接填入视频文件的公网URL,文件不能超过50 MB。(Responses API 和 Chat API 都支持该方式。)​
  • 使用 Responses API 的示例代码如下:​
​
Curl
Python
Go
Java
OpenAI SDK
​
​
curl https://ark.cn-beijing.volces.com/api/v3/responses \​
-H "Authorization: Bearer $ARK_API_KEY" \​
-H 'Content-Type: application/json' \​
-d '{​
"model": "doubao-seed-2-1-pro-260915",​
"input": [​
{​
"role": "user",​
"content": [​
{​
"type": "input_video",​
"video_url": "https://ark-project.tos-cn-beijing.volces.com/doc_video/ark_vlm_video_input.mp4",​
"fps":1​
}​
]​
}​
]​
}'​
​
​
  • 使用 Chat API 的示例代码如下:(可参见[控制视频理解的精细度](https://ark.volcengine.com/region:cn-beijing/docs/ark/video-understanding#bf4d9224){target="_self"})​
​
Python SDK
​
​
import os​
# Install SDK: python -m pip install --upgrade arkruntime​
from arkruntime import Ark​
​
client = Ark(​
# The base URL for model invocation​
base_url="https://ark.cn-beijing.volces.com/api/v3",​
# Get API Key: https://ark.volcengine.com/region:cn-beijing/apikey​
api_key=os.getenv('ARK_API_KEY'),​
)​
​
completion = client.chat.completions.create(​
# Replace with Model ID .​
model = "doubao-seed-2-1-pro-260915",​
messages = [​
{​
"role": "user",​
"content": [​
{​
"type": "video_url",​
"video_url": {​
# Replace the link with your actual video link​
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_video/ark_vlm_video_input.mp4",​
"fps": 1​
}​
},​
],​
}​
],​
)​
​
print(completion.choices[0].message.content)​
​
​
使用场景​
控制视频理解的精细度​
您可通过 fps 字段,控制从视频中抽取图像的频率,默认为1,即每秒从视频中抽取一帧图像,输入给模型进行视觉理解。 可通过 fps 字段,控制模型对于视频中图像变化的敏感度。​
  • 当视频画面变化剧烈或需关注画面变化,如计算视频中角色动作次数,可调高 fps 设置(最高 5),防止抽帧频率低导致误判。​
  • 当视频画面变化不频繁或无需关注画面变化,如画面中人数,可调低 fps (最低0.2),可提升处理速度,节省 token 用量。​
示例代码如下:​
​
Curl
Python
Go
Java
​
​
curl https://ark.cn-beijing.volces.com/api/v3/chat/completions \​
-H "Content-Type: application/json" \​
-H "Authorization: Bearer $ARK_API_KEY" \​
-d '{​
"model": "doubao-seed-2-1-pro-260915",​
"messages": [​
{​
"role": "user",​
"content": [​
{"type": "video_url","video_url": {"url": "https://ark-project.tos-cn-beijing.volces.com/doc_video/ark_vlm_video_input.mp4", "fps": 2}},​
{"type": "text", "text": "What is in the video?"}​
]​
}​
],​
"max_tokens": 300​
}'​
​
  • 按需替换 Model ID,查询 Model ID 参见 模型列表。​
​
感知视频时序​
视频理解可理解视频时间和图像关系信息,如回答事件发生什么时间点,在哪些时间发生了某事件等和时间相关的信息,原理见 视频理解工作原理。​
下面是简单示例代码​
​
Curl
Python
Go
Java
​
​
curl https://ark.cn-beijing.volces.com/api/v3/chat/completions \​
-H "Content-Type: application/json" \​
-H "Authorization: Bearer $ARK_API_KEY" \​
-d '{​
"model": "doubao-seed-2-1-pro-260915",​
"messages": [​
{​
"role": "user",​
"content": [​
{"type": "video_url","video_url": {"url": "https://ark-project.tos-cn-beijing.volces.com/doc_video/video-understanding.mp4", "fps": 5}},​
{"type": "text", "text": "裁判什么时间点出现的?"}​
]​
}​
],​
"max_tokens": 300​
}'​
​
  • 按需替换 Model ID,查询 Model ID 参见 模型列表。​
​
回复预览​
​
根据视频描述,裁判在**3.7秒**左右出现。此时,画面中两位拳击手(左为黑T恤红短裤、右为白T恤黑短裤)原本处于对峙状态,随后裁判(穿着黑色西装、戴白手套)站到两人中间,似乎在准备开始比赛或暂停当前回合,观众仍在背景中欢呼。​
​
流式输出​
流式输出支持内容动态实时呈现,既能够缓解用户等待焦虑,又可以规避复杂任务因长时间推理引发的客户端超时失败问题,保障请求流程顺畅。​
​
Python SDK
Go SDK
Java SDK
兼容 OpenAI SDK
​
​
import asyncio​
import os​
from arkruntime import AsyncArk​
from arkruntime.types.responses.response_completed_event import ResponseCompletedEvent​
from arkruntime.types.responses.response_reasoning_summary_text_delta_event import ResponseReasoningSummaryTextDeltaEvent​
from arkruntime.types.responses.response_output_item_added_event import ResponseOutputItemAddedEvent​
from arkruntime.types.responses.response_text_delta_event import ResponseTextDeltaEvent​
from arkruntime.types.responses.response_text_done_event import ResponseTextDoneEvent​
​
client = AsyncArk(​
base_url='https://ark.cn-beijing.volces.com/api/v3',​
api_key=os.getenv('ARK_API_KEY')​
)​
​
async def main():​
# upload video file​
print("Upload video file")​
file = await client.files.create(​
# replace with your local video path​
file=open("/Users/doc/demo.mp4", "rb"),​
purpose="user_data",​
preprocess_configs={​
"video": {​
"model": "doubao-seed-2-1-pro-260915",​
"fps": 0.3, # define the sampling fps of the video, default is 1.0​
}​
}​
)​
print(f"File uploaded: {file.id}")​
​
# Wait for the file to finish processing​
await client.files.wait_for_processing(file.id)​
print(f"File processed: {file.id}")​
​
stream = await client.responses.create(​
model="doubao-seed-2-1-pro-260915",​
input=[​
{"role": "user", "content": [​
{​
"type": "input_video",​
"file_id": file.id # ref video file id​
},​
{​
"type": "input_text",​
"text": "请你描述下视频中的人物的一系列动作,以JSON格式输出开始时间(start_time)、结束时间(end_time)、事件(event)、是否危险(danger),请使用HH:mm:ss表示时间戳。"​
​
}​
]},​
],​
caching={​
"type": "enabled",​
},​
store=True,​
stream=True​
)​
​
async for event in stream:​
if isinstance(event, ResponseReasoningSummaryTextDeltaEvent):​
print(event.delta, end="")​
if isinstance(event, ResponseOutputItemAddedEvent):​
print("\noutPutItem " + event.type + " start:")​
if isinstance(event, ResponseTextDeltaEvent):​
print(event.delta,end="")​
if isinstance(event, ResponseTextDoneEvent):​
print("\noutPutTextDone.")​
if isinstance(event, ResponseCompletedEvent):​
print("Response Completed. Usage = " + event.response.usage.model_dump_json())​
​
if __name__ == "__main__":​
asyncio.run(main())​
​
​
使用说明​
说明​
处理完图片/视频后,文件会从方舟服务器删除。方舟不会保留您提交的图片、视频以及文本信息等用户数据来训练模型。​
时序信息​
基于 FPS 的抽帧获取视频关键帧,再通过时间戳+图像拼接标记时序信息,模型基于该请求中的时序标记和图像内容,实现对视频的完整理解(包括内容变化、动作逻辑、时序关联等)。​
详细原理见 视频理解工作原理。​
视频格式说明​
​
视频格式​
文件扩展名​
内容格式 Content Type​
MP4​
.mp4​
video/mp4​
AVI​
.avi​
video/x-msvideo​
MOV​
.mov​
video/quicktime​
​
视频文件格式变种较多,不能保证所有文件都能被识别,请通过测试验证文件能够被正常识别。​
说明​
  • 上传视频至对象存储时设置,详情请参见 文档。​
  • 视频格式需小写。​
视频文件容量​
  • 使用 URL 方式传入视频,视频文件不能超过 50MB。​
  • 使用 Base64 编码传入视频,视频文件不能超过 50MB,请求体不能超过 64MB。​
  • 使用 Files API 上传视频,文件存储在方舟平台托管的默认存储空间中时,支持最大 512 MB 文件的上传;文件存储在火山引擎对象存储 TOS Bucket 中时,支持最大 2 GB 的视频文件的上传,从而满足大文件处理需求。​
支持音频理解​
部分模型支持对视频文件中的音频信息进行理解,详见视频内嵌音频输入。​
抽帧策略​
用量说明:单视频最大 token 用量为 80k,单次请求视频最大 token 量还受模型的最大上下文窗口以及最大输入长度(当启用深度思考模式)限制,超出则需调整传入视频数量或视频长度。​
基本概念:​
  • 帧图像:某个时刻的视频画面,本文特指输入给模型的帧图像​
  • 帧图像张数:视频时长 * fps​
方舟会根据帧图像张数,对帧图像进行压缩,以平衡视频的理解精度和 token 用量。​
不同模型的抽帧策略不同,具体如下:​
​
抽帧策略​
doubao-seed-2.0 及后续模型​
单帧 tokens​
  • max_frame_tokens:单帧最大 tokens 数,用于控制单帧质量的上限。​
  • min_frame_tokens:单帧最小 tokens 数,用于控制单帧压缩的下限,支持 tokens 在 [64, 384] 区间内连续动态调整,默认值为 384。​
单帧对应的max_pixels​
单帧最大 tokens * 42 * 42​
[11w, 67w]​
抽帧数​
  • 抽帧数范围:[16帧, 1280帧]。​
​
# 最大抽帧数​
80×1024 token ÷ 64 token/帧 = 1280 帧​
​
  • min_frames:最小抽帧数,默认值为 16。若按 fps 计算的抽帧总数小于 16,则优先按 16 帧处理。​
视频最大 tokens​
max_video_tokens:单个视频所有抽取帧的 tokens 总数上限,默认值为 81920(80 × 1024)。​
抽帧方案​
说明​
  • 建议评估输出效果,按需调整fps字段配置或视频时长。​
  • 如果视频二进制数据中未包含帧数编码信息,会按 fps 均匀抽帧。单次请求视频最大 Token 量如果超过模型最大输入长度则会报错;未超过则不报错,但视频输入的 token 可能会超过 80k。​
​
  • fps 过高或视频长度过长:处理的帧图像数量超出1280帧,则按帧图像64tokens,时间间隔 视频时长/1280,均匀抽取1280帧。​
  • fps 过小或视频长度过短:处理的帧图像数量不足16帧时抽取方案如下:​
  • 视频总帧数 >= 16帧,均匀抽取16帧。​
  • 视频总帧数 < 16帧,抽取视频所有帧。​
​
视频理解工作原理​
视频处理的核心方式为 “帧与时间戳的结构化拼接”,具体规则如下:​
  • 对视频抽帧得到的每帧图像,在其前插入时间戳文本。​
  • doubao-seed-2.0 及后续模型:时间戳格式为 <时间戳> second。例如:4.0 second、4.5 second。​
  • doubao-seed-2.0 之前模型:时间戳格式为 [<时间戳> second]。例如:[4.0 second]、[4.5 second]。​
  • 拼接后形成“时间戳+图像”的有序序列,模型通过该序列理解视频的时序逻辑和内容变化。​
抽帧逻辑举例​
​
​
FPS 1​
FPS 0.5​
FPS 2​
时间戳​
0.0 second​
0.0 second​
0.0 second​
视频帧​
<IMAGE>​
<IMAGE>​
<IMAGE>​
时间戳​
1.0 second​
2.0 second​
0.5 second​
视频帧​
<IMAGE>​
<IMAGE>​
<IMAGE>​
时间戳​
2.0 second​
4.0 second​
1.0 second​
视频帧​
<IMAGE>​
<IMAGE>​
<IMAGE>​
时间戳​
3.0 second​
​
1.5 second​
视频帧​
<IMAGE>​
​
<IMAGE>​
时间戳​
4.0 second​
​
2.0 second​
视频帧​
<IMAGE>​
​
<IMAGE>​
时间戳​
5.0 second​
​
2.5 second​
视频帧​
<IMAGE>​
​
<IMAGE>​
时间戳​
​
​
3.0 second​
视频帧​
​
​
<IMAGE>​
时间戳​
​
​
3.5 second​
视频帧​
​
​
<IMAGE>​
时间戳​
​
​
4.0 second​
视频帧​
​
​
<IMAGE>​
时间戳​
​
​
4.5 second​
视频帧​
​
​
<IMAGE>​
时间戳​
​
​
5.0 second​
视频帧​
​
​
<IMAGE>​
​
共6帧​
共3帧​
共11帧​
​
多图请求等效​
视频理解请求等效于下面示例的多图理解请求。​
​
{​
"model": "doubao-seed-2-1-pro-260915",​
"messages": [​
{​
"role": "user",​
"content": [​
{​
"type":"text",​
"text":"你觉得这个恐怖吗?"​
},​
{​
"type":"text",​
"text":"0.0 second"​
},​
{​
"type":"image_url",​
"image_url":{​
"url":"<image_url_01>"}​
},​
{​
"type":"text",​
"text":"1.0 second"​
},​
{​
"type":"image_url",​
"image_url":{​
"url":"<image_url_02>"}​
},​
{​
"type":"text",​
"text":"2.0 second"​
},​
{​
"type":"image_url",​
"image_url":{​
"url":"<image_url_03>"}​
},​
{​
"type":"text",​
"text":"3.0 second"​
},​
{​
"type":"image_url",​
"image_url":{​
"url":"<image_url_04>"}​
},​
{​
"type":"text",​
"text":"4.0 second"​
},​
{​
"type":"image_url",​
"image_url":{​
"url":"<image_url_05>"}​
},​
{​
"type":"text",​
"text":"5.0 second"​
},​
{​
"type":"image_url",​
"image_url":{​
"url":"<image_url_06>"}​
}​
]​
}​
]​
}​
​
​
最近更新时间:2026.10.09 14:36:34
这个页面对您有帮助吗?
有用
有用
无用
无用