Spaces:
Running
Running
| from __future__ import annotations | |
| from fastapi import APIRouter, Request | |
| from app.api.media import execute_operation | |
| from app.core.response import SuccessResponse | |
| from app.operations.compress import compress_video, normalize_video | |
| from app.operations.concat import concat_video | |
| from app.operations.convert import convert_video | |
| from app.operations.crop import crop_video | |
| from app.operations.extract_audio import mute_video, remove_audio, replace_audio | |
| from app.operations.merge import merge_video | |
| from app.operations.resize import pad_video, resize_video, scale_video | |
| from app.operations.rotate import ( | |
| change_bitrate, | |
| change_fps, | |
| change_speed, | |
| reverse_video, | |
| rotate_video, | |
| slow_motion, | |
| ) | |
| from app.operations.subtitles import burn_subtitles, soft_subtitles | |
| from app.operations.thumbnails import ( | |
| blur_video, | |
| denoise_video, | |
| extract_frames, | |
| generate_gif, | |
| sharpen_video, | |
| thumbnail, | |
| ) | |
| from app.operations.trim import trim_video | |
| from app.operations.watermark import overlay_video, watermark_video | |
| from app.services.media_service import Operation | |
| router = APIRouter(prefix="/v1/video", tags=["video"]) | |
| def operation_route(path: str, name: str, operation: Operation) -> None: | |
| async def endpoint(request: Request) -> SuccessResponse: | |
| return await execute_operation(request, name, operation) | |
| endpoint.__name__ = name.replace(".", "_") | |
| router.add_api_route( | |
| path, endpoint, methods=["POST"], response_model=SuccessResponse, name=name | |
| ) | |
| operation_route("/compress", "video.compress", compress_video) | |
| operation_route("/resize", "video.resize", resize_video) | |
| operation_route("/convert", "video.convert", convert_video) | |
| operation_route("/crop", "video.crop", crop_video) | |
| operation_route("/merge", "video.merge", merge_video) | |
| operation_route("/trim", "video.trim", trim_video) | |
| operation_route("/concat", "video.concat", concat_video) | |
| operation_route("/rotate", "video.rotate", rotate_video) | |
| operation_route("/reverse", "video.reverse", reverse_video) | |
| operation_route("/overlay", "video.overlay", overlay_video) | |
| operation_route("/watermark", "video.watermark", watermark_video) | |
| operation_route("/frames", "video.extract_frames", extract_frames) | |
| operation_route("/gif", "video.gif", generate_gif) | |
| operation_route("/thumbnail", "video.thumbnail", thumbnail) | |
| operation_route("/replace-audio", "video.replace_audio", replace_audio) | |
| operation_route("/remove-audio", "video.remove_audio", remove_audio) | |
| operation_route("/mute", "video.mute", mute_video) | |
| operation_route("/speed", "video.speed", change_speed) | |
| operation_route("/speed-up", "video.speed_up", change_speed) | |
| operation_route("/slow-motion", "video.slow_motion", slow_motion) | |
| operation_route("/fps", "video.fps", change_fps) | |
| operation_route("/bitrate", "video.bitrate", change_bitrate) | |
| operation_route("/subtitles/burn", "video.subtitles.burn", burn_subtitles) | |
| operation_route("/subtitles/soft", "video.subtitles.soft", soft_subtitles) | |
| operation_route("/scale", "video.scale", scale_video) | |
| operation_route("/pad", "video.pad", pad_video) | |
| operation_route("/blur", "video.blur", blur_video) | |
| operation_route("/sharpen", "video.sharpen", sharpen_video) | |
| operation_route("/denoise", "video.denoise", denoise_video) | |
| operation_route("/normalize", "video.normalize", normalize_video) | |