图生视频
更新时间
6 天前
接口描述
提交图片生成视频任务。
请求
WARNING
为了让 DMXAPI 区分模型厂商,请在原 kling API 的 endpoint 基础上添加 /kling
路径,组合后的请求地址如下所示。
请求方式: POST
请求地址:
https://{api_url}/kling/v1/videos/image2video
请求参数
TIP
通过合理使用尾帧控制,可以创建更有预见性和控制力的视频生成效果,特别适合需要明确起止状态的视频动画制作。
字段 | 类型 | 必填 | 默认值 | 描述 |
---|---|---|---|---|
model_name | string | 可选 | kling-v1 | 模型名称。枚举值:kling-v1, kling-v1-5, kling-v1-6 |
image | string | 必须 | 空 | 参考图像。支持图片Base64编码或URL,格式支持.jpg/.jpeg/.png,文件大小≤10MB,分辨率≥300*300px,宽高比在1:2.5~2.5:1之间 |
image_tail | string | 可选 | 空 | 参考图像尾帧控制。格式要求同image。与image至少二选一 |
prompt | string | 可选 | 无 | 正向文本提示词。不超过2500个字符 |
negative_prompt | string | 可选 | 空 | 负向文本提示词。不超过2500个字符 |
cfg_scale | float | 可选 | 0.5 | 生成视频的自由度。取值范围[0, 1],值越大与提示词相关性越强 |
mode | string | 可选 | std | 生成视频模式。枚举值:std(标准模式),pro(专家模式) |
static_mask | string | 可选 | 无 | 静态笔刷涂抹区域。格式要求同image,长宽比须与输入图片相同 |
dynamic_masks | array | 可选 | 无 | 动态笔刷配置列表。最多6组 |
dynamic_masks.mask | string | 可选 | 无 | 动态笔刷涂抹区域。格式要求同image,长宽比须与输入图片相同 |
dynamic_masks.trajectories | array | 可选 | 无 | 运动轨迹坐标序列。5s视频坐标数范围[2,77] |
dynamic_masks.trajectories.x | int | 可选 | 无 | 轨迹点横坐标(以图片左下角为原点) |
dynamic_masks.trajectories.y | int | 可选 | 无 | 轨迹点纵坐标(以图片左下角为原点) |
camera_control | object | 可选 | 空 | 控制摄像机运动的协议 |
camera_control.type | string | 可选 | 无 | 预定义运镜类型。枚举值:simple, down_back, forward_up, right_turn_forward, left_turn_forward |
camera_control.config | object | 可选 | 无 | 摄像机运动配置。type为simple时必填 |
camera_control.config.horizontal | float | 可选 | 无 | 水平运镜。范围[-10,10],负左正右 |
camera_control.config.vertical | float | 可选 | 无 | 垂直运镜。范围[-10,10],负下正上 |
camera_control.config.pan | float | 可选 | 无 | 水平摇镜。范围[-10,10],负左正右 |
camera_control.config.tilt | float | 可选 | 无 | 垂直摇镜。范围[-10,10],负下正上 |
camera_control.config.roll | float | 可选 | 无 | 旋转运镜。范围[-10,10],负逆时针正顺时针 |
camera_control.config.zoom | float | 可选 | 无 | 变焦。范围[-10,10],负拉远正拉近 |
duration | string | 可选 | 5 | 生成视频时长(秒)。枚举值:5,10 |
callback_url | string | 可选 | 无 | 任务结果回调通知地址 |
external_task_id | string | 可选 | 无 | 自定义任务ID。单用户下需唯一 |
代码示例
深色背景为可以修改的参数,非必选参数已经注释,可以按照自己的需求启用。
py
import http.client
import json
import base64
# 配置全局变量
API_URL = "www.dmxapi.cn" # API 节点
DMX_API_TOKEN = "sk-XXXXXXXXXXXXX" # API 密钥
# 创建HTTP连接对象,用于后续所有API请求
conn = http.client.HTTPSConnection(API_URL)
# 将图片转换为 base64 编码形式
def get_image_base64(image_path):
"""将图片转换为 base64 编码形式
输入参数:
image_path: 图片路径
返回参数:
base64 编码后的图片字符串
"""
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
def kling_image_generate_video():
"""调用 Kling AI 的视频生成API,提交一个视频生成任务
返回值:
task_id: 生成任务的唯一标识符,用于后续查询任务结果
"""
# 构建API请求体,包含所有视频生成参数
payload = json.dumps({
# 基础参数
"model_name": "kling-v1-6", # 模型版本 kling-v1, kling-v1-5, kling-v1-6
"image": get_image_base64("/Users/dmxapi/Desktop/dmx.png"), # 起始图片
# "image_tail": get_image_base64("end.jpg"), # 结束图片
"prompt": "生成图中的几只动物走路的场景", # 正向提示词
# "negative_prompt": "模糊, 扭曲", # 负向提示词
# 生成控制参数
# "cfg_scale": 0.5, # [可选] 生成视频的自由度,取值范围:[0, 1]
# "mode": "std", # [可选] 生成模式:std(标准模式) 或 pro(专家模式)
# "duration": "5", # [可选] 视频时长(秒):5 或 10
# 摄像机运动控制
# "camera_control": {
# "type": "forward_up", # 预定义运镜类型
# 如果使用 simple 类型,需要配置以下参数(六选一)
# "config": {
# "horizontal": 0, # 水平运镜 [-10, 10]
# "vertical": 0, # 垂直运镜 [-10, 10]
# "pan": 5, # 水平摇镜 [-10, 10]
# "tilt": 0, # 垂直摇镜 [-10, 10]
# "roll": 0, # 旋转运镜 [-10, 10]
# "zoom": 0 # 变焦 [-10, 10]
# }
# },
# # 静态笔刷示例
# "static_mask": get_image_base64("mask.png"), # 静态区域遮罩
# # 动态笔刷示例
# "dynamic_masks": [{
# "mask": get_image_base64("mask.png"), # 动态区域遮罩
# "trajectories": [
# {"x": 100, "y": 100}, # 起始点
# {"x": 150, "y": 200}, # 中间点
# {"x": 200, "y": 300} # 结束点
# ]
# }],
# # 任务控制
# "callback_url": "https://your-server.com/webhook", # 回调地址
# "external_task_id": "custom_task_001" # 自定义任务ID
})
# 构建请求头,包含认证信息和内容类型
headers = {
'Authorization': f'Bearer {DMX_API_TOKEN}', # 使用Bearer令牌认证方式
'Content-Type': 'application/json' # 指定请求体格式为JSON
}
# 发送POST请求,路径为视频生成API端点
conn.request("POST", "/kling/v1/videos/image2video", payload, headers)
# 获取API响应并解析JSON数据
res = conn.getresponse()
json_data = json.loads(res.read().decode("utf-8"))
# print(json_data)
if json_data['code'] == 0:
# 成功则返回提交的任务 id
return json_data['data']['task_id']
else:
# 失败则返回错误信息
return json_data['message']
if __name__ == "__main__":
# 提交视频生成任务
print(kling_image_generate_video())
响应参数示例
业务码的含义请参考 业务码。
{
'code': 0, // 业务码 0 表示成功
'message': 'SUCCEED', // 消息
'request_id': 'CjhDaWgU7GAAAAAAAb1QfA', // 请求ID
'data': {
'task_id': 'CjhDaWgU7GAAAAAAAb1QfA', // 任务ID
'task_status': 'submitted', // 任务状态
'created_at': 1746771840640, // 创建时间
'updated_at': 1746771840640 // 更新时间
}
}