From 790ef67a0cb16cb6bde6f20c1f1d3a58c1aef45e Mon Sep 17 00:00:00 2001 From: Jakub Czajka Date: Sun, 14 May 2023 12:31:41 +0200 Subject: [PATCH] Implement the server. --- README | 5 ++ requirements.txt | 1 + server.py | 169 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 175 insertions(+) create mode 100644 requirements.txt create mode 100644 server.py diff --git a/README b/README index 9dcf542..30f3cb5 100644 --- a/README +++ b/README @@ -4,6 +4,11 @@ yt-dlp-server HTTP interface for `yt-dlp`. Exposes a GET / endpoint with a HTML form for obtaining download parameters. +Dependencies +------------ + +* ffmpeg + Install ------- diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..d0d869d --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +yt-dlp==2023.3.4 diff --git a/server.py b/server.py new file mode 100644 index 0000000..bfc6b76 --- /dev/null +++ b/server.py @@ -0,0 +1,169 @@ +# Copyright (c) 2023 Jakub Czajka +# License: GPL-3.0 or later. + +import argparse +import os +import re +import tempfile +import urllib.parse +import uuid +import yt_dlp + +from wsgiref.simple_server import make_server + +FORMAT_OPTS = { + 'video': { + 'mime': 'video/mp4', + 'extension': 'mp4', + 'ydl_opts': { + 'format': 'mp4', + } + }, + 'audio': { + 'mime': 'audio/ogg', + 'extension': 'ogg', + 'ydl_opts': { + 'format': '251', + 'postprocessors': [{ + 'key': 'FFmpegExtractAudio', + }], + 'postprocessor_args': [ + '-ar', '16000' + ], + 'prefer_ffmpeg': True + } + } +} + +VIDEO_PARAMETERS_FORM = ''' + + + + YT Download + + + +
+
+ + + + + + + + {0} + + + +
+
+ + +''' + +YOUTUBE_URL_RE = '(https:\/\/)?(www\.)?youtu(\.be|be\.com)\/watch\?v=([\w\-_]+)' + +def build_form_for_video_parameters(): + formats_as_html = ['