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