Seedance 2.0 系列教程 Seedance 2.0 系列模型(包括 Seedance 2.0 和 Seedance 2.0 fast )支持图像、视频、音频、文本等多种模态内容输入,具备视频生成、视频编辑、视频延长等能力,可高精度还原物品细节、音色、效果、风格、运镜等,保持稳定角色特征,赋予使用者如同导演般的掌控权。本文介绍 Seedance 2.0 系列模型的专属能力,帮助您快速实现 Video Generation API 调用。 说明 Seedance 2.0 及 Seedance 2.0 fast API 现已面向 企业用户 开启公测。参与公测请 提交申请,审核结果将以短信形式另行通知,请您耐心等候。 新手入门 本入门教程专为 API 新手用户 设计,帮助您一键搭建 Python 开发环境、完成虚拟环境创建和方舟 SDK 安装,并提供直接可运行的 seedance 2.0 示例代码,您只需修改对应的输入素材,即可开始您的视频生成创作。
1. 准备工作
在开始之前,请确保您已经完成以下准备: 注册账号 :确保您拥有火山引擎账号并已 登录 获取 API Key :访问 API Key 管理页面 ,点击 创建 API Key ,并复制保存您的 API Key。注意请妥善保管您的 API Key,不要泄露给他人。 开通模型(可选) :所有新用户可使用免费额度体验模型服务。如额度使用完毕需要 开通模型 ,以继续使用方舟模型服务。 下载并解压文件 :点击下载下方附件,将其解压到您的本地目录(如桌面或“下载”文件夹)。 ark_seedance2.0_quickstart_package.zip 2.操作步骤 Windows 用户 macOS 用户 打开终端,进入 scripts/init_dev_env 目录。 运行构建脚本: ./setup_mac.sh 脚本会自动配置好所有环境。 完成后,在项目根目录会生成一个 run_demo.sh。 运行 ./run_demo.sh 即可运行 Python SDK 示例代码(python/demo_standard.py)。 进入 scripts/init_dev_env 目录。 双击运行 setup_windows.bat 。 脚本会自动执行以下操作: 下载 uv 工具。 自动下载 Python 3.12(如果不干扰您的系统 Python)。 创建虚拟环境 . venv 。 安装方舟 SDK。 完成后,在项目根目录会生成一个 run_demo.bat。 双击 run_demo.bat,即可运行 Python SDK 示例代码(python/demo_standard.py)。 3.运行说明 运行脚本后,您将看到如下流程: API Key 校验 :脚本会自动检测您本地是否配置了 ARK_API_KEY 环境变量。如果没有,会提示您手动输入。 素材预览 :脚本会自动在您的默认浏览器中弹出一个本地生成的 HTML 页面,直观地展示本次任务的文本提示词、待替换的参考图片以及原始参考视频。 任务创建与轮询 :脚本向火山方舟服务器发起异步请求。由于视频生成需要一定时间,控制台会每隔 30 秒打印一次任务状态(如 running 获取结果 :任务成功后,控制台会输出一段最终生成的视频 URL。您可以复制该链接到浏览器下载或在线播放。 4.下一步 在成功跑通本示例后,您可以尝试修改 python/demo_standard.py ,来打造您专属的视频生成任务: 修改文本提示词 找到代码中的 user_content 变量,更改为您想要的画面描述。 替换输入素材 (图片、视频、音频) 您可以将 reference_image_url reference_video_url reference_audio_url 替换为您自己的素材链接。 注意 :请确保 URL 是公网可公开访问的链接(建议存放在 TOS 对象存储服务中,并配置为公共读)。 继续学习下文中丰富的使用示例。 模型能力 Seedance 2.0 fast 和 Seedance 2.0 的模型能力相同。追求最高生成品质,推荐使用 Seedance 2.0;更注重成本与生成速度,不要求极限品质,推荐使用 Seedance 2.0 fast。 模型名称 Seedance 2.0 Seedance 2.0 fast Model ID doubao-seedance-2-0-260128 doubao-seedance-2-0-fast-260128 文生视频 图生视频-首帧 图生视频-首尾帧 多模态参考【New】 图片参考 视频参考 组合参考 图片 + 音频 图片 + 视频 视频 + 音频 图片 + 视频 + 音频 编辑视频【New】 延长视频【New】 生成有声视频 联网搜索增强【New】 样片模式 返回视频尾帧 输出视频规格 输出分辨率 480p, 720p 480p, 720p 输出宽高比 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 输出时长 4~15 秒 4~15 秒 输出视频格式 离线推理 在线推理限流 并发数 离线推理限流 基础使用 多模态参考 输入文本、参考图、视频(可带音轨)和音频等内容,来生成一段新视频。可继承参考图片的角色形象、视觉风格、画面构图;参考视频的主体内容、运镜方式、动作表现、整体风格;以及参考音频的音色、音乐旋律、对话内容等核心信息。 效果预览如下(访问 模型卡片 输入:文本 输入:图片、视频、音频 输出 全程使用视频1的第一视角构图,全程使用音频1 作为背景音乐。第一人称视角果茶宣传广告,seedance牌「苹苹安安」苹果果茶限定款;首帧为图片1,你的手摘下一颗带晨露的阿克苏红苹果,轻脆的苹果碰撞声;2-4 秒:快速切镜,你的手将苹果块投入雪克杯,加入冰块与茶底,用力摇晃,冰块碰撞声与摇晃声卡点轻快鼓点,背景音:「鲜切现摇」;4-6 秒:第一人称成品特写,分层果茶倒入透明杯,你的手轻挤奶盖在顶部铺展,在杯身贴上粉红包标,镜头拉近看奶盖与果茶的分层纹理;6-8 秒:第一人称手持举杯,你将图片2中的果茶举到镜头前(模拟递到观众面前的视角),杯身标签清晰可见,背景音「来一口鲜爽」,尾帧定格为图片2。背景声音统一为女生音色。 00:00/00:00 2X快进中 重播 播放 00:00/00:00直播 00:00 00:05 进入全屏 1.5x 0.75x 0.5x 点击按住可拖动视频 r2v_tea_audio1.mp3 00:00/00:00 2X快进中 重播 播放 00:00/00:00直播 00:00 00:11 进入全屏 1.5x 0.75x 0.5x 点击按住可拖动视频 Python Java Go package com.ark.sample; 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 { // Client initialization 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() .baseUrl("https://ark.cn-beijing.volces.com/api/v3") // The base URL for model invocation .dispatcher(dispatcher) .connectionPool(connectionPool) .apiKey(apiKey) .build(); public static void main(String[] args) { // Model ID final String modelId = "doubao-seedance-2-0-260128"; // Text prompt final String prompt = "全程使用视频1的第一视角构图,全程使用音频1作为背景音乐。第一人称视角果茶宣传广告,seedance牌「苹苹安安」苹果果茶限定款;" + "首帧为图片1,你的手摘下一颗带晨露的阿克苏红苹果,轻脆的苹果碰撞声;" + "2-4 秒:快速切镜,你的手将苹果块投入雪克杯,加入冰块与茶底,用力摇晃,冰块碰撞声与摇晃声卡点轻快鼓点,背景音:「鲜切现摇」;" + "4-6 秒:第一人称成品特写,分层果茶倒入透明杯,你的手轻挤奶盖在顶部铺展,在杯身贴上粉红包标,镜头拉近看奶盖与果茶的分层纹理;" + "6-8 秒:第一人称手持举杯,你将图片2中的果茶举到镜头前(模拟递到观众面前的视角),杯身标签清晰可见,背景音「来一口鲜爽」,尾帧定格为图片2。" + "背景声音统一为女生音色。"; // Example resource URLs final String refImage1 = "https://ark-project.tos-cn-beijing.volces.com/doc_image/r2v_tea_pic1.jpg"; final String refImage2 = "https://ark-project.tos-cn-beijing.volces.com/doc_image/r2v_tea_pic2.jpg"; final String refVideo = "https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_tea_video1.mp4"; final String refAudio = "https://ark-project.tos-cn-beijing.volces.com/doc_audio/r2v_tea_audio1.mp3"; // Output video parameters final boolean generateAudio = true; final String videoRatio = "16:9"; final long videoDuration = 11L; final boolean showWatermark = true; System.out.println("----- create request -----"); // Build request content List contents = new ArrayList<>(); // 1. Text prompt contents.add(Content.builder() .type("text") .text(prompt) .build()); // 2. Reference image 1 contents.add(Content.builder() .type("image_url") .imageUrl(CreateContentGenerationTaskRequest.ImageUrl.builder() .url(refImage1) .build()) .role("reference_image") .build()); // 3. Reference image 2 contents.add(Content.builder() .type("image_url") .imageUrl(CreateContentGenerationTaskRequest.ImageUrl.builder() .url(refImage2) .build()) .role("reference_image") .build()); // 4. Reference video contents.add(Content.builder() .type("video_url") .videoUrl(CreateContentGenerationTaskRequest.VideoUrl.builder() .url(refVideo) .build()) .role("reference_video") .build()); // 5. Reference audio contents.add(Content.builder() .type("audio_url") .audioUrl(CreateContentGenerationTaskRequest.AudioUrl.builder() .url(refAudio) .build()) .role("reference_audio") .build()); // Create video generation task CreateContentGenerationTaskRequest createRequest = CreateContentGenerationTaskRequest.builder() .generateAudio(generateAudio) .model(modelId) .content(contents) .ratio(videoRatio) .duration(videoDuration) .watermark(showWatermark) .build(); CreateContentGenerationTaskResult createResult = service.createContentGenerationTask(createRequest); System.out.println("Task Created: " + createResult); // Get task details and poll status String taskId = createResult.getId(); pollTaskStatus(taskId); } / Poll task status @param taskId Task ID / private static void pollTaskStatus(String taskId) { GetContentGenerationTaskRequest getRequest = GetContentGenerationTaskRequest.builder() .taskId(taskId) .build(); System.out.println("----- polling task status -----"); try { while (true) { 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 -----"); if (getResponse.getError() != null) { System.out.println("Error: " + getResponse.getError().getMessage()); } break; } else { System.out.printf("Current status: %s, Retrying in 10 seconds...%n", status); TimeUnit.SECONDS.sleep(10); } } } catch (InterruptedException ie) { Thread.currentThread().interrupt(); System.err.println("Polling interrupted"); } catch (Exception e) { System.err.println("Error occurred: " + e.getMessage()); } finally { service.shutdownExecutor(); } } } 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() { // Initialize Ark client client := arkruntime.NewClientWithApiKey( os.Getenv("ARK_API_KEY"), // The base URL for model invocation arkruntime.WithBaseUrl("https://ark.cn-beijing.volces.com/api/v3"), ) ctx := context.Background() // Model ID modelID := "doubao-seedance-2-0-260128" // Text prompt prompt := "全程使用视频1的第一视角构图,全程使用音频1作为背景音乐。第一人称视角果茶宣传广告,seedance牌「苹苹安安」苹果果茶限定款;" + "首帧为图片1,你的手摘下一颗带晨露的阿克苏红苹果,轻脆的苹果碰撞声;" + "2-4 秒:快速切镜,你的手将苹果块投入雪克杯,加入冰块与茶底,用力摇晃,冰块碰撞声与摇晃声卡点轻快鼓点,背景音:「鲜切现摇」;" + "4-6 秒:第一人称成品特写,分层果茶倒入透明杯,你的手轻挤奶盖在顶部铺展,在杯身贴上粉红包标,镜头拉近看奶盖与果茶的分层纹理;" + "6-8 秒:第一人称手持举杯,你将图片2中的果茶举到镜头前(模拟递到观众面前的视角),杯身标签清晰可见,背景音「来一口鲜爽」,尾帧定格为图片2。" + "背景声音统一为女生音色。" // Example resource URLs refImage1 := "https://ark-project.tos-cn-beijing.volces.com/doc_image/r2v_tea_pic1.jpg" refImage2 := "https://ark-project.tos-cn-beijing.volces.com/doc_image/r2v_tea_pic2.jpg" refVideo := "https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_tea_video1.mp4" refAudio := "https://ark-project.tos-cn-beijing.volces.com/doc_audio/r2v_tea_audio1.mp3" // Output video parameters generateAudio := true videoRatio := "16:9" videoDuration := int64(11) showWatermark := true // 1. Create video generation task fmt.Println("----- create request -----") createReq := model.CreateContentGenerationTaskRequest{ Model: modelID, GenerateAudio: volcengine.Bool(generateAudio), Ratio: volcengine.String(videoRatio), Duration: volcengine.Int64(videoDuration), Watermark: volcengine.Bool(showWatermark), Content: []*model.CreateContentGenerationContentItem{ { Type: model.ContentGenerationContentItemTypeText, Text: volcengine.String(prompt), }, { Type: model.ContentGenerationContentItemType("image_url"), ImageURL: &model.ImageURL{ URL: refImage1, }, Role: volcengine.String("reference_image"), }, { Type: model.ContentGenerationContentItemType("image_url"), ImageURL: &model.ImageURL{ URL: refImage2, }, Role: volcengine.String("reference_image"), }, { Type: model.ContentGenerationContentItemType("video_url"), VideoURL: &model.VideoUrl{ Url: refVideo, }, Role: volcengine.String("reference_video"), }, { Type: model.ContentGenerationContentItemType("audio_url"), AudioURL: &model.AudioUrl{ Url: refAudio, }, Role: volcengine.String("reference_audio"), }, }, } createResp, err := client.CreateContentG...