Spaces:
Runtime error
Runtime error
import mimetypes | |
import re | |
import tempfile | |
import requests | |
import os | |
from urllib.parse import urlparse | |
from pytube import YouTube | |
from config import DOWNLOAD_DIR | |
def download_video_from_url(url, output_dir=DOWNLOAD_DIR): | |
try: | |
response = requests.get(url) | |
response.raise_for_status() # Check if the request was successful | |
content_type = response.headers.get("content-type") | |
if "video" not in content_type: | |
print("The given URL is not a valid video URL") | |
return | |
file_extension = mimetypes.guess_extension(content_type) | |
os.makedirs(output_dir, exist_ok=True) | |
temp_file = tempfile.NamedTemporaryFile( | |
delete=False, suffix=file_extension, dir=output_dir | |
) | |
temp_file_path = temp_file.name | |
with open(temp_file_path, "wb") as file: | |
file.write(response.content) | |
return temp_file_path | |
except requests.exceptions.RequestException as e: | |
print("An error occurred while downloading the video:", str(e)) | |
return | |
def download_video_from_youtube(url, output_dir=DOWNLOAD_DIR): | |
try: | |
yt = YouTube(url) | |
video = ( | |
yt.streams.filter(progressive=True, file_extension="mp4") | |
.order_by("resolution") | |
.desc() | |
.first() | |
) | |
os.makedirs(output_dir, exist_ok=True) | |
video_path = video.download(output_dir) | |
return video_path | |
except Exception as e: | |
print("An error occurred while downloading the video:", str(e)) | |
return | |
def download_video(url, output_dir=DOWNLOAD_DIR): | |
parsed_url = urlparse(url) | |
domain = parsed_url.netloc.lower() | |
domain = re.sub(r"\.", "", domain) # Match for both youtube and youtu.be | |
print("---" * 5, "Downloading video file", "---" * 5) | |
if "youtube" in domain: | |
video_path = download_video_from_youtube(url, output_dir) | |
else: | |
video_path = download_video_from_url(url, output_dir) | |
if video_path: | |
print(f"Saving file at: {video_path}") | |
print("---" * 10) | |
return video_path | |
if __name__ == "__main__": | |
youtube_link = "https://www.youtube.com/watch?v=2OTq15A5s0Y" | |
temp_video_path = download_video_from_youtube(youtube_link) | |
if temp_video_path is not None: | |
print("Video downloaded successfully to:", temp_video_path) | |
else: | |
print("Failed to download the video.") | |