File size: 2,233 Bytes
b6093b0
 
 
 
 
3b25c9f
b6093b0
3b25c9f
b6093b0
 
 
44d365d
b6093b0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from fastapi import FastAPI, UploadFile, File, HTTPException, Form
from fastapi.responses import FileResponse, HTMLResponse
from typing import Optional
from utils.process_video import process_video
import shutil, os

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello from multilang-asr-captioner"}

@app.get("/submit_video/")
async def get_form():
    html_content = """
    <html>
        <body>
            <form action="/process_video/" enctype="multipart/form-data" method="post">
                <input type="file" name="file"><br>
                Font size: <input type="number" name="fontsize" value="32"><br>
                Background color: <input type="text" name="bg_color" value="#070a13b3"><br>
                Max words per line: <input type="number" name="max_words_per_line" value="8"><br>
                <input type="submit">
            </form>
        </body>
    </html>
    """
    return HTMLResponse(content=html_content)

@app.post("/process_video/")
async def process_video_api(file: UploadFile = File(...),
                            fontsize: Optional[int] = Form(32),
                            bg_color: Optional[str] = Form("#070a13b3"),
                            max_words_per_line: Optional[int] = Form(8)):
    try:
        if not str(file.filename).endswith('.mp4'):
            raise HTTPException(status_code=400, detail="Invalid file type. Please upload an MP4 file.")
        # Save the uploaded file to a temporary file
        temp_dir = os.path.join(os.getcwd(),"temp")
        os.makedirs(temp_dir, exist_ok=True)
        temp_input_path = os.path.join(temp_dir, file.filename)
        # Copy UploadFile to the temp_input_path
        with open(temp_input_path, 'wb') as buffer:
            try:
                shutil.copyfileobj(file.file, buffer)
            finally:
                file.file.close()
        # Process the video
        output_path = process_video(temp_input_path, fontsize, bg_color, max_words_per_line)
        # Return the processed video file
        return FileResponse(output_path, media_type="video/mp4", filename=f"result_{file.filename}")
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))