[Python] Getting Error while trying to download youtube video by using python

Discussão em 'Python' iniciado por Stack, Outubro 23, 2024.

  1. Stack

    Stack Membro Participativo

    Code


    I'm working on a script that allows users to manually select and download separate video and audio streams from YouTube using yt-dlp. The script lists the available video and audio formats, lets the user choose their desired formats, and then merges them using FFmpeg.

    Here’s the complete code:

    import yt_dlp
    import os
    import subprocess

    # Function to list and allow manual selection of video and audio formats
    def download_and_merge_video_audio_with_selection(url, download_path):
    try:
    # Ensure the download path exists
    if not os.path.exists(download_path):
    os.makedirs(download_path)

    # Get available formats from yt-dlp
    ydl_opts = {'listformats': True}

    with yt_dlp.YoutubeDL(ydl_opts) as ydl:
    info_dict = ydl.extract_info(url, download=False)
    formats = info_dict.get('formats', [])

    # List available video formats (video only)
    print("\nAvailable video formats:")
    video_formats = [f for f in formats if f.get('vcodec') != 'none' and f.get('acodec') == 'none']
    for idx, f in enumerate(video_formats):
    resolution = f.get('height', 'unknown')
    filesize = f.get('filesize', 'unknown')
    print(f"{idx}: Format code: {f['format_id']}, Resolution: {resolution}p, Size: {filesize} bytes")

    # Let user select the desired video format
    video_idx = int(input("\nEnter the number corresponding to the video format you want to download: "))
    video_format_code = video_formats[video_idx]['format_id']

    # List available audio formats (audio only)
    print("\nAvailable audio formats:")
    audio_formats = [f for f in formats if f.get('acodec') != 'none' and f.get('vcodec') == 'none']
    for idx, f in enumerate(audio_formats):
    abr = f.get('abr', 'unknown') # Audio bitrate
    filesize = f.get('filesize', 'unknown')
    print(f"{idx}: Format code: {f['format_id']}, Audio Bitrate: {abr} kbps, Size: {filesize} bytes")

    # Let user select the desired audio format
    audio_idx = int(input("\nEnter the number corresponding to the audio format you want to download: "))
    audio_format_code = audio_formats[audio_idx]['format_id']

    # Video download options (based on user choice)
    video_opts = {
    'format': video_format_code, # Download user-selected video format
    'outtmpl': os.path.join(download_path, 'video.%(ext)s'), # Save video as video.mp4
    }

    # Audio download options (based on user choice)
    audio_opts = {
    'format': audio_format_code, # Download user-selected audio format
    'outtmpl': os.path.join(download_path, 'audio.%(ext)s'), # Save audio as audio.m4a
    }

    # Download the selected video format
    print("\nDownloading selected video format...")
    with yt_dlp.YoutubeDL(video_opts) as ydl_video:
    ydl_video.download() # Download the selected ...be-video-by-using-python"]Continue reading...

Compartilhe esta Página