视频生成模型具备出色的语义理解能力，可根据用户输入的文本、图片等内容，快速生成优质的视频片段。通过这篇教程，您可学习到如何调用视频生成 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>


