test / behavior_backend /app /utils /file_utils.py
hibatorrahmen's picture
Add backend application and Dockerfile
8ae78b0
import os
import shutil
import cv2
from pathlib import Path
from fastapi import UploadFile
import uuid
from app.core.config import settings
def save_upload_file(file: UploadFile) -> tuple[str, Path]:
"""
Save an uploaded file to the upload directory.
Args:
file: The uploaded file
Returns:
Tuple of (video_id, file_path)
"""
# Generate unique ID for the video
video_id = str(uuid.uuid4())
file_extension = os.path.splitext(file.filename)[1] if file.filename else ""
# Save the uploaded file
upload_path = settings.UPLOAD_DIR / f"{video_id}{file_extension}"
with open(upload_path, "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
return video_id, upload_path
def get_video_duration(video_path: str) -> float:
"""
Extract video duration using OpenCV.
Args:
video_path: Path to the video file
Returns:
Duration of the video in seconds
"""
cap = cv2.VideoCapture(video_path)
if not cap.isOpened():
return 0.0 # Default to 0 if video cannot be opened
fps = cap.get(cv2.CAP_PROP_FPS)
frame_count = cap.get(cv2.CAP_PROP_FRAME_COUNT)
cap.release()
return frame_count / fps if fps > 0 else 0.0