import os import yt_dlp def download_video(url, save_dir="/home/docker/openlist/ytb-video"): os.makedirs(save_dir, exist_ok=True) base_opts = { 'merge_output_format': 'mp4', 'outtmpl': f'{save_dir}/%(title)s.%(ext)s', 'quiet': False, 'verbose': True, # 调试模式 'retries': 5, 'fragment_retries': 5, } # 首选格式组合 formats = [ 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best', 'bestvideo+bestaudio/best' ] for fmt in formats: opts = dict(base_opts) opts['format'] = fmt print(f"🔧 尝试格式: {fmt}") try: with yt_dlp.YoutubeDL(opts) as ydl: info = ydl.extract_info(url, download=True) if info: filepath = ydl.prepare_filename(info) print(f"✅ 下载完成: {filepath}") return filepath except Exception as e: print(f"⚠️ 格式 {fmt} 下载失败,异常: {e}") continue print("❌ 所有格式尝试均失败。") return None if __name__ == "__main__": video_url = "https://www.youtube.com/watch?v=QL3T2Nzcqcs" download_video(video_url)