-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.py
63 lines (52 loc) · 2.18 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from fastapi import FastAPI, HTTPException, BackgroundTasks
from fastapi.responses import FileResponse
from fastapi.middleware.cors import CORSMiddleware
import os
from video_generator.TTS import tts
from video_generator.video_audio import merge_videos_with_duration
from video_generator.video_pixabay import pixabay
from video_generator.video_pexels import pexels_api
from video_generator.video_caption import add_caption
from video_generator.keyword_extraction import extract_keywords, categorize_script
import requests
app = FastAPI()
# CORS 설정
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# 비디오 생성 작업을 비동기로 실행할 함수
async def process_video(text: str, tag: str, id: str):
tts(text)
keywords = extract_keywords(text)
category = categorize_script(text)
paths = pixabay(keywords, category)
merge_videos_with_duration(paths)
url = add_caption(text, tag, id)
data = {
"articleId": id,
"videoUrl": f"https://widely-select-polliwog.ngrok-free.app/{url}"
}
headers = {
'ngrok-skip-browser-warning': '69420',
}
response = requests.post("https://purely-funky-ladybug.ngrok-free.app/save/video", data=data, headers=headers)
print(response.status_code)
# POST 요청 처리 (비디오 제작 요청 및 백그라운드 처리)
@app.post("/movie")
async def create_movie(id: str, text: str, tag: str, background_tasks: BackgroundTasks):
# 비디오 제작을 백그라운드에서 처리하도록 설정
background_tasks.add_task(process_video, text, tag, id)
return {"message": "Video creation in progress", "id": id}
# GET 요청 처리 (비디오 상태 및 파일 반환)
@app.get("/videos/{tag}/{filename}", response_class=FileResponse)
async def serve_video(tag: str, filename: str):
UPLOAD_DIRECTORY = f"videos/{tag}"
file_path = os.path.join(UPLOAD_DIRECTORY, filename) # 파일 경로 생성
if os.path.exists(file_path):
return FileResponse(file_path) # 파일을 응답으로 반환
else:
return {"error": "File not found"} # 파일이 없을 경우 에러 반환