mirror of
https://github.com/linyqh/NarratoAI.git
synced 2025-12-12 11:22:51 +00:00
94 lines
2.8 KiB
Python
94 lines
2.8 KiB
Python
from fastapi import Request, File, UploadFile
|
|
import os
|
|
from app.controllers.v1.base import new_router
|
|
from app.models.schema import (
|
|
VideoScriptResponse,
|
|
VideoScriptRequest,
|
|
VideoTermsResponse,
|
|
VideoTermsRequest,
|
|
VideoTranscriptionRequest,
|
|
VideoTranscriptionResponse,
|
|
)
|
|
from app.services import llm
|
|
from app.utils import utils
|
|
from app.config import config
|
|
|
|
# 认证依赖项
|
|
# router = new_router(dependencies=[Depends(base.verify_token)])
|
|
router = new_router()
|
|
|
|
# 定义上传目录
|
|
UPLOAD_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), "uploads")
|
|
|
|
@router.post(
|
|
"/scripts",
|
|
response_model=VideoScriptResponse,
|
|
summary="Create a script for the video",
|
|
)
|
|
def generate_video_script(request: Request, body: VideoScriptRequest):
|
|
video_script = llm.generate_script(
|
|
video_subject=body.video_subject,
|
|
language=body.video_language,
|
|
paragraph_number=body.paragraph_number,
|
|
)
|
|
response = {"video_script": video_script}
|
|
return utils.get_response(200, response)
|
|
|
|
|
|
@router.post(
|
|
"/terms",
|
|
response_model=VideoTermsResponse,
|
|
summary="Generate video terms based on the video script",
|
|
)
|
|
def generate_video_terms(request: Request, body: VideoTermsRequest):
|
|
video_terms = llm.generate_terms(
|
|
video_subject=body.video_subject,
|
|
video_script=body.video_script,
|
|
amount=body.amount,
|
|
)
|
|
response = {"video_terms": video_terms}
|
|
return utils.get_response(200, response)
|
|
|
|
|
|
@router.post(
|
|
"/transcription",
|
|
response_model=VideoTranscriptionResponse,
|
|
summary="Transcribe video content using Gemini"
|
|
)
|
|
async def transcribe_video(
|
|
request: Request,
|
|
video_name: str,
|
|
language: str = "zh-CN",
|
|
video_file: UploadFile = File(...)
|
|
):
|
|
"""
|
|
使用 Gemini 转录视频内容,包括时间戳、画面描述和语音内容
|
|
|
|
Args:
|
|
video_name: 视频名称
|
|
language: 语言代码,默认zh-CN
|
|
video_file: 上传的视频文件
|
|
"""
|
|
# 创建临时目录用于存储上传的视频
|
|
os.makedirs(UPLOAD_DIR, exist_ok=True)
|
|
|
|
# 保存上传的视频文件
|
|
video_path = os.path.join(UPLOAD_DIR, video_file.filename)
|
|
with open(video_path, "wb") as buffer:
|
|
content = await video_file.read()
|
|
buffer.write(content)
|
|
|
|
try:
|
|
transcription = llm.gemini_video_transcription(
|
|
video_name=video_name,
|
|
video_path=video_path,
|
|
language=language,
|
|
llm_provider_video=config.app.get("video_llm_provider", "gemini")
|
|
)
|
|
response = {"transcription": transcription}
|
|
return utils.get_response(200, response)
|
|
finally:
|
|
# 处理完成后删除临时文件
|
|
if os.path.exists(video_path):
|
|
os.remove(video_path)
|