|
|
|
@ -125,7 +125,7 @@ def encode_video_to_base64(video_path: str):
|
|
|
|
|
# 处理视频请求
|
|
|
|
|
async def handle_video_request(background_tasks: BackgroundTasks, image: UploadFile, audio_type: str):
|
|
|
|
|
if not is_allowed_file(image.filename):
|
|
|
|
|
return JSONResponse(status_code=400, content={"code": 500, "message": "文件类型无效。只允许图像文件(png, jpg, jpeg, gif)。", "uid": "", "video": ""})
|
|
|
|
|
return JSONResponse(status_code=400, content={"code": 500, "message": "Invalid file type. Only images (png, jpg, jpeg, gif) are allowed.", "uid": "", "video": ""})
|
|
|
|
|
|
|
|
|
|
img_path = os.path.join(audio_type, image.filename)
|
|
|
|
|
save_upload_file(image, img_path)
|
|
|
|
@ -135,17 +135,17 @@ async def handle_video_request(background_tasks: BackgroundTasks, image: UploadF
|
|
|
|
|
existing_video = check_existing_video(image_md5, record_file)
|
|
|
|
|
if existing_video:
|
|
|
|
|
video_base64 = encode_video_to_base64(existing_video)
|
|
|
|
|
return JSONResponse(content={"code": 500, "message": "视频检索成功。", "uid": "", "video": video_base64})
|
|
|
|
|
return JSONResponse(content={"code": 500, "message": "Video retrieved successfully.", "uid": "", "video": video_base64})
|
|
|
|
|
|
|
|
|
|
if image_md5 in md5_to_uid:
|
|
|
|
|
uid = md5_to_uid[image_md5]
|
|
|
|
|
return JSONResponse(content={"code": 200, "message": "视频正在生成,请稍后再试。", "uid": uid, "video": ""})
|
|
|
|
|
return JSONResponse(content={"code": 200, "message": "Video is being generated, please check back later.", "uid": uid, "video": ""})
|
|
|
|
|
|
|
|
|
|
uid = str(uuid.uuid4())
|
|
|
|
|
tasks[uid] = {'status': 'processing'}
|
|
|
|
|
md5_to_uid[image_md5] = uid
|
|
|
|
|
background_tasks.add_task(process_video, uid, image_md5, img_path, audio_type)
|
|
|
|
|
return JSONResponse(content={"code": 200, "message": "视频正在生成,请稍后再试。", "uid": uid, "video": ""})
|
|
|
|
|
return JSONResponse(content={"code": 200, "message": "Video is being generated, please check back later.", "uid": uid, "video": ""})
|
|
|
|
|
|
|
|
|
|
# 动态视频生成端点
|
|
|
|
|
@app.post("/dynamic-video")
|
|
|
|
@ -162,14 +162,14 @@ async def generate_silent_video(background_tasks: BackgroundTasks, image: Upload
|
|
|
|
|
async def get_status(uid: str):
|
|
|
|
|
task = tasks.get(uid)
|
|
|
|
|
if not task:
|
|
|
|
|
return JSONResponse(status_code=404, content={"code": 500, "status": "not found", "message": "任务未找到", "video": ""})
|
|
|
|
|
return JSONResponse(status_code=404, content={"code": 500, "status": "not found", "message": "Task not found", "video": ""})
|
|
|
|
|
if task['status'] == 'completed':
|
|
|
|
|
video_base64 = encode_video_to_base64(task['video_path'])
|
|
|
|
|
return JSONResponse(content={"code": 200, "status": task['status'], "message": "视频生成完成。", "video": video_base64})
|
|
|
|
|
return JSONResponse(content={"code": 200, "status": task['status'], "message": "Video generation completed.", "video": video_base64})
|
|
|
|
|
elif task['status'] == 'failed':
|
|
|
|
|
return JSONResponse(status_code=500, content={"code": 500, "status": task['status'], "message": "视频生成失败", "video": ""})
|
|
|
|
|
return JSONResponse(status_code=500, content={"code": 500, "status": task['status'], "message": "Video generation failed", "video": ""})
|
|
|
|
|
else:
|
|
|
|
|
return JSONResponse(content={"code": 200, "status": task['status'], "message": "视频正在生成。", "video": ""})
|
|
|
|
|
return JSONResponse(content={"code": 200, "status": task['status'], "message": "Video is being generated.", "video": ""})
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
import uvicorn
|
|
|
|
|