Background converting
This commit is contained in:
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user