Spaces:
Build error
Build error
from pytube import YouTube | |
import moviepy.editor as mp | |
def download_youtube_video(link: str, filename: str, caption_language: str = "en") -> None: | |
"""Download a youtube video with captions given an id | |
Parameters | |
---------- | |
link : str | |
Youtube video link | |
filename : str | |
File name to save the video and the caption | |
caption_language : str | |
Language caption to download | |
Raises | |
------ | |
TypeError | |
url must be a string | |
ValueError | |
url must start with 'http' | |
""" | |
try: | |
yt = YouTube(link) | |
except: | |
print("Connection Error") | |
return | |
filename = filename if filename.endswith(".mp4") else filename + ".mp4" | |
try: | |
( | |
yt.streams.filter(progressive=True, file_extension="mp4") | |
.order_by("resolution") | |
.desc() | |
.first() | |
).download(filename=filename) | |
except Exception as e: | |
print("Could not download the video!", e) | |
try: | |
captions = { | |
k: v | |
for k, v in yt.captions.lang_code_index.items() | |
if caption_language in k | |
} | |
for lang, caption in captions.items(): | |
caption.download(title=f"caption_{lang}", srt=False) | |
except Exception as e: | |
print("Could not download the caption!", e) | |
print("Task Completed!") | |
def download_youtube_audio(link:str,filename:str = "audio.mp3") -> str: | |
yt = YouTube(link) | |
stream = yt.streams.filter(only_audio=True)[0] | |
stream.download(filename=filename) | |
return filename | |
def import_as_clip(path_to_video: str) -> mp.VideoFileClip: | |
"""Imports a video file as a VideoFileClip object. | |
Parameters: | |
path_to_video (str): Path to a video file. | |
Returns: | |
mp.VideoFileClip: VideoFileClip object. | |
""" | |
return mp.VideoFileClip(path_to_video) | |
def extract_audio_from_movie(file: str, extension: str = '.wav') -> None: | |
"""Extract the audio from a film and save it to a file. | |
The audio is saved in the same directory as the film. | |
Parameters: | |
file (str): The name of the film file to extract the audio from. | |
extension (str): The file extension of the audio file to save (default is ".wav"). | |
""" | |
clip = import_as_clip(file) | |
filename = file.split(sep='.')[0] + extension | |
clip.audio.write_audiofile(filename) | |
return filename | |