brain-rot-tok / endpoints /video_editor_cut.py
DenisT's picture
modified video_editor, html/css/js
629e7a5
import shutil
import subprocess
from fastapi import UploadFile, File, Form
from fastapi.responses import FileResponse
from fastapi import APIRouter, BackgroundTasks
import os
from endpoints.utils import get_file_name
from endpoints.utils import remove_content_from_dir
router = APIRouter()
@router.post("/cut")
async def cut_videos(
video: UploadFile = File(...),
start_time: str = Form(...),
end_time: str = Form(...),
background_tasks: BackgroundTasks = BackgroundTasks()
):
temp_dir = "./data/video_editor/videos"
if not os.path.exists(temp_dir):
os.makedirs(temp_dir)
output_video_path = save_and_cut(video, temp_dir, start_time, end_time)
# send video back
video_name = get_file_name("video_cut")
# background_tasks.add_task(remove_content_from_dir, temp_dir)
return FileResponse(output_video_path, media_type="video/mp4", filename=video_name)
def save_and_cut(video: UploadFile, temp_dir, start_time, end_time):
# Save uploaded video to temporary directory
video_path = os.path.join(temp_dir, video.filename)
with open(video_path, 'wb') as buffer:
shutil.copyfileobj(video.file, buffer)
# Output video path
output_video_path = os.path.join(temp_dir, "output.mp4")
# Command to cut video using ffmpeg
ffmpeg_command = [
"ffmpeg",
"-i", video_path,
"-ss", start_time,
"-to", end_time,
"-y", output_video_path
]
# Execute ffmpeg command
subprocess.run(ffmpeg_command, check=True)
return output_video_path