本指南将带你以最快路径使用 @youka/sdk 将原始音频文件生成渲染好的卡拉OK视频。
开始之前
- Node.js 20 或更高版本
- 在
YOUKA_API_KEY 中设置 Youka API key(在 online.youka.io/account 的 API keys 下创建)
- 本地音频文件(
./song.mp3)或远程 URL
创建、等待、导出
import { YoukaClient, YoukaRequestError, YoukaTaskError } from "@youka/sdk";
const client = new YoukaClient({
apiKey: process.env.YOUKA_API_KEY!,
});
async function main() {
// 1. 从本地文件创建项目
const projectOperation = await client.projects.create({
source: { type: "path", path: "./song.mp3" },
lyricsSource: { type: "transcribe" },
});
// 2. 等待分轨和歌词对齐完成
const { project } = await client.projects.wait(projectOperation);
console.log("Project ready:", project.id, project.title);
// 3. 发起导出
const exportOperation = await client.exports.create(project.id, {
resolution: "1080p",
quality: "high",
});
// 4. 等待导出完成
const finishedExport = await client.exports.wait(exportOperation);
await client.exports.download(finishedExport, {
output: "./exports",
});
console.log("Export ready:", finishedExport.url);
}
main().catch((error) => {
if (error instanceof YoukaRequestError) {
console.error("Request failed:", error.code, error.status, error.message);
process.exit(1);
}
if (error instanceof YoukaTaskError) {
console.error("Task failed:", error.code, error.status, error.message);
process.exit(1);
}
throw error;
});
client.projects.create() 会为 path、bytes 和 url
类型的 source 处理上传。若需要更底层的上传控制,请使用 client.uploads.*。
三种 source 类型
const operation = await client.projects.create({
source: { type: "path", path: "./song.mp3" },
});
const fileBuffer = new Uint8Array([/* audio bytes */]);
const operation = await client.projects.create({
source: {
type: "bytes",
data: fileBuffer,
filename: "song.mp3",
},
});
const operation = await client.projects.create({
source: {
type: "url",
url: "https://example.com/song.mp4",
},
});
接下来