Skip to content

Instantly share code, notes, and snippets.

@IperGiove
Created January 5, 2025 18:45
Show Gist options
  • Save IperGiove/178865fd51ee7fe37657a42af2af37c1 to your computer and use it in GitHub Desktop.
Save IperGiove/178865fd51ee7fe37657a42af2af37c1 to your computer and use it in GitHub Desktop.
Downloader for youtube and youtube music
import yt_dlp
from pathlib import Path
import click
def yt(urls: list[str], output_dir:str) -> None:
for url in urls:
print(f"Processing: {url}")
options = {
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'flac',
}],
'outtmpl': f"{output_dir}/%(title)s",
'ignoreerrors': True,
'no_warnings': False,
'extract_flat': False,
'quiet': False,
'continue': True,
}
with yt_dlp.YoutubeDL(options) as ydl:
info = ydl.extract_info(url, download=True)
print(info)
@click.command("cli", context_settings={'show_default': True})
@click.option("-u", "--urls", type=str, required=True, help="urls")
@click.option("-o", "--output_dir", type=str, default="", help="output path directory")
def click_command(urls: str, output_dir:str):
urls = urls.split(",")
if output_dir == "":
output_dir = f"{str(Path(__file__).resolve().parent)}/tmp"
if output_dir.endswith("/"):
output_dir = output_dir[:-1]
Path(output_dir).mkdir(parents=True, exist_ok=True)
yt(urls, output_dir)
if __name__ == '__main__':
click_command()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment