Spaces:
Sleeping
Sleeping
| # app/routers/video.py | |
| from fastapi import APIRouter, HTTPException | |
| from pydantic import BaseModel | |
| from app.services.video_service import ( | |
| download_youtube_videos, | |
| split_video_and_extract_audio, | |
| downscale_video, | |
| ) | |
| import os | |
| router = APIRouter() | |
| class YouTubeRequest(BaseModel): | |
| urls: list[str] # Accept multiple URLs | |
| chunk_duration: int = 30 # Default chunk duration is 30 seconds | |
| quality: str = "worst" # Allow specifying the video quality | |
| class DownscaleRequest(BaseModel): | |
| video_path: str | |
| resolution: str = "720p" | |
| download_dir = "downloaded_videos" | |
| audio_dir = "extracted_audio" | |
| async def download_video(data: YouTubeRequest): | |
| if not os.path.exists(download_dir): | |
| os.makedirs(download_dir) | |
| try: | |
| video_paths = await download_youtube_videos(data.urls, download_dir, data.quality) | |
| return {"video_paths": video_paths} | |
| except FileNotFoundError as e: | |
| raise HTTPException(status_code=404, detail=str(e)) | |
| async def split_and_extract_audio(data: YouTubeRequest): | |
| try: | |
| video_path = await download_youtube_video(data.url, download_dir) | |
| await split_video_and_extract_audio(video_path, data.chunk_duration, audio_dir) | |
| return {"message": "Audio extraction complete", "audio_dir": audio_dir} | |
| except Exception as e: | |
| raise HTTPException(status_code=500, detail=str(e)) | |
| async def downscale_video_endpoint(data: DownscaleRequest): | |
| downscaled_video_path = os.path.join(download_dir, "downscaled_video.mp4") | |
| try: | |
| await downscale_video(data.video_path, downscaled_video_path, data.resolution) | |
| return {"downscaled_video_path": downscaled_video_path} | |
| except Exception as e: | |
| raise HTTPException(status_code=500, detail=str(e)) | |