File size: 3,303 Bytes
fba6023
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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)