[docs]classYoutubeAudioLoader(BlobLoader):"""Load YouTube urls as audio file(s)."""
[docs]def__init__(self,urls:List[str],save_dir:str):ifnotisinstance(urls,list):raiseTypeError("urls must be a list")self.urls=urlsself.save_dir=save_dir
[docs]defyield_blobs(self)->Iterable[Blob]:"""Yield audio blobs for each url."""try:importyt_dlpexceptImportError:raiseImportError("yt_dlp package not found, please install it with `pip install yt_dlp`")# Use yt_dlp to download audio given a YouTube urlydl_opts={"format":"m4a/bestaudio/best","noplaylist":True,"outtmpl":self.save_dir+"/%(title)s.%(ext)s","postprocessors":[{"key":"FFmpegExtractAudio","preferredcodec":"m4a",}],}forurlinself.urls:# Download filewithyt_dlp.YoutubeDL(ydl_opts)asydl:ydl.download(url)# Yield the written blobsloader=FileSystemBlobLoader(self.save_dir,glob="*.m4a")forblobinloader.yield_blobs():yieldblob