Background converting

This commit is contained in:
2023-03-07 12:23:56 +00:00
parent c888bb5401
commit a3f930235d

View File

@@ -7,7 +7,8 @@ import random
import string import string
import subprocess import subprocess
from fastapi import APIRouter, Depends, FastAPI, File, UploadFile, status from fastapi import (APIRouter, BackgroundTasks, Depends, File, UploadFile,
status)
from fastapi.responses import FileResponse from fastapi.responses import FileResponse
from fastapi_jwt_auth import AuthJWT from fastapi_jwt_auth import AuthJWT
from joblib import Memory from joblib import Memory
@@ -35,11 +36,20 @@ def extract_thumbnail(video_path):
router = APIRouter(prefix="/signs/{sign_id}/video") router = APIRouter(prefix="/signs/{sign_id}/video")
def convert_video(video_filename):
command = ['ffmpeg', '-y', '-i', settings.DATA_PATH + "/" + video_filename + ".test", '-c:v', 'libx264', '-c:a', 'aac', '-strict', '-2', '-b:a', '192k', '-c:a', 'aac', '-strict', '-2', '-b:a', '192k', settings.DATA_PATH + "/" + video_filename]
subprocess.run(command)
# delete the temporary file
os.remove(settings.DATA_PATH + "/" + video_filename + ".test")
# endpoint to upload a file and save it in the data folder # endpoint to upload a file and save it in the data folder
@router.post("/", status_code=status.HTTP_201_CREATED, response_model=SignVideoOut) @router.post("/", status_code=status.HTTP_201_CREATED, response_model=SignVideoOut)
async def sign_video( async def sign_video(
sign_id: int, sign_id: int,
video: UploadFile, video: UploadFile,
background_tasks: BackgroundTasks,
session: AsyncSession = Depends(get_session), session: AsyncSession = Depends(get_session),
Authorize: AuthJWT = Depends(), Authorize: AuthJWT = Depends(),
): ):
@@ -66,12 +76,8 @@ async def sign_video(
with open(settings.DATA_PATH + "/" + video.filename + ".test", 'wb') as f: with open(settings.DATA_PATH + "/" + video.filename + ".test", 'wb') as f:
f.write(video.file.read()) f.write(video.file.read())
command = ['ffmpeg', '-y', '-i', settings.DATA_PATH + "/" + video.filename + ".test", '-c:v', 'libx264', '-c:a', 'aac', '-strict', '-2', '-b:a', '192k', '-c:a', 'aac', '-strict', '-2', '-b:a', '192k', settings.DATA_PATH + "/" + video.filename] # convert the video in the background
process = await asyncio.create_subprocess_exec(*command) background_tasks.add_task(convert_video, video.filename)
await process.wait()
# delete the temporary file
os.remove(settings.DATA_PATH + "/" + video.filename + ".test")
await sign_video.save(session) await sign_video.save(session)