AI 集成视频生成

视频生成

ShipAny 使用 ai-sdk 作为基础库,结合自定义的 Provider,支持了市面上主流的视频生成模型。

使用 Kling AI 的视频模型

需要先在 Kling AI 充值 Video Generation API,并 创建 API Key

  1. 设置环境变量
.env.development
KLING_ACCESS_KEY = "xxx"
KLING_SECRET_KEY = "xxx"
  1. 生成视频

注意,这里使用的是 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 方法默认同步生成视频,你需要等待视频生成完成,才能断开与服务端的连接。

  1. 预览效果

保存视频到本地文件

通过 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