视频生成
RavenSaaS 使用 ai-sdk 作为基础库,结合自定义的 Provider,支持了市面上主流的视频生成模型。
使用 Kling AI 的视频模型
需要先在 Kling AI 充值 Video Generation API,并 创建 API Key。
1. 设置环境变量
.env.development
1KLING_ACCESS_KEY = "xxx"
2KLING_SECRET_KEY = "xxx"
2. 生成视频
注意
这里使用的是 RavenSaaS 自定义 generateVideo 方法,和自定义的 Provider:import '{ kling }' from "@/aisdk/kling";,跟 @ai-sdk 下的 Provider 导入路径有差异。
providerOptions.kling 支持的参数,参考 Kling Text to Video API 文档
app/api/demo/gen-video/route.ts
1import { generateVideo } from "@/aisdk";
2import { kling } from "@/aisdk/kling";
3
4const prompt = "a beautiful girl running with 2 cats";
5const model = "kling-v1-6";
6
7const videoModel = kling.video(model);
8const providerOptions = {
9 kling: {
10 mode: "std",
11 duration: 5,
12 },
13};
14
15const { videos, warnings } = await generateVideo({
16 model: videoModel,
17 prompt: prompt,
18 n: 1,
19 providerOptions,
20});
生成时间说明
kling-v1-6 模型生成 5s 的视频,大概需要 4 分钟。kling-v1 会更久一点。
generateVideo 方法默认同步生成视频,你需要等待视频生成完成,才能断开与服务端的连接。
3. 预览效果
Kling AI 视频生成效果示例
保存视频到本地文件
通过 generateVideo 生成的视频,是 base64 编码的字符串数组。
你可以参考下面的代码,将视频内容保存到本地文件。
app/api/demo/gen-video/route.ts
1const { videos, warnings } = await generateVideo({
2 model: videoModel,
3 prompt: prompt,
4 n: 1,
5 providerOptions,
6});
7
8if (warnings.length > 0) {
9 console.log("gen videos warnings:", provider, warnings);
10 return respErr("gen videos failed");
11}
12
13const batch = getUuid();
14
15const processedImages = await Promise.all(
16 videos.map(async (video, index) => {
17 const fileName = `${provider}_video_${batch}_${index}.mp4`;
18 const filePath = path.join(process.cwd(), ".tmp", fileName);
19
20 const buffer = Buffer.from(video.base64, "base64");
21 await writeFile(filePath, buffer);
22
23 return {
24 provider,
25 fileName,
26 filePath,
27 };
28 })
29);