语音转文本接口,bgm路径修复

This commit is contained in:
2025-10-25 13:06:17 +08:00
parent e4339a5b91
commit d1b4fb6be0
12 changed files with 423 additions and 172 deletions
+16 -3
View File
@@ -2,6 +2,8 @@ import fs from "fs";
import OpenAI from "openai";
import prompt from "./prompt.md";
import { prisma } from "@/lib/prisma";
import { downloadFile } from "@/lib/minio";
import { extractAudio } from "../media";
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
@@ -13,6 +15,7 @@ async function transcriptAudio(audio: Buffer | string) {
audio = fs.readFileSync(audio);
}
const base64Audio = Buffer.from(audio).toString("base64");
const response = await client.chat.completions.create({
model: "gemini-2.5-flash-lite",
messages: [
@@ -27,7 +30,7 @@ async function transcriptAudio(audio: Buffer | string) {
type: "input_audio",
input_audio: {
data: base64Audio,
format: "wav",
format: "mp3",
},
},
],
@@ -36,14 +39,24 @@ async function transcriptAudio(audio: Buffer | string) {
});
console.log(response.choices[0].message.content);
return response.choices[0].message.content;
}
async function transcriptAweme(awemeId: string) {
export async function transcriptAweme(awemeId: string) {
const aweme = await prisma.video.findUnique({
where: { aweme_id: awemeId },
});
if (!aweme) {
throw new Error("Aweme not found or aweme is not a video post");
}
const vPath = aweme.video_url
const buffer = await downloadFile(vPath);
const audioDat = await extractAudio(buffer, { format: "mp3", bitrateKbps: 96 });
if (!audioDat || !audioDat.buffer) {
throw new Error("Failed to extract audio from video");
}
return await transcriptAudio(audioDat.buffer);
}
+19
View File
@@ -0,0 +1,19 @@
import { NextRequest, NextResponse } from 'next/server';
import { prisma } from '@/lib/prisma';
import type { FeedItem, FeedResponse } from '@/app/types/feed';
import { getFileUrl } from '@/lib/minio';
import { transcriptAweme } from '.';
// Contract
// Inputs: search params { before?: ISOString, limit?: number }
// Output: { items: FeedItem[], nextCursor: ISOString | null }
export async function GET(req: NextRequest) {
const { searchParams } = new URL(req.url)
const awemeId = searchParams.get('awemeId');
if (!awemeId) {
return NextResponse.json({ error: "Missing awemeId parameter" }, { status: 400 });
}
const script = await transcriptAweme(awemeId);
return NextResponse.json(script);
}