AI视频预览
下面的视频是即梦AI生成,提示词为"千军万马",分辨率为"720P",本文章将介绍如何使用nodejs对接即梦AI的API生成该视频。

准备工作
登录火山引擎的智能视觉控制台开通即梦AI的API服务
智能视觉https://console.volcengine.com/ai/overview
按照下面步骤开通AP服务和密钥获取

实名认证后,选择左边菜单的即梦AI,选择"即梦AI-视频生成3.0 720P",点击开通服务。可根据不同的需求选择对应的服务。

这里用于代码演示,选择免费试用即可,API的调用限制为50s一次

开启服务后创建密钥 ,用于请求云服务API的凭证,新建密钥后下载为txt文件,后面代码需要访问控制-火山引擎https://console.volcengine.com/iam/keymanage
开通服务后可查看对应的开发文档进行开发,
即梦AI-视频生成3.0 720P-接口文档--即梦AI-火山引擎https://www.volcengine.com/docs/85621/1792710
代码环境初始化
本文章使用nodejs对接即梦AI的API,故使用nodejs环境进行开发。新建一个空白文件夹,文件名为英文名称(不包含中文),进入文件夹,使用下面命令进行项目初始化。如果文件夹名称包含中文,则将命令的 "-y" 去掉。
bash
npm init -y
下载axios工具库,该工具库可以进行http请求:
bash
npm install axios
下载根据密钥获取火山引擎签名的node SDK 工具库
bash
npm install -S @volcengine/openapi
初始化项目后可创建index.js进行代码编写。
获取签名
javascript
const axios = require("axios");
const { Signer } = require("@volcengine/openapi");
const accessKeyId = "*********************************";
const secretKey =
"**************************************************";
const openApiRequestData = {
region: "cn-north-1",
method: "POST",
params: {
Action: "CVSync2AsyncSubmitTask", //固定值
Version: "2022-08-31", //固定值
},
headers: {
Region: "cn-north-1",
Service: "cv", // 服务标识
"Content-Type": "application/json",
},
body: JSON.stringify({
req_key: "jimeng_t2v_v30",
prompt: "千军万马",
seed: -1,
frames: 121,
aspect_ratio: "16:9",
}),
};
代码解释
依赖导入
- 使用
axios
进行HTTP请求 - 从
@volcengine/openapi
导入Signer
用于请求签名
认证信息
accessKeyId
和secretKey
是火山引擎API的访问凭证- 实际应用中应通过环境变量或安全存储获取,避免硬编码
请求参数配置
region
指定服务区域为华北1(cn-north-1)method
定义HTTP方法为POSTparams
包含API的接口名和版本号headers
设置必要请求头,包括服务标识和内容类型body
包含实际任务参数,转换为JSON字符串格式
|--------------|--------|-----------|--------------------------------------------------------------------------|
| 参数 | 类型 | 可选/必选 | 说明 |
| req_key | string | 必选 | 服务标识 取固定值:jimeng_t2v_v30 |
| prompt | string | 必选 | 用于生成视频的提示词 ,中英文均可输入。建议在400字以内,不超过800字,prompt过长有概率出现效果异常或不生效 |
| seed | int | 可选 | 随机种子,作为确定扩散初始状态的基础,默认-1(随机)。若随机种子为相同正整数且其他参数均一致,则生成视频极大概率效果一致 默认值:-1 |
| frames | int | 可选 | 生成的总帧数(帧数 = 24 * n + 1,其中n为秒数,支持5s、10s) 可选取值:[121, 241] 默认值:121 |
| aspect_ratio | string | 可选 | 生成视频的长宽比 可选取值:["16:9", "4:3", "1:1", "3:4", "9:16", "21:9"] 默认值:"16:9" |
javascript
// 签名
const signer = new Signer(openApiRequestData, "cv");
signer.addAuthorization({ accessKeyId, secretKey });
console.log(openApiRequestData.headers);
代码解释:
- 创建
Signer
实例时传入请求数据和业务标识 addAuthorization
方法自动计算签名并添加到请求头- 签名过程会覆盖原始headers中的Authorization字段
- 最终输出包含完整认证信息的请求头
上面代码运行后的结果:
javascript
{
Region: 'cn-north-1',
Service: 'cv',
'Content-Type': 'application/json',
'X-Date': '20250908T074921Z',
'X-Content-Sha256': '86f8dc6c79dab074a37e0690416157fcb6683c27352749ee19be33803d0e8',
Authorization: 'HMAC-SHA256 Credential=AKLTNjk4ODljOGY2YmMxNDE2ZDlNDRhNmQwMliNTUzMjY/20250908/cn-north-1/cv/request, SignedHeaders=region;service;x-content-sha256;x-date, Signature=a99240453083c68dca2fbc58cd299e67959bd2eee4cac283a672ba29d3883a'
}
提交任务
请求地址为:
bash
https://visual.volcengineapi.com?Action=CVSync2AsyncSubmitTask&Version=2022-08-31
url的参数说明如下:
|---------|--------|-----------|-----------------------------------|
| 参数 | 类型 | 可选/必选 | 说明 |
| Action | string | 必选 | 接口名,取值:CVSync2AsyncSubmitTask |
| Version | string | 必选 | 版本号,取值:2022-08-31 |
代码示例
javascript
const submitUrl = "https://visual.volcengineapi.com";
axios
.post(submitUrl, openApiRequestData.body, {
headers: openApiRequestData.headers, //添加签名
params: openApiRequestData.params, // 自动附加Action/Version到URL
})
.then((res) => console.log("Success:", res.data))
.catch((err) => {
console.error("Status:", err.response?.status);
console.error("Error:", err.response?.data);
});
关键参数说明
submitUrl
:指定API请求的目标地址openApiRequestData.body
:包含POST请求的主体数据openApiRequestData.headers
:设置HTTP请求头信息openApiRequestData.params
:用于URL参数自动拼接
上面代码运行后的结果:
javascript
Success: {
code: 10000,
data: { task_id: '2830050130308220853' }, //任务ID,用于查询结果
message: 'Success',
request_id: '202509081556224E83C7B3AA67CE2F810A',
status: 10000,
time_elapsed: '48.281867ms'
}
查询任务
请求地址为:
bash
https://visual.volcengineapi.com?Action=CVSync2AsyncGetResult&Version=2022-08-31
url的参数说明如下:
|---------|--------|-----------|-----------------------------------|
| 参数 | 类型 | 可选/必选 | 说明 |
| Action | string | 必选 | 接口名,固定值:CVSync2AsyncGetResult |
| Version | string | 必选 | 版本号,固定值:2022-08-31 |
代码示例:
查询任务的代码和提交任务的代码类似,差别在于openApiRequestData 里params的接口名和body里面需要加上提交任务时获取的任务id。
javascript
const axios = require("axios");
const { Signer } = require("@volcengine/openapi");
const accessKeyId = "************************";
const secretKey =
"**********************************************";
const openApiRequestData = {
region: "cn-north-1",
method: "POST",
params: {
Action: "CVSync2AsyncGetResult", //查询任务的接口名
Version: "2022-08-31",
},
headers: {
Region: "cn-north-1",
Service: "cv", // 服务标识
"Content-Type": "application/json",
},
body: JSON.stringify({
req_key: "jimeng_t2v_v30",
task_id: "2830050130308220853", //提交任务获取的id
}),
};
// 签名
const signer = new Signer(openApiRequestData, "cv");
signer.addAuthorization({ accessKeyId, secretKey });
console.log(openApiRequestData.headers);
// 提交任务
const submitUrl = "https://visual.volcengineapi.com";
axios
.post(submitUrl, openApiRequestData.body, {
headers: openApiRequestData.headers,
params: openApiRequestData.params,
})
.then((res) => console.log("Success:", res.data))
.catch((err) => {
console.error("Status:", err.response?.status);
console.error("Error:", err.response?.data);
});
body参数说明:
|---------|--------|-----------|------------------------------|
| 参数 | 类型 | 可选/必选 | 说明 |
| req_key | string | 必选 | 服务标识 取固定值:jimeng_t2v_v30 |
| task_id | string | 必选 | 任务ID,此字段的取值为提交任务接口的返回 |
运行后的结果:
javascript
Success: {
code: 10000,
data: {
status: 'done',
video_url: 'https://v9-vvecloud.yangyi08.com/9a3020e1e4d8336e26d2fc175b6be2de/68be9c78/video/tos/cn/tos-cn-v-242bcc/ocorCFDy1KAdtIA3GeEIpwBUjA4gD7ApvofsPF/?a=7073&ch=0&cr=0&dr=0&er=0&lr=default&cd=0%7C0%7C0%7C0&br=3723&bt=3723&cs=0&ds=3&ft=xztlUQhhe6BMyq-o_nkJD12Nzj&mime_type=video_mp4&qs=13&rc=Mzptd3c5cmc7NTgzNGczM0BpMzptd3c5cmc7NTgzNGczM0BvbDNuMmRzbHNhLS1kXi9zYSNvbDNuMmRzbHNhLS1kXi9zcw%3D%3D&btag=80000e00008000&dy_q=1757318755&l=20250908160555A820AE8159D39C32CB2C'
},
message: 'Success',
request_id: '20250908160555A820AE8159D39C32CB2C',
status: 10000,
time_elapsed: '182.13611ms'
}
运行结果的参数说明:
|-----------|--------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 参数名 | 类型 | |
| video_url | string | 生成的视频URL |
| status | string | 任务执行状态 * in_queue:任务已提交 * generating:任务已被消费,处理中 * done:处理完成,成功或者失败,可根据外层code&message进行判断 * not_found:任务未找到,可能原因是无此任务或任务已过期(12小时) * expired:任务已过期,请尝试重新提交任务请求 |