lovart3/火山引擎视频API开发文档
2025-12-17 20:15:18 +08:00

1921 lines
73 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

视频生成模型具备出色的语义理解能力,可根据用户输入的文本、图片等内容,快速生成优质的视频片段。通过这篇教程,您可学习到如何调用视频生成 API 生成视频。
<span id="2c6a9e64"></span>
# 快速开始
您可以通过下面代码快速体验文生视频能力。
:::tip
* 视频生成为异步接口,您需要先创建视频生成任务,再通过视频生成任务的 ID 去查询视频生成结果。
* 视频生成过程耗时较长,查询结果时请您耐心等待。
:::
```mixin-react
return (<Tabs>
<Tabs.TabPane title="Python" key="D1RwhEl5ig"><RenderMd content={`\`\`\`Python
import time
import os
# Install SDK: pip install 'volcengine-python-sdk[ark]' .
from volcenginesdkarkruntime import Ark
client = Ark(
# The base URL for model invocation .
base_url="https://ark.cn-beijing.volces.com/api/v3",
# Get API Key:https://console.volcengine.com/ark/region:ark+cn-beijing/apikey
api_key=os.getenv('ARK_API_KEY'),
)
if __name__ == "__main__":
print("----- create request -----")
create_result = client.content_generation.tasks.create(
# Replace with Model ID .
model="doubao-seedance-1-0-pro-250528",
content=[
{
# 文本提示词
"type": "text",
"text": "多个镜头。一名侦探进入一间光线昏暗的房间。他检查桌上的线索,手里拿起桌上的某个物品。镜头转向他正在思索。 --ratio 16:9"
},
]
)
print(create_result)
# 轮询查询部分
print("----- polling task status -----")
task_id = create_result.id
while True:
get_result = client.content_generation.tasks.get(task_id=task_id)
status = get_result.status
if status == "succeeded":
print("----- task succeeded -----")
print(get_result)
break
elif status == "failed":
print("----- task failed -----")
print(f"Error: {get_result.error}")
break
else:
print(f"Current status: {status}, Retrying after 10 seconds...")
time.sleep(10)
\`\`\`
`}></RenderMd></Tabs.TabPane>
<Tabs.TabPane title="Java" key="zyILXb1P3Z"><RenderMd content={`\`\`\`Java
package com.volcengine.ark.runtime;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import com.volcengine.ark.runtime.model.content.generation.CreateContentGenerationTaskRequest;
import com.volcengine.ark.runtime.model.content.generation.CreateContentGenerationTaskRequest.Content;
import com.volcengine.ark.runtime.model.content.generation.CreateContentGenerationTaskResult;
import com.volcengine.ark.runtime.model.content.generation.GetContentGenerationTaskRequest;
import com.volcengine.ark.runtime.model.content.generation.GetContentGenerationTaskResponse;
import com.volcengine.ark.runtime.service.ArkService;
import okhttp3.ConnectionPool;
import okhttp3.Dispatcher;
public class ContentGenerationTaskExample {
// 请确保您已将 API Key 存储在环境变量 ARK_API_KEY 中
// 初始化Ark客户端,从环境变量中读取您的API Key
static String apiKey = System.getenv("ARK_API_KEY");
static ConnectionPool connectionPool = new ConnectionPool(5, 1, TimeUnit.SECONDS);
static Dispatcher dispatcher = new Dispatcher();
static ArkService service = ArkService.builder()
.dispatcher(dispatcher)
.connectionPool(connectionPool)
.apiKey(apiKey)
.baseUrl("https://ark.cn-beijing.volces.com/api/v3") // The base URL for model invocation .
.build();
public static void main(String[] args) {
//Replace with Model ID .
String model = "doubao-seedance-1-0-pro-250528";
System.out.println("----- create request -----");
List<Content> contents = new ArrayList<>();
contents.add(Content.builder()
.type("text")
.text("多个镜头。一名侦探进入一间光线昏暗的房间。他检查桌上的线索,手里拿起桌上的某个物品。镜头转向他正在思索。 --ratio 16:9")
.build());
// 创建视频生成任务
CreateContentGenerationTaskRequest createRequest = CreateContentGenerationTaskRequest.builder()
.model(model)
.content(contents)
.build();
CreateContentGenerationTaskResult createResult = service.createContentGenerationTask(createRequest);
System.out.println(createResult);
// 获取任务详情
String taskId = createResult.getId();
GetContentGenerationTaskRequest getRequest = GetContentGenerationTaskRequest.builder()
.taskId(taskId)
.build();
// 轮询查询部分
System.out.println("----- polling task status -----");
while (true) {
try {
GetContentGenerationTaskResponse getResponse = service.getContentGenerationTask(getRequest);
String status = getResponse.getStatus();
if ("succeeded".equalsIgnoreCase(status)) {
System.out.println("----- task succeeded -----");
System.out.println(getResponse);
break;
} else if ("failed".equalsIgnoreCase(status)) {
System.out.println("----- task failed -----");
System.out.println("Error: " + getResponse.getStatus());
break;
} else {
System.out.printf("Current status: %s, Retrying in 10 seconds...", status);
TimeUnit.SECONDS.sleep(10);
}
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
System.err.println("Polling interrupted");
break;
}
}
}
}
\`\`\`
`}></RenderMd></Tabs.TabPane>
<Tabs.TabPane title="Go" key="fOLOh4FWkB"><RenderMd content={`\`\`\`Go
package main
import (
"context"
"fmt"
"os"
"time"
"github.com/volcengine/volcengine-go-sdk/service/arkruntime"
"github.com/volcengine/volcengine-go-sdk/service/arkruntime/model"
"github.com/volcengine/volcengine-go-sdk/volcengine"
)
func main() {
// 请确保您已将 API Key 存储在环境变量 ARK_API_KEY 中
// 初始化Ark客户端,从环境变量中读取您的API Key
client := arkruntime.NewClientWithApiKey(
// 从环境变量中获取您的 API Key。此为默认方式,您可根据需要进行修改
os.Getenv("ARK_API_KEY"),
// The base URL for model invocation .
arkruntime.WithBaseUrl("https://ark.cn-beijing.volces.com/api/v3"),
)
ctx := context.Background()
// Replace with Model ID .
modelEp := "doubao-seedance-1-0-pro-250528"
// 创建任务
fmt.Println("----- create request -----")
createReq := model.CreateContentGenerationTaskRequest{
Model: modelEp,
Content: []*model.CreateContentGenerationContentItem{
{
Type: model.ContentGenerationContentItemTypeText,
Text: volcengine.String("多个镜头。一名侦探进入一间光线昏暗的房间。他检查桌上的线索,手里拿起桌上的某个物品。镜头转向他正在思索。 --ratio 16:9"),
},
},
}
createResp, err := client.CreateContentGenerationTask(ctx, createReq)
if err != nil {
fmt.Printf("create content generation error: %v", err)
return
}
taskID := createResp.ID
fmt.Printf("Task Created with ID: %s", taskID)
// 轮询查询部分
fmt.Println("----- polling task status -----")
for {
getReq := model.GetContentGenerationTaskRequest{ID: taskID}
getResp, err := client.GetContentGenerationTask(ctx, getReq)
if err != nil {
fmt.Printf("get content generation task error: %v", err)
return
}
status := getResp.Status
if status == "succeeded" {
fmt.Println("----- task succeeded -----")
fmt.Printf("Task ID: %s", getResp.ID)
fmt.Printf("Model: %s", getResp.Model)
fmt.Printf("Video URL: %s", getResp.Content.VideoURL)
fmt.Printf("Completion Tokens: %d", getResp.Usage.CompletionTokens)
fmt.Printf("Created At: %d, Updated At: %d", getResp.CreatedAt, getResp.UpdatedAt)
return
} else if status == "failed" {
fmt.Println("----- task failed -----")
if getResp.Error != nil {
fmt.Printf("Error Code: %s, Message: %s", getResp.Error.Code, getResp.Error.Message)
}
return
} else {
fmt.Printf("Current status: %s, Retrying in 10 seconds...", status)
time.Sleep(10 * time.Second)
}
}
}
\`\`\`
`}></RenderMd></Tabs.TabPane></Tabs>);
```
模型回复预览:
```Shell
# 视频生成过程中
----- create request -----
Task Created with ID: cgt-2025xxxx-xxxx
----- polling task status -----
Current status: queued, Retrying in 10 seconds...
Current status: running, Retrying in 10 seconds...
# 视频生成后
----- task succeeded -----
ContentGenerationTask(id='cgt-2025xxxx-xxxx', model='doubao-xxxx', status='succeeded', error=None, content=Content(video_url='https://xxxx'), usage=Usage(completion_tokens=103818, total_tokens=103818), created_at=1746606910, updated_at=1746606932)
```
<span id="5b7f9f24"></span>
##
<span id="e7b4c498"></span>
# 支持模型
| | | | | | | | | | \
|**模型名称** |**版本** |\
| |<div style="width:150px"></div> |**模型 ID(Model ID)** |\
| | |<div style="width:150px"></div> |**模型能力** |\
| | | |<div style="width:150px"></div> |**输出视频格式** |\
| | | | |<div style="width:120px"></div> |**RPM 限流** |\
| | | | | | |\
| | | | | |<div style="width:100px"></div> |**并发数限制** |**免费额度** |\
| | | | | | | |(token) |**定价** |\
| | | | | | | | |(元/百万 token) |
|---|---|---|---|---|---|---|---|---|
| | | | | | | | | | \
|[doubao-seedance-1.0-pro](/docs/82379/1587798) |250528`强烈推荐` |doubao-seedance-1-0-pro-250528 |图生视频-首尾帧 |\
| | | |图生视频-首帧 |\
| | | |文生视频 |分辨率: |\
| | | | |480p, |\
| | | | |720p, |\
| | | | |1080p`参考图场景不支持` |\
| | | | |帧率:24 fps |\
| | | | |时长:2~12 秒 |\
| | | | |视频格式:mp4 |\
| | | | | |600 |10 |200万 |[视频生成模型](/docs/82379/1544106#02affcb8) |
| | | | |^^| | | | | \
|[doubao-seedance-1.0-pro-fast](/docs/82379/1901652) |251015`强烈推荐` |doubao-seedance-1-0-pro-fast-251015 |图生视频-首帧 |\
| | | |文生视频 | |600 |10 |200万 |[视频生成模型](/docs/82379/1544106#02affcb8) |
| | | | |^^| | | | | \
|[doubao-seedance-1.0-lite](/docs/82379/1553576) |250428 |doubao-seedance-1-0-lite-t2v-250428 |文生视频 | |300 |5 |200万 |[视频生成模型](/docs/82379/1544106#02affcb8) |
|^^| | | |^^| | | | | \
| |250428 |doubao-seedance-1-0-lite-i2v-250428 |图生视频-参考图 |\
| | | |图生视频-首尾帧 |\
| | | |图生视频-首帧 | |300 |5 |200万 |[视频生成模型](/docs/82379/1544106#02affcb8) |
<span id="d1b0ff92"></span>
# API 参数说明
视频生成的 API 接口详细介绍请参见 [视频生成 API](https://www.volcengine.com/docs/82379/1520758)。
<span id="a57e57b6"></span>
# 模型文本命令比较
在文本提示词后追加--[parameters],控制视频输出的规格,包括宽高比、帧率、分辨率等。使用不同的模型,可能对应支持不同的参数与取值,详见下表。
| | | | | | \
| |doubao-seedance-1-0-pro |\
| |<div style="width:150px"></div> |doubao-seedance-1-0-pro-fast |\
| | |<div style="width:150px"></div> |doubao-seedance-1-0-lite-t2v |\
| | | |<div style="width:150px"></div> |doubao-seedance-1-0-lite-i2v |\
| | | | |<div style="width:150px"></div> |
|---|---|---|---|---|
| | | | | | \
|模型能力 |图生视频-首尾帧 |\
| |图生视频-首帧 |\
| |文生视频 |图生视频-首帧 |\
| | |文生视频 |文生视频 |图生视频-参考图 |\
| | | | |图生视频-首尾帧 |\
| | | | |图生视频-首帧 |
| | || || \
|resolution |\
|分辨率 |* 480p |\
| |* 720p |\
| |* 1080p | |* 480p |\
| | | |* 720p |\
| | | |* 1080p`参考图场景不支持` | |
| | || | | \
|ratio |\
|宽高比 | |\
| | |\
| |* 16:9 |\
| |* 4:3 |\
| |* 1:1 |\
| |* 3:4 |\
| |* 9:16 |\
| |* 21:9 |\
| |* adaptive |\
| | |\
| | |\
| |480p 各画面比例的宽高像素值如下 |\
| | |\
| |* `16:9`:864×480 |\
| |* `4:3`:736×544 |\
| |* `1:1`:640×640 |\
| |* `3:4`:544×736 |\
| |* `9:16`:480×864 |\
| |* `21:9`:960×416 |\
| | |\
| |720p 各画面比例的宽高像素值如下 |\
| | |\
| |* `16:9`:1248×704 |\
| |* `4:3`:1120×832 |\
| |* `1:1`:960×960 |\
| |* `3:4`:832×1120 |\
| |* `9:16`:704×1248 |\
| |* `21:9`:1504×640 |\
| | |\
| |1080p 各画面比例的宽高像素值如下 |\
| | |\
| |* `16:9`:1920×1088 |\
| |* `4:3`:1664×1248 |\
| |* `1:1`:1440×1440 |\
| |* `3:4`:1248×1664 |\
| |* `9:16`:1088×1920 |\
| |* `21:9`:2176×928 | | |\
| | | | |\
| | | |* 16:9 |\
| | | |* 4:3 |\
| | | |* 1:1 |\
| | | |* 3:4 |\
| | | |* 9:16 |\
| | | |* 21:9 |\
| | | | |\
| | | | |\
| | | | |\
| | | |480p 各画面比例的宽高像素值如下 |\
| | | | |\
| | | |* `16:9`:864×480 |\
| | | |* `4:3`:736×544 |\
| | | |* `1:1`:640×640 |\
| | | |* `3:4`:544×736 |\
| | | |* `9:16`:480×864 |\
| | | |* `21:9`:960×416 |\
| | | | |\
| | | |720p 各画面比例的宽高像素值如下 |\
| | | | |\
| | | |* `16:9`:1248×704 |\
| | | |* `4:3`:1120×832 |\
| | | |* `1:1`:960×960 |\
| | | |* `3:4`:832×1120 |\
| | | |* `9:16`:704×1248 |\
| | | |* `21:9`:1504×640 |\
| | | | |\
| | | |1080p 各画面比例的宽高像素值如下 |\
| | | | |\
| | | |* `16:9`:1920×1088 |\
| | | |* `4:3`:1664×1248 |\
| | | |* `1:1`:1440×1440 |\
| | | |* `3:4`:1248×1664 |\
| | | |* `9:16`:1088×1920 |\
| | | |* `21:9`:2176×928 | |\
| | | | | |\
| | | | |* 16:9 |\
| | | | |* 4:3 |\
| | | | |* 1:1 |\
| | | | |* 3:4 |\
| | | | |* 9:16 |\
| | | | |* 21:9 |\
| | | | |* adaptive`参考图场景不支持` |\
| | | | | |\
| | | | | |\
| | | | |480p 各画面比例的宽高像素值如下 |\
| | | | | |\
| | | | |* `16:9`:864×480 |\
| | | | |* `4:3`:736×544 |\
| | | | |* `1:1`:640×640 |\
| | | | |* `3:4`:544×736 |\
| | | | |* `9:16`:480×864 |\
| | | | |* `21:9`:960×416 |\
| | | | | |\
| | | | |720p 各画面比例的宽高像素值如下 |\
| | | | | |\
| | | | |* `16:9`:1248×704 |\
| | | | |* `4:3`:1120×832 |\
| | | | |* `1:1`:960×960 |\
| | | | |* `3:4`:832×1120 |\
| | | | |* `9:16`:704×1248 |\
| | | | |* `21:9`:1504×640 |\
| | | | | |\
| | | | |1080p 各画面比例的宽高像素值如下`参考图场景不支持` |\
| | | | | |\
| | | | |* `16:9`:1920×1088 |\
| | | | |* `4:3`:1664×1248 |\
| | | | |* `1:1`:1440×1440 |\
| | | | |* `3:4`:1248×1664 |\
| | | | |* `9:16`:1088×1920 |\
| | | | |* `21:9`:2176×928 |
| | || || \
|duration |\
|生成视频时长(秒) |2 ~12 秒 | |2 ~12 秒 | |
| | || || \
|frames |\
|生成视频帧数 |支持 [29, 289] 区间内所有满足 25 + 4n 格式的整数值,其中 n 为正整数。 | |支持 [29, 289] 区间内所有满足 25 + 4n 格式的整数值,其中 n 为正整数。 | |
| | || || \
|framespersecond |\
|帧率 |24 | |24 | |
| | || || \
|seed |\
| 种子整数 |✅ | | |\
| | | |✅ | |
| | || || \
|camerafixed |\
|是否固定摄像头 |✅ | | |\
| | | |✅`参考图场景不支持` | |
| | || || \
|watermark |\
|是否包含水印 |✅ | | |\
| | | |✅ | |
<span id="f5531933"></span>
# 前提条件
* [获取 API Key](https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey) 。
* [开通模型服务](https://console.volcengine.com/ark/region:ark+cn-beijing/openManagement?LLM=%7B%7D&OpenTokenDrawer=false)。
* 在[模型列表](/docs/82379/1330310)获取所需 Model ID 。
* 通过 Endpoint ID 调用模型服务请参考[获取 Endpoint ID(创建自定义推理接入点)](/docs/82379/1099522)。
<span id="9dc301c3"></span>
# 使用限制
<span id="41ebef67"></span>
## 保存时间
任务数据(如任务状态、视频URL等)仅保留24小时,超时后会被自动清除。请您务必及时保存生成的视频。
<span id="a1387a96"></span>
## 限流说明
<span id="a7163bd8"></span>
### 模型限流
* RPM 限流:账号下同模型(区分模型版本)每分钟允许创建的任务数量上限。若超过该限制,创建视频生成任务时会报错。
* 并发数限制:账号下同模型(区分模型版本)同一时刻在处理中的任务数量上限。超过此限制的任务将进入队列等待处理。
* 不同模型的限制值不同,详见[视频生成能力](/docs/82379/1330310#2705b333)。
<span id="1b7439df"></span>
## 使用说明及建议
* 用简洁准确的自然语言写出你想要的效果。
* 如果有较为明确的效果预期,建议先用生图模型生成符合预期的图片,再用图生视频进行视频片段的生成
* 文生视频会有较大的结果随机性,可以用于激发创作灵感
* 图生视频时请尽量上传高清高质量的图片,上传图片的质量对图生视频影响较大。
* 当生成的视频不符合预期时,建议修改提示词,将抽象描述换成具象描述,并注意删除不重要的部分,将重要内容前置。
* 更多提示词的使用技巧请参见 [Seedance 提示词指南](https://www.volcengine.com/docs/82379/1587797)。
<span id="e6bd4a79"></span>
## 图片裁剪规则
**Seedance 系列模型的图生视频场景,支持设置生成视频的宽高比。​**当选择的视频宽高与您上传的图片宽高比不一致时,方舟会对您的图片进行裁剪,裁剪时会居中裁剪。详细规则如下:
:::tip
若要呈现出较好的视频效果,建议所指定的视频宽高比(ratio)与实际上传图片的宽高比尽可能接近。
:::
1. 输入参数:
* 原始图片宽度记为`W`(单位:像素),高度记为`H`(单位:像素)。
* 目标比例记为`A:B`(例如,21:9),这表示裁剪后的宽度与高度之比应为 `A/B`(如 21/9≈2.333)。
2. 比较宽高比:
* 计算原始图片的宽高比`Ratio_原始=W/H`。
* 计算目标比例的比值`Ratio_目标=A/B`(例如,21:9 的 Ratio目标=21/9≈2.333)。
* 根据比较结果,决定裁剪基准:
* 如果`Ratio_原始<Ratio_目标`(即原始图片“太高”或“竖高”),则以宽度为基准裁剪。
* 如果`Ratio_原始>Ratio_目标`(即原始图片“太宽”或“横宽”),则以高度为基准裁剪。
* 如果相等,则无需裁剪,直接使用全图。
3. 裁剪尺寸计算(量化公式):
* 以宽度为基准(适用于竖高图片):
* 裁剪宽度`Crop_W=W`(使用整个原始宽度)。
* 裁剪高度`Crop_H=(B/A)×W`(根据目标比例等比例计算高度)。
* 裁剪区域的起始坐标(居中定位):
* X 坐标(水平):总是 0(因为宽度全用,从左侧开始)。
* Y 坐标(垂直):`(H−Crop_H)/2`(确保垂直居中,从顶部开始)。
* 以高度为基准(适用于横宽图片):
* 裁剪高度`Crop_H=H`(使用整个原始高度)。
* 裁剪宽度`Crop_W=(A/B)×H`(根据目标比例等比例计算宽度)。
* 裁剪区域的起始坐标(居中定位):
* X 坐标(水平):`(W−Crop_W)/2`(确保水平居中,从左侧开始)。
* Y 坐标(垂直):总是 0(因为高度全用,从顶部开始)。
4. 裁剪结果:
* 最终裁剪出的图片尺寸为`Crop_W×Crop_H`,比例严格为`A:B`,且完全位于原始图片内部,无黑边。
* 裁剪区域总是以原始图片中心为基准,因此内容居中。
5. 裁剪示例:
> 以 Seedance 1.0 Pro 首帧图生视频功能为例
| | | | \
|输入的首帧图片 |指定的宽高比ratio |生成的视频结果 |
|---|---|---|
| | | | \
|16:9 |\
| |\
|![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/c66d7faff6104320a981b36149dc713f~tplv-goo7wpa0wc-image.image =1920x) |\
| |21:9 |\
| | | |\
| | |<BytedReactXgplayer config={{ url: 'https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/db372038e0ba464f9656364f0b5aabba~tplv-goo7wpa0wc-image.image', poster: 'https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/db372038e0ba464f9656364f0b5aabba~tplv-goo7wpa0wc-video-poster.jpeg' }} ></BytedReactXgplayer> |\
| | | |\
| | | |
|^^| | | \
| |16:9 | |\
| | |<BytedReactXgplayer config={{ url: 'https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/a3b21bf79c1948ff8f43cbed05c48d66~tplv-goo7wpa0wc-image.image', poster: 'https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/a3b21bf79c1948ff8f43cbed05c48d66~tplv-goo7wpa0wc-video-poster.jpeg' }} ></BytedReactXgplayer> |\
| | | |\
| | | |\
| | | |
|^^| | | \
| |4:3 | |\
| | |<BytedReactXgplayer config={{ url: 'https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/3917539f20904631a1a0fae540b708ae~tplv-goo7wpa0wc-image.image', poster: 'https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/3917539f20904631a1a0fae540b708ae~tplv-goo7wpa0wc-video-poster.jpeg' }} ></BytedReactXgplayer> |\
| | | |\
| | | |
|^^| | | \
| |1:1 | |\
| | |<BytedReactXgplayer config={{ url: 'https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/ccc12b9d3b0f43f088316e5a22f2b75e~tplv-goo7wpa0wc-image.image', poster: 'https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/ccc12b9d3b0f43f088316e5a22f2b75e~tplv-goo7wpa0wc-video-poster.jpeg' }} ></BytedReactXgplayer> |\
| | | |\
| | | |
|^^| | | \
| |3:4 | |\
| | |<BytedReactXgplayer config={{ url: 'https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/9c42b44d5a0949ab8afa8da59cdf9786~tplv-goo7wpa0wc-image.image', poster: 'https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/9c42b44d5a0949ab8afa8da59cdf9786~tplv-goo7wpa0wc-video-poster.jpeg' }} ></BytedReactXgplayer> |\
| | | |\
| | | |
|^^| | | \
| |9:16 | |\
| | |<BytedReactXgplayer config={{ url: 'https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/9b0bc3b269a94f0b8a02c537b176075f~tplv-goo7wpa0wc-image.image', poster: 'https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/9b0bc3b269a94f0b8a02c537b176075f~tplv-goo7wpa0wc-video-poster.jpeg' }} ></BytedReactXgplayer> |\
| | | |\
| | | |
<span id="0c66686f"></span>
# 使用示例
<span id="fded0dfc"></span>
## 设置生成视频格式
通过在文本提示词后追加`--[parameters]`的方式,可控制视频输出的规格,包括宽高比、帧率、分辨率等。
```Shell
// 指定生成视频的宽高比为16:9,时长为 5 秒,帧率为 24 fps,分辨率为720p,包含水印,不固定摄像头
一位身穿绿色亮片礼服的女性站在粉红色背景前,周围飘落着五彩斑斓的彩纸 --rt 16:9 --dur 5 --fps 24 --rs 720p --wm true --cf false
```
<span id="19d393e1"></span>
## 文生视频
```mixin-react
return (<Tabs>
<Tabs.TabPane title="Python" key="YFtcTQj2jj"><RenderMd content={`\`\`\`Python
import os
# Install SDK: pip install 'volcengine-python-sdk[ark]' .
from volcenginesdkarkruntime import Ark
# 初始化Ark客户端
client = Ark(
# The base URL for model invocation .
base_url="https://ark.cn-beijing.volces.com/api/v3",
# Get API Key:https://console.volcengine.com/ark/region:ark+cn-beijing/apikey
api_key=os.getenv('ARK_API_KEY'),
)
print("----- create request -----")
# 创建视频生成任务
create_result = client.content_generation.tasks.create(
# Replace with Model ID .
model="doubao-seedance-1-0-pro-250528",
content=[
{
# 文本提示词与参数组合
"type": "text",
"text": "一位身穿绿色亮片礼服的女性站在粉红色背景前,周围飘落着五彩斑斓的彩纸 --wm true --dur 5"
}
]
)
print(create_result)
print("----- get request -----")
# 获取任务详情
get_result = client.content_generation.tasks.get(task_id=create_result.id)
print(get_result)
print("----- list request -----")
# 列出符合特定条件的任务
list_result = client.content_generation.tasks.list(
page_num=1,
page_size=10,
status="queued", # 按状态筛选, e.g succeeded, failed, running, cancelled
# model="<YOUR_MODEL_EP>, # 按 ep 筛选
# task_ids=["test-id-1", "test-id-2"] # 按 task_id 筛选
)
print(list_result)
print("----- delete request -----")
# 通过任务 id 删除任务
try:
client.content_generation.tasks.delete(task_id=create_result.id)
print(create_result.id)
except Exception as e:
print(f"failed to delete task: {e}")
\`\`\`
`}></RenderMd></Tabs.TabPane>
<Tabs.TabPane title="Java" key="yTipEVgAHK"><RenderMd content={`\`\`\`Java
package com.volcengine.ark.runtime;
import com.volcengine.ark.runtime.model.content.generation.DeleteContentGenerationTaskResponse;
import com.volcengine.ark.runtime.model.content.generation.*;
import com.volcengine.ark.runtime.model.content.generation.CreateContentGenerationTaskRequest.Content;
import com.volcengine.ark.runtime.service.ArkService;
import okhttp3.ConnectionPool;
import okhttp3.Dispatcher;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class ContentGenerationTaskExample {
// 请确保您已将 API Key 存储在环境变量 ARK_API_KEY 中
// 初始化Ark客户端,从环境变量中读取您的API Key
static String apiKey = System.getenv("ARK_API_KEY");
static ConnectionPool connectionPool = new ConnectionPool(5, 1, TimeUnit.SECONDS);
static Dispatcher dispatcher = new Dispatcher();
static ArkService service = ArkService.builder()
.dispatcher(dispatcher)
.connectionPool(connectionPool)
.apiKey(apiKey)
.baseUrl("https://ark.cn-beijing.volces.com/api/v3") // The base URL for model invocation .
.build();
public static void main(String[] args) {
//Replace with Model ID .
String model = "doubao-seedance-1-0-pro-250528";
System.out.println("----- CREATE Task Request -----");
List<Content> contents = new ArrayList<>();
// 文本提示词与参数组合
contents.add(Content.builder()
.type("text")
.text("一位身穿绿色亮片礼服的女性站在粉红色背景前,周围飘落着五彩斑斓的彩纸 --wm true --dur 5")
.build());
// 创建视频生成任务
CreateContentGenerationTaskRequest createRequest = CreateContentGenerationTaskRequest.builder()
.model(model)
.content(contents)
.build();
CreateContentGenerationTaskResult createResult = service.createContentGenerationTask(createRequest);
System.out.println(createResult);
System.out.println("----- GET Task Request -----");
// 获取任务详情
GetContentGenerationTaskRequest getRequest = GetContentGenerationTaskRequest.builder()
.taskId(createResult.getId())
.build();
GetContentGenerationTaskResponse getResult = service.getContentGenerationTask(getRequest);
System.out.println(getResult);
System.out.println("----- LIST Task Request -----");
// 列出符合特定条件的任务
ListContentGenerationTasksRequest listRequest = ListContentGenerationTasksRequest.builder()
.pageNum(1)
.pageSize(10)
.status(TaskStatus.RUNNING)
.addTaskId(createResult.getId()) // 按 task_id 筛选
// 如果您需要按多个 task_id 进行筛选
// .taskIds(Arrays.asList("test-id-1", "test-id-2"))
.model(model)
.build();
ListContentGenerationTasksResponse listResponse = service.listContentGenerationTasks(listRequest);
System.out.println(listResponse);
System.out.println("----- DELETE Task Request -----");
// 通过任务 id 删除任务
DeleteContentGenerationTaskRequest deleteRequest = DeleteContentGenerationTaskRequest.builder()
.taskId(getResult.getId())
.build();
try {
DeleteContentGenerationTaskResponse deleteResult = service.deleteContentGenerationTask(deleteRequest);
System.out.println(deleteResult);
} catch (Exception e) {
System.out.println(e.getMessage());
}
service.shutdownExecutor();
}
}
\`\`\`
`}></RenderMd></Tabs.TabPane>
<Tabs.TabPane title="Go" key="dunqw92qil"><RenderMd content={`\`\`\`Go
package main
import (
"context"
"fmt"
"os"
"github.com/volcengine/volcengine-go-sdk/service/arkruntime"
"github.com/volcengine/volcengine-go-sdk/service/arkruntime/model"
"github.com/volcengine/volcengine-go-sdk/volcengine"
)
func main() {
// 请确保您已将 API Key 存储在环境变量 ARK_API_KEY 中
// 初始化Ark客户端,从环境变量中读取您的API Key
client := arkruntime.NewClientWithApiKey(
// 从环境变量中获取您的 API Key。此为默认方式,您可根据需要进行修改
os.Getenv("ARK_API_KEY"),
// The base URL for model invocation .
arkruntime.WithBaseUrl("https://ark.cn-beijing.volces.com/api/v3"),
)
ctx := context.Background()
// Replace with Model ID .
modelEp := "doubao-seedance-1-0-pro-250528"
fmt.Println("----- create content generation task -----")
// 创建视频生成任务
createReq := model.CreateContentGenerationTaskRequest{
Model: modelEp,
Content: []*model.CreateContentGenerationContentItem{
{
// 文本提示词与参数组合
Type: model.ContentGenerationContentItemTypeText,
Text: volcengine.String("一位身穿绿色亮片礼服的女性站在粉红色背景前,周围飘落着五彩斑斓的彩纸 --wm true --dur 5"),
},
},
}
createResponse, err := client.CreateContentGenerationTask(ctx, createReq)
if err != nil {
fmt.Printf("create content generation error: %v", err)
return
}
fmt.Printf("Task Created with ID: %s", createResponse.ID)
fmt.Println("----- get content generation task -----")
// 获取任务详情
taskID := createResponse.ID
getRequest := model.GetContentGenerationTaskRequest{ID: taskID}
getResponse, err := client.GetContentGenerationTask(ctx, getRequest)
if err != nil {
fmt.Printf("get content generation task error: %v", err)
return
}
fmt.Printf("Task ID: %s", getResponse.ID)
fmt.Printf("Model: %s", getResponse.Model)
fmt.Printf("Status: %s", getResponse.Status)
fmt.Printf("Video URL: %s", getResponse.Content.VideoURL)
fmt.Printf("Completion Tokens: %d", getResponse.Usage.CompletionTokens)
fmt.Printf("Created At: %d", getResponse.CreatedAt)
fmt.Printf("Updated At: %d", getResponse.UpdatedAt)
if getResponse.Error != nil {
fmt.Printf("Error Code: %s", getResponse.Error.Code)
fmt.Printf("Error Message: %s", getResponse.Error.Message)
}
fmt.Println("----- list content generation task -----")
// 列出符合特定条件的任务
listRequest := model.ListContentGenerationTasksRequest{
PageNum: volcengine.Int(1),
PageSize: volcengine.Int(10),
Filter: &model.ListContentGenerationTasksFilter{
Status: volcengine.String(model.StatusSucceeded),
//TaskIDs: volcengine.StringSlice([]string{"cgt-example-1", "cgt-example-2"}),
//Model: volcengine.String(modelEp),
},
}
listResponse, err := client.ListContentGenerationTasks(ctx, listRequest)
if err != nil {
fmt.Printf("failed to list content generation tasks: %v", err)
}
fmt.Printf("ListContentGenerationTasks returned %v results", listResponse.Total)
fmt.Println("----- delete content generation task -----")
// 通过任务 id 删除任务
deleteRequest := model.DeleteContentGenerationTaskRequest{ID: taskID}
err = client.DeleteContentGenerationTask(ctx, deleteRequest)
if err != nil {
fmt.Printf("delete content generation task error: %v", err)
} else {
fmt.Println("successfully deleted task id: ", taskID)
}
}
\`\`\`
`}></RenderMd></Tabs.TabPane></Tabs>);
```
<span id="979b2d28"></span>
## 图生视频-基于首帧
```mixin-react
return (<Tabs>
<Tabs.TabPane title="Python" key="dAdayzXTrF"><RenderMd content={`\`\`\`Python
import os
# Install SDK: pip install 'volcengine-python-sdk[ark]' .
from volcenginesdkarkruntime import Ark
# 初始化Ark客户端
client = Ark(
# The base URL for model invocation .
base_url="https://ark.cn-beijing.volces.com/api/v3",
# Get API Key:https://console.volcengine.com/ark/region:ark+cn-beijing/apikey
api_key=os.getenv('ARK_API_KEY'),
)
print("----- create request -----")
# 创建视频生成任务
create_result = client.content_generation.tasks.create(
# Replace with Model ID .
model="doubao-seedance-1-0-pro-fast-251015",
content=[
{
# 文本提示词与参数组合
"type": "text",
"text": "女孩抱着狐狸,女孩睁开眼,温柔地看向镜头,狐狸友善地抱着,镜头缓缓拉出,女孩的头发被风吹动 --wm true --dur 5"
},
{
# 图片URL
"type": "image_url",
"image_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/i2v_foxrgirl.png"
}
}
]
)
print(create_result)
print("----- get request -----")
# 获取任务详情
get_result = client.content_generation.tasks.get(task_id=create_result.id)
print(get_result)
print("----- list request -----")
# 列出符合特定条件的任务
list_result = client.content_generation.tasks.list(
page_num=1,
page_size=10,
status="queued", # 按状态筛选, e.g succeeded, failed, running, cancelled
# model="<YOUR_MODEL_EP>", # 按 ep 筛选
# task_ids=["test-id-1", "test-id-2"] # 按 task_id 筛选
)
print(list_result)
print("----- delete request -----")
# 通过任务 id 删除任务
try:
client.content_generation.tasks.delete(task_id=create_result.id)
print(create_result.id)
except Exception as e:
print(f"failed to delete task: {e}")
\`\`\`
`}></RenderMd></Tabs.TabPane>
<Tabs.TabPane title="Java" key="GFyqZNivpT"><RenderMd content={`\`\`\`Java
package com.volcengine.ark.runtime;
import com.volcengine.ark.runtime.model.content.generation.DeleteContentGenerationTaskResponse;
import com.volcengine.ark.runtime.model.content.generation.*;
import com.volcengine.ark.runtime.model.content.generation.CreateContentGenerationTaskRequest.Content;
import com.volcengine.ark.runtime.service.ArkService;
import okhttp3.ConnectionPool;
import okhttp3.Dispatcher;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class ContentGenerationTaskExample {
// 请确保您已将 API Key 存储在环境变量 ARK_API_KEY 中
// 初始化Ark客户端,从环境变量中读取您的API Key
static String apiKey = System.getenv("ARK_API_KEY");
static ConnectionPool connectionPool = new ConnectionPool(5, 1, TimeUnit.SECONDS);
static Dispatcher dispatcher = new Dispatcher();
static ArkService service = ArkService.builder()
.dispatcher(dispatcher)
.connectionPool(connectionPool)
.apiKey(apiKey)
.baseUrl("https://ark.cn-beijing.volces.com/api/v3") // The base URL for model invocation .
.build();
public static void main(String[] args) {
//Replace with Model ID .
String model = "doubao-seedance-1-0-pro-fast-251015";
System.out.println("----- CREATE Task Request -----");
List<Content> contents = new ArrayList<>();
// 文本提示词与参数组合
contents.add(Content.builder()
.type("text")
.text("女孩抱着狐狸,女孩睁开眼,温柔地看向镜头,狐狸友善地抱着,镜头缓缓拉出,女孩的头发被风吹动 --wm true --dur 5")
.build());
// 图片URL
contents.add(Content.builder()
.type("image_url")
.imageUrl(CreateContentGenerationTaskRequest.ImageUrl.builder()
.url("https://ark-project.tos-cn-beijing.volces.com/doc_image/i2v_foxrgirl.png")
.build())
.build());
// 创建视频生成任务
CreateContentGenerationTaskRequest createRequest = CreateContentGenerationTaskRequest.builder()
.model(model)
.content(contents)
.build();
CreateContentGenerationTaskResult createResult = service.createContentGenerationTask(createRequest);
System.out.println(createResult);
System.out.println("----- GET Task Request -----");
// 获取任务详情
GetContentGenerationTaskRequest getRequest = GetContentGenerationTaskRequest.builder()
.taskId(createResult.getId())
.build();
GetContentGenerationTaskResponse getResult = service.getContentGenerationTask(getRequest);
System.out.println(getResult);
System.out.println("----- LIST Task Request -----");
// 列出符合特定条件的任务
ListContentGenerationTasksRequest listRequest = ListContentGenerationTasksRequest.builder()
.pageNum(1)
.pageSize(10)
.status(TaskStatus.RUNNING)
.addTaskId(createResult.getId()) // 按 task_id 筛选
// 如果您需要按多个 task_id 进行筛选
// .taskIds(Arrays.asList("test-id-1", "test-id-2"))
.model(model)
.build();
ListContentGenerationTasksResponse listResponse = service.listContentGenerationTasks(listRequest);
System.out.println(listResponse);
System.out.println("----- DELETE Task Request -----");
// 通过任务 id 删除任务
DeleteContentGenerationTaskRequest deleteRequest = DeleteContentGenerationTaskRequest.builder()
.taskId(getResult.getId())
.build();
try {
DeleteContentGenerationTaskResponse deleteResult = service.deleteContentGenerationTask(deleteRequest);
System.out.println(deleteResult);
} catch (Exception e) {
System.out.println(e.getMessage());
}
service.shutdownExecutor();
}
}
\`\`\`
`}></RenderMd></Tabs.TabPane>
<Tabs.TabPane title="Go" key="ZePqhns7y0"><RenderMd content={`\`\`\`Go
package main
import (
"context"
"fmt"
"os"
"github.com/volcengine/volcengine-go-sdk/service/arkruntime"
"github.com/volcengine/volcengine-go-sdk/service/arkruntime/model"
"github.com/volcengine/volcengine-go-sdk/volcengine"
)
func main() {
// 请确保您已将 API Key 存储在环境变量 ARK_API_KEY 中
// 初始化Ark客户端,从环境变量中读取您的API Key
client := arkruntime.NewClientWithApiKey(
// 从环境变量中获取您的 API Key。此为默认方式,您可根据需要进行修改
os.Getenv("ARK_API_KEY"),
// The base URL for model invocation .
arkruntime.WithBaseUrl("https://ark.cn-beijing.volces.com/api/v3"),
)
ctx := context.Background()
// Replace with Model ID .
modelEp := "doubao-seedance-1-0-pro-fast-251015"
fmt.Println("----- create content generation task -----")
// 创建视频生成任务
createReq := model.CreateContentGenerationTaskRequest{
Model: modelEp,
Content: []*model.CreateContentGenerationContentItem{
{
// 文本提示词与参数组合
Type: model.ContentGenerationContentItemTypeText,
Text: volcengine.String("女孩抱着狐狸,女孩睁开眼,温柔地看向镜头,狐狸友善地抱着,镜头缓缓拉出,女孩的头发被风吹动 --wm true --dur 5"),
},
{
// 图片URL
Type: model.ContentGenerationContentItemTypeImage,
ImageURL: &model.ImageURL{
URL: "https://ark-project.tos-cn-beijing.volces.com/doc_image/i2v_foxrgirl.png",
},
},
},
}
createResponse, err := client.CreateContentGenerationTask(ctx, createReq)
if err != nil {
fmt.Printf("create content generation error: %v", err)
return
}
fmt.Printf("Task Created with ID: %s", createResponse.ID)
fmt.Println("----- get content generation task -----")
// 获取任务详情
taskID := createResponse.ID
getRequest := model.GetContentGenerationTaskRequest{ID: taskID}
getResponse, err := client.GetContentGenerationTask(ctx, getRequest)
if err != nil {
fmt.Printf("get content generation task error: %v", err)
return
}
fmt.Printf("Task ID: %s", getResponse.ID)
fmt.Printf("Model: %s", getResponse.Model)
fmt.Printf("Status: %s", getResponse.Status)
fmt.Printf("Video URL: %s", getResponse.Content.VideoURL)
fmt.Printf("Completion Tokens: %d", getResponse.Usage.CompletionTokens)
fmt.Printf("Created At: %d", getResponse.CreatedAt)
fmt.Printf("Updated At: %d", getResponse.UpdatedAt)
if getResponse.Error != nil {
fmt.Printf("Error Code: %s", getResponse.Error.Code)
fmt.Printf("Error Message: %s", getResponse.Error.Message)
}
fmt.Println("----- list content generation task -----")
// 列出符合特定条件的任务
listRequest := model.ListContentGenerationTasksRequest{
PageNum: volcengine.Int(1),
PageSize: volcengine.Int(10),
Filter: &model.ListContentGenerationTasksFilter{
Status: volcengine.String(model.StatusSucceeded),
//TaskIDs: volcengine.StringSlice([]string{"cgt-example-1", "cgt-example-2"}),
//Model: volcengine.String(modelEp),
},
}
listResponse, err := client.ListContentGenerationTasks(ctx, listRequest)
if err != nil {
fmt.Printf("failed to list content generation tasks: %v", err)
}
fmt.Printf("ListContentGenerationTasks returned %v results", listResponse.Total)
fmt.Println("----- delete content generation task -----")
// 通过任务 id 删除任务
deleteRequest := model.DeleteContentGenerationTaskRequest{ID: taskID}
err = client.DeleteContentGenerationTask(ctx, deleteRequest)
if err != nil {
fmt.Printf("delete content generation task error: %v", err)
} else {
fmt.Println("successfully deleted task id: ", taskID)
}
}
\`\`\`
`}></RenderMd></Tabs.TabPane></Tabs>);
```
<span id="0d55ca07"></span>
## 图生视频-基于首尾帧
```mixin-react
return (<Tabs>
<Tabs.TabPane title="Python" key="bukFdSpLyj"><RenderMd content={`\`\`\`Python
import os
# Install SDK: pip install 'volcengine-python-sdk[ark]' .
from volcenginesdkarkruntime import Ark
# 初始化Ark客户端
client = Ark(
# The base URL for model invocation .
base_url="https://ark.cn-beijing.volces.com/api/v3",
# Get API Key:https://console.volcengine.com/ark/region:ark+cn-beijing/apikey
api_key=os.getenv('ARK_API_KEY'),
)
print("----- create request -----")
# 创建视频生成任务
create_result = client.content_generation.tasks.create(
# Replace with Model ID .
model="doubao-seedance-1-0-pro-250528",
content=[
{
# 文本提示词与参数组合
"type": "text",
"text": "360度环绕运镜"
},
{
# 首帧图片URL
"type": "image_url",
"image_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/seepro_first_frame.jpeg"
},
"role": "first_frame"
},
{
# 尾帧图片URL
"type": "image_url",
"image_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/seepro_last_frame.jpeg"
},
"role": "last_frame"
}
]
)
print(create_result)
print("----- get request -----")
# 获取任务详情
get_result = client.content_generation.tasks.get(task_id=create_result.id)
print(get_result)
print("----- list request -----")
# 列出符合特定条件的任务
list_result = client.content_generation.tasks.list(
page_num=1,
page_size=10,
status="queued", # 按状态筛选, e.g succeeded, failed, running, cancelled
# model="<YOUR_MODEL_EP>", # 按 ep 筛选
# task_ids=["test-id-1", "test-id-2"] # 按 task_id 筛选
)
print(list_result)
print("----- delete request -----")
# 通过任务 id 删除任务
try:
client.content_generation.tasks.delete(task_id=create_result.id)
print(create_result.id)
except Exception as e:
print(f"failed to delete task: {e}")
\`\`\`
`}></RenderMd></Tabs.TabPane>
<Tabs.TabPane title="Java" key="ezIC1aYZ42"><RenderMd content={`\`\`\`Java
package com.volcengine.ark.runtime;
import com.volcengine.ark.runtime.model.content.generation.DeleteContentGenerationTaskResponse;
import com.volcengine.ark.runtime.model.content.generation.*;
import com.volcengine.ark.runtime.model.content.generation.CreateContentGenerationTaskRequest.Content;
import com.volcengine.ark.runtime.service.ArkService;
import okhttp3.ConnectionPool;
import okhttp3.Dispatcher;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class ContentGenerationTaskExample {
// 请确保您已将 API Key 存储在环境变量 ARK_API_KEY 中
// 初始化Ark客户端,从环境变量中读取您的API Key
static String apiKey = System.getenv("ARK_API_KEY");
static ConnectionPool connectionPool = new ConnectionPool(5, 1, TimeUnit.SECONDS);
static Dispatcher dispatcher = new Dispatcher();
static ArkService service = ArkService.builder()
.dispatcher(dispatcher)
.connectionPool(connectionPool)
.apiKey(apiKey)
.baseUrl("https://ark.cn-beijing.volces.com/api/v3") // The base URL for model invocation .
.build();
public static void main(String[] args) {
//Replace with Model ID .
String model = "doubao-seedance-1-0-pro-250528";
System.out.println("----- CREATE Task Request -----");
List<Content> contents = new ArrayList<>();
// 添加文本提示词与参数组合
contents.add(Content.builder()
.type("text")
.text("360度环绕运镜")
.build());
// 添加首帧图片URL
contents.add(Content.builder()
.type("image_url")
.imageUrl(CreateContentGenerationTaskRequest.ImageUrl.builder()
.url("https://ark-project.tos-cn-beijing.volces.com/doc_image/seepro_first_frame.jpeg")
.build())
.role("first_frame")
.build());
// 添加尾帧图片URL
contents.add(Content.builder()
.type("image_url")
.imageUrl(CreateContentGenerationTaskRequest.ImageUrl.builder()
.url("https://ark-project.tos-cn-beijing.volces.com/doc_image/seepro_last_frame.jpeg")
.build())
.role("last_frame")
.build());
// 创建视频生成任务
CreateContentGenerationTaskRequest createRequest = CreateContentGenerationTaskRequest.builder()
.model(model)
.content(contents)
.build();
CreateContentGenerationTaskResult createResult = service.createContentGenerationTask(createRequest);
System.out.println(createResult);
System.out.println("----- GET Task Request -----");
// 获取任务详情
GetContentGenerationTaskRequest getRequest = GetContentGenerationTaskRequest.builder()
.taskId(createResult.getId())
.build();
GetContentGenerationTaskResponse getResult = service.getContentGenerationTask(getRequest);
System.out.println(getResult);
System.out.println("----- LIST Task Request -----");
// 列出符合特定条件的任务
ListContentGenerationTasksRequest listRequest = ListContentGenerationTasksRequest.builder()
.pageNum(1)
.pageSize(10)
.status(TaskStatus.RUNNING)
.addTaskId(createResult.getId()) // 按 task_id 筛选
// 如果您需要按多个 task_id 进行筛选
// .taskIds(Arrays.asList("test-id-1", "test-id-2"))
.model(model)
.build();
ListContentGenerationTasksResponse listResponse = service.listContentGenerationTasks(listRequest);
System.out.println(listResponse);
System.out.println("----- DELETE Task Request -----");
// 通过任务 id 删除任务
DeleteContentGenerationTaskRequest deleteRequest = DeleteContentGenerationTaskRequest.builder()
.taskId(getResult.getId())
.build();
try {
DeleteContentGenerationTaskResponse deleteResult = service.deleteContentGenerationTask(deleteRequest);
System.out.println(deleteResult);
} catch (Exception e) {
System.out.println(e.getMessage());
}
service.shutdownExecutor();
}
}
\`\`\`
`}></RenderMd></Tabs.TabPane>
<Tabs.TabPane title="Go" key="qWIVc7tvC1"><RenderMd content={`\`\`\`Go
package main
import (
"context"
"fmt"
"os"
"github.com/volcengine/volcengine-go-sdk/service/arkruntime"
"github.com/volcengine/volcengine-go-sdk/service/arkruntime/model"
"github.com/volcengine/volcengine-go-sdk/volcengine"
)
func main() {
// 请确保您已将 API Key 存储在环境变量 ARK_API_KEY 中
// 初始化Ark客户端,从环境变量中读取您的API Key
client := arkruntime.NewClientWithApiKey(
// 从环境变量中获取您的 API Key。此为默认方式,您可根据需要进行修改
os.Getenv("ARK_API_KEY"),
// The base URL for model invocation .
arkruntime.WithBaseUrl("https://ark.cn-beijing.volces.com/api/v3"),
)
ctx := context.Background()
// Replace with Model ID .
modelEp := "doubao-seedance-1-0-pro-250528"
fmt.Println("----- create content generation task -----")
// 创建视频生成任务
createReq := model.CreateContentGenerationTaskRequest{
Model: modelEp,
Content: []*model.CreateContentGenerationContentItem{
{
// 文本提示词与参数组合
Type: model.ContentGenerationContentItemTypeText,
Text: volcengine.String("360度环绕运镜"),
},
{
// 首帧图片URL
Type: model.ContentGenerationContentItemTypeImage,
ImageURL: &model.ImageURL{
URL: "https://ark-project.tos-cn-beijing.volces.com/doc_image/seepro_first_frame.jpeg",
},
Role: volcengine.String("first_frame"),
},
{
// 尾帧图片URL
Type: model.ContentGenerationContentItemTypeImage,
ImageURL: &model.ImageURL{
URL: "https://ark-project.tos-cn-beijing.volces.com/doc_image/seepro_last_frame.jpeg",
},
Role: volcengine.String("last_frame"),
},
},
}
createResponse, err := client.CreateContentGenerationTask(ctx, createReq)
if err != nil {
fmt.Printf("create content generation error: %v", err)
return
}
fmt.Printf("Task Created with ID: %s", createResponse.ID)
fmt.Println("----- get content generation task -----")
// 获取任务详情
taskID := createResponse.ID
getRequest := model.GetContentGenerationTaskRequest{ID: taskID}
getResponse, err := client.GetContentGenerationTask(ctx, getRequest)
if err != nil {
fmt.Printf("get content generation task error: %v", err)
return
}
fmt.Printf("Task ID: %s", getResponse.ID)
fmt.Printf("Model: %s", getResponse.Model)
fmt.Printf("Status: %s", getResponse.Status)
fmt.Printf("Video URL: %s", getResponse.Content.VideoURL)
fmt.Printf("Completion Tokens: %d", getResponse.Usage.CompletionTokens)
fmt.Printf("Created At: %d", getResponse.CreatedAt)
fmt.Printf("Updated At: %d", getResponse.UpdatedAt)
if getResponse.Error != nil {
fmt.Printf("Error Code: %s", getResponse.Error.Code)
fmt.Printf("Error Message: %s", getResponse.Error.Message)
}
fmt.Println("----- list content generation task -----")
// 列出符合特定条件的任务
listRequest := model.ListContentGenerationTasksRequest{
PageNum: volcengine.Int(1),
PageSize: volcengine.Int(10),
Filter: &model.ListContentGenerationTasksFilter{
Status: volcengine.String(model.StatusSucceeded),
//TaskIDs: volcengine.StringSlice([]string{"cgt-example-1", "cgt-example-2"}),
//Model: volcengine.String(modelEp),
},
}
listResponse, err := client.ListContentGenerationTasks(ctx, listRequest)
if err != nil {
fmt.Printf("failed to list content generation tasks: %v", err)
}
fmt.Printf("ListContentGenerationTasks returned %v results", listResponse.Total)
fmt.Println("----- delete content generation task -----")
// 通过任务 id 删除任务
deleteRequest := model.DeleteContentGenerationTaskRequest{ID: taskID}
err = client.DeleteContentGenerationTask(ctx, deleteRequest)
if err != nil {
fmt.Printf("delete content generation task error: %v", err)
} else {
fmt.Println("successfully deleted task id: ", taskID)
}
}
\`\`\`
`}></RenderMd></Tabs.TabPane></Tabs>);
```
<span id="c5f5f577"></span>
## 图生视频-基于参考图
```mixin-react
return (<Tabs>
<Tabs.TabPane title="Python" key="Z7NYvc0isV"><RenderMd content={`\`\`\`Python
import os
# Install SDK: pip install 'volcengine-python-sdk[ark]' .
from volcenginesdkarkruntime import Ark
# 初始化Ark客户端
client = Ark(
# The base URL for model invocation .
base_url="https://ark.cn-beijing.volces.com/api/v3",
# Get API Key:https://console.volcengine.com/ark/region:ark+cn-beijing/apikey
api_key=os.getenv('ARK_API_KEY'),
)
print("----- create request -----")
# 创建视频生成任务
create_result = client.content_generation.tasks.create(
# Replace with Model ID .
model="doubao-seedance-1-0-lite-i2v-250428",
content=[
{
# 文本提示词与参数组合
"type": "text",
"text": "[图1]戴着眼镜穿着蓝色T恤的男生和[图2]的柯基小狗,坐在[图3]的草坪上,3D卡通风格"
},
{
# 第一张参考图片URL
# 参考图需要传入1~4张
"type": "image_url",
"image_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/seelite_ref_1.png"
},
"role": "reference_image"
},
{
# 第二张参考图片URL
"type": "image_url",
"image_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/seelite_ref_2.png"
},
"role": "reference_image"
},
{
# 第三张参考图片URL
"type": "image_url",
"image_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/seelite_ref_3.png"
},
"role": "reference_image"
}
]
)
print(create_result)
print("----- get request -----")
# 获取任务详情
get_result = client.content_generation.tasks.get(task_id=create_result.id)
print(get_result)
print("----- list request -----")
# 列出符合特定条件的任务
list_result = client.content_generation.tasks.list(
page_num=1,
page_size=10,
status="queued", # 按状态筛选, e.g succeeded, failed, running, cancelled
# model="<YOUR_MODEL_EP>", # 按 ep 筛选
# task_ids=["test-id-1", "test-id-2"] # 按 task_id 筛选
)
print(list_result)
print("----- delete request -----")
# 通过任务 id 删除任务
try:
client.content_generation.tasks.delete(task_id=create_result.id)
print(create_result.id)
except Exception as e:
print(f"failed to delete task: {e}")
\`\`\`
`}></RenderMd></Tabs.TabPane>
<Tabs.TabPane title="Java" key="W3OZmZ8Rmi"><RenderMd content={`\`\`\`Java
package com.volcengine.ark.runtime;
import com.volcengine.ark.runtime.model.content.generation.DeleteContentGenerationTaskResponse;
import com.volcengine.ark.runtime.model.content.generation.*;
import com.volcengine.ark.runtime.model.content.generation.CreateContentGenerationTaskRequest.Content;
import com.volcengine.ark.runtime.service.ArkService;
import okhttp3.ConnectionPool;
import okhttp3.Dispatcher;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class ContentGenerationTaskExample {
// 请确保您已将 API Key 存储在环境变量 ARK_API_KEY 中
// 初始化Ark客户端,从环境变量中读取您的API Key
static String apiKey = System.getenv("ARK_API_KEY");
static ConnectionPool connectionPool = new ConnectionPool(5, 1, TimeUnit.SECONDS);
static Dispatcher dispatcher = new Dispatcher();
static ArkService service = ArkService.builder()
.dispatcher(dispatcher)
.connectionPool(connectionPool)
.apiKey(apiKey)
.baseUrl("https://ark.cn-beijing.volces.com/api/v3") // The base URL for model invocation .
.build();
public static void main(String[] args) {
//Replace with Model ID .
String model = "doubao-seedance-1-0-lite-i2v-250428";
System.out.println("----- CREATE Task Request -----");
List<Content> contents = new ArrayList<>();
// 添加文本提示词与参数组合
contents.add(Content.builder()
.type("text")
.text("[图1]戴着眼镜穿着蓝色T恤的男生和[图2]的柯基小狗,坐在[图3]的草坪上,3D卡通风格")
.build());
// 第一张参考图片URL
// 参考图需要传入1~4张
contents.add(Content.builder()
.type("image_url")
.imageUrl(CreateContentGenerationTaskRequest.ImageUrl.builder()
.url("https://ark-project.tos-cn-beijing.volces.com/doc_image/seelite_ref_1.png")
.build())
.role("reference_image")
.build());
// 第二张参考图片URL
contents.add(Content.builder()
.type("image_url")
.imageUrl(CreateContentGenerationTaskRequest.ImageUrl.builder()
.url("https://ark-project.tos-cn-beijing.volces.com/doc_image/seelite_ref_2.png")
.build())
.role("reference_image")
.build());
// 第三张参考图片URL
contents.add(Content.builder()
.type("image_url")
.imageUrl(CreateContentGenerationTaskRequest.ImageUrl.builder()
.url("https://ark-project.tos-cn-beijing.volces.com/doc_image/seelite_ref_3.png")
.build())
.role("reference_image")
.build());
// 创建视频生成任务
CreateContentGenerationTaskRequest createRequest = CreateContentGenerationTaskRequest.builder()
.model(model)
.content(contents)
.build();
CreateContentGenerationTaskResult createResult = service.createContentGenerationTask(createRequest);
System.out.println(createResult);
System.out.println("----- GET Task Request -----");
// 获取任务详情
GetContentGenerationTaskRequest getRequest = GetContentGenerationTaskRequest.builder()
.taskId(createResult.getId())
.build();
GetContentGenerationTaskResponse getResult = service.getContentGenerationTask(getRequest);
System.out.println(getResult);
System.out.println("----- LIST Task Request -----");
// 列出符合特定条件的任务
ListContentGenerationTasksRequest listRequest = ListContentGenerationTasksRequest.builder()
.pageNum(1)
.pageSize(10)
.status(TaskStatus.RUNNING)
.addTaskId(createResult.getId()) // 按 task_id 筛选
// 如果您需要按多个 task_id 进行筛选
// .taskIds(Arrays.asList("test-id-1", "test-id-2"))
.model(model)
.build();
ListContentGenerationTasksResponse listResponse = service.listContentGenerationTasks(listRequest);
System.out.println(listResponse);
System.out.println("----- DELETE Task Request -----");
// 通过任务 id 删除任务
DeleteContentGenerationTaskRequest deleteRequest = DeleteContentGenerationTaskRequest.builder()
.taskId(getResult.getId())
.build();
try {
DeleteContentGenerationTaskResponse deleteResult = service.deleteContentGenerationTask(deleteRequest);
System.out.println(deleteResult);
} catch (Exception e) {
System.out.println(e.getMessage());
}
service.shutdownExecutor();
}
}
\`\`\`
`}></RenderMd></Tabs.TabPane>
<Tabs.TabPane title="Go" key="XlxT2kQCal"><RenderMd content={`\`\`\`Go
package main
import (
"context"
"fmt"
"os"
"github.com/volcengine/volcengine-go-sdk/service/arkruntime"
"github.com/volcengine/volcengine-go-sdk/service/arkruntime/model"
"github.com/volcengine/volcengine-go-sdk/volcengine"
)
func main() {
// 请确保您已将 API Key 存储在环境变量 ARK_API_KEY 中
// 初始化Ark客户端,从环境变量中读取您的API Key
client := arkruntime.NewClientWithApiKey(
// 从环境变量中获取您的 API Key。此为默认方式,您可根据需要进行修改
os.Getenv("ARK_API_KEY"),
// The base URL for model invocation .
arkruntime.WithBaseUrl("https://ark.cn-beijing.volces.com/api/v3"),
)
ctx := context.Background()
// Replace with Model ID .
modelEp := "doubao-seedance-1-0-lite-i2v-250428"
fmt.Println("----- create content generation task -----")
// 创建视频生成任务
createReq := model.CreateContentGenerationTaskRequest{
Model: modelEp,
Content: []*model.CreateContentGenerationContentItem{
{
// 文本提示词与参数组合
Type: model.ContentGenerationContentItemTypeText,
Text: volcengine.String("[图1]戴着眼镜穿着蓝色T恤的男生和[图2]的柯基小狗,坐在[图3]的草坪上,3D卡通风格"),
},
{
// 第一张参考图片URL
// 参考图需要传入1~4张
Type: model.ContentGenerationContentItemTypeImage,
ImageURL: &model.ImageURL{
URL: "https://ark-project.tos-cn-beijing.volces.com/doc_image/seelite_ref_1.png",
},
Role: volcengine.String("reference_image"),
},
{
// 第二张参考图片URL
Type: model.ContentGenerationContentItemTypeImage,
ImageURL: &model.ImageURL{
URL: "https://ark-project.tos-cn-beijing.volces.com/doc_image/seelite_ref_2.png",
},
Role: volcengine.String("reference_image"),
},
{
// 第三张参考图片URL
Type: model.ContentGenerationContentItemTypeImage,
ImageURL: &model.ImageURL{
URL: "https://ark-project.tos-cn-beijing.volces.com/doc_image/seelite_ref_3.png",
},
Role: volcengine.String("reference_image"),
},
},
}
createResponse, err := client.CreateContentGenerationTask(ctx, createReq)
if err != nil {
fmt.Printf("create content generation error: %v", err)
return
}
fmt.Printf("Task Created with ID: %s", createResponse.ID)
fmt.Println("----- get content generation task -----")
// 获取任务详情
taskID := createResponse.ID
getRequest := model.GetContentGenerationTaskRequest{ID: taskID}
getResponse, err := client.GetContentGenerationTask(ctx, getRequest)
if err != nil {
fmt.Printf("get content generation task error: %v", err)
return
}
fmt.Printf("Task ID: %s", getResponse.ID)
fmt.Printf("Model: %s", getResponse.Model)
fmt.Printf("Status: %s", getResponse.Status)
fmt.Printf("Video URL: %s", getResponse.Content.VideoURL)
fmt.Printf("Completion Tokens: %d", getResponse.Usage.CompletionTokens)
fmt.Printf("Created At: %d", getResponse.CreatedAt)
fmt.Printf("Updated At: %d", getResponse.UpdatedAt)
if getResponse.Error != nil {
fmt.Printf("Error Code: %s", getResponse.Error.Code)
fmt.Printf("Error Message: %s", getResponse.Error.Message)
}
fmt.Println("----- list content generation task -----")
// 列出符合特定条件的任务
listRequest := model.ListContentGenerationTasksRequest{
PageNum: volcengine.Int(1),
PageSize: volcengine.Int(10),
Filter: &model.ListContentGenerationTasksFilter{
Status: volcengine.String(model.StatusSucceeded),
//TaskIDs: volcengine.StringSlice([]string{"cgt-example-1", "cgt-example-2"}),
//Model: volcengine.String(modelEp),
},
}
listResponse, err := client.ListContentGenerationTasks(ctx, listRequest)
if err != nil {
fmt.Printf("failed to list content generation tasks: %v", err)
}
fmt.Printf("ListContentGenerationTasks returned %v results", listResponse.Total)
fmt.Println("----- delete content generation task -----")
// 通过任务 id 删除任务
deleteRequest := model.DeleteContentGenerationTaskRequest{ID: taskID}
err = client.DeleteContentGenerationTask(ctx, deleteRequest)
if err != nil {
fmt.Printf("delete content generation task error: %v", err)
} else {
fmt.Println("successfully deleted task id: ", taskID)
}
}
\`\`\`
`}></RenderMd></Tabs.TabPane></Tabs>);
```
<span id="141cf7fa"></span>
## 生成多个连续视频
使用前一个生成视频的尾帧,作为后一个视频任务的首帧,循环生成多个连续的视频。
```Python
import time
import os
# Install SDK: pip install 'volcengine-python-sdk[ark]' .
from volcenginesdkarkruntime import Ark
# 初始化Ark客户端
client = Ark(
# The base URL for model invocation .
base_url="https://ark.cn-beijing.volces.com/api/v3",
# Get API Key:https://console.volcengine.com/ark/region:ark+cn-beijing/apikey
api_key=os.getenv('ARK_API_KEY'),
)
def generate_video_with_last_frame(prompt, initial_image_url=None):
"""
生成视频并返回视频URL和尾帧URL
参数:
prompt: 视频生成的文本提示
initial_image_url: 初始图像URL (可选)
返回:
video_url: 生成的视频URL
last_frame_url: 视频的最后一帧URL
"""
print(f"----- 生成视频: {prompt} -----")
# 构建内容列表
content = [{
"text": prompt,
"type": "text"
}]
# 如果提供了初始图像,则添加到内容中
if initial_image_url:
content.append({
"image_url": {
"url": initial_image_url
},
"type": "image_url"
})
# 创建视频生成任务
create_result = client.content_generation.tasks.create(
model="doubao-seedance-1-0-pro-250528",
content=content,
return_last_frame=True
)
# 轮询查询任务状态
task_id = create_result.id
while True:
get_result = client.content_generation.tasks.get(task_id=task_id)
status = get_result.status
if get_result.status == "succeeded":
print("视频生成成功")
try:
if hasattr(get_result, 'content') and hasattr(get_result.content, 'video_url') and hasattr(get_result.content, 'last_frame_url'):
return get_result.content.video_url, get_result.content.last_frame_url
print("无法获取视频URL或尾帧URL")
return None, None
except Exception as e:
print(f"获取视频URL和尾帧URL时出错: {e}")
return None, None
elif status == "failed":
print(f"----- 视频生成失败 -----")
print(f"错误: {get_result.error}")
return None, None
else:
print(f"当前状态: {status}, 10秒后重试...")
time.sleep(10)
if __name__ == "__main__":
# 定义3个视频的提示词
prompts = [
"女孩抱着狐狸,女孩睁开眼,温柔地看向镜头,狐狸友善地抱着,镜头缓缓拉出,女孩的头发被风吹动 --ratio adaptive --dur 5",
"女孩和狐狸在草地上奔跑,阳光明媚,女孩的笑容灿烂,狐狸欢快地跳跃 --ratio adaptive --dur 5",
"女孩和狐狸坐在树下休息,女孩轻轻抚摸狐狸的毛发,狐狸温顺地趴在女孩腿上 --ratio adaptive --dur 5"
]
# 存储生成的视频URL
video_urls = []
# 初始图像URL
initial_image_url = "https://ark-project.tos-cn-beijing.volces.com/doc_image/i2v_foxrgirl.png"
# 生成3个短视频
for i, prompt in enumerate(prompts):
print(f"生成第{i+1}个视频")
video_url, last_frame_url = generate_video_with_last_frame(prompt, initial_image_url)
if video_url and last_frame_url:
video_urls.append(video_url)
print(f"第{i+1}个视频URL: {video_url}")
# 将当前视频的尾帧作为下一个视频的首帧
initial_image_url = last_frame_url
else:
print(f"第{i+1}个视频生成失败,退出程序")
exit(1)
print("所有视频生成完成!")
print("生成的视频URL列表:")
for i, url in enumerate(video_urls):
print(f"视频 {i+1}: {url}")
```
后续您可以自行使用 FFmpeg 等工具,将生成的多个短视频拼接成一个完整长视频。
<style>
/* 表格容器:小屏横向滚动,限制最大宽度避免过宽 */
.table-container {
overflow-x: auto;
max-width: 100%; /* 容器占满父级,不超出页面 */
}
/* 表格:宽度自适应,内容优先 */
table {
width: 100%;
border-collapse: collapse;
}
/* 单元格:垂直顶格,内边距优化,宽度按内容/比例分配 */
td {
vertical-align: top;
padding: 8px;
}
/* 图片:自适应单元格,保持比例 */
img {
max-width: 100%;
height: auto;
}
/* 响应式:小屏(如手机)下优化显示 */
@media (max-width: 768px) {
td {
width: 100%; /* 小屏时列垂直堆叠 */
display: block;
}
tr {
display: block;
margin-bottom: 15px;
border: 1px solid #ddd;
}
}
</style>