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