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...