фикс2

This commit is contained in:
vrubel 2026-01-28 18:20:25 +03:00
parent 09347b45ec
commit 5dac739e17

View file

@ -187,10 +187,16 @@ async def download_and_convert(
temp_template = output_path.parent / f"temp_{output_path.name}.%(ext)s"
try:
formats_to_try = [
'bestaudio[ext=m4a]/bestaudio[ext=webm]/bestaudio/best',
'bestaudio/best',
]
async def _run_yt_dlp(format_selector: str):
cmd = [
'yt-dlp',
'-x', # Извлечь аудио
'-f', 'bestaudio[ext=m4a]/bestaudio[ext=webm]/bestaudio/best',
'-f', format_selector,
'--hls-prefer-ffmpeg',
'--audio-format', 'mp3',
'--audio-quality', '0', # Лучшее качество
@ -211,7 +217,7 @@ async def download_and_convert(
if config.ytdlp_force_ipv4:
cmd.append('--force-ipv4')
logger.info(f"Downloading {url}")
logger.info(f"Downloading {url} with format: {format_selector}")
process = await asyncio.create_subprocess_exec(
*cmd,
@ -241,12 +247,27 @@ async def download_and_convert(
await process.wait()
await stderr_task
await stdout_task
return process.returncode, list(stderr_tail) + list(stdout_tail)
if process.returncode != 0:
last_tail: list[str] = []
for fmt in formats_to_try:
returncode, tail_lines = await _run_yt_dlp(fmt)
last_tail = tail_lines
if returncode == 0:
break
tail_text = "\n".join(tail_lines[-12:]) if tail_lines else ""
if "Requested format is not available" in tail_text:
logger.warning("yt-dlp format unavailable, retrying with fallback")
continue
logger.error("yt-dlp failed")
tail_lines = list(stderr_tail) + list(stdout_tail)
if tail_lines:
tail_text = "\n".join(tail_lines[-12:])
if tail_text:
raise Exception(f"Ошибка скачивания: yt-dlp завершился с ошибкой\n{tail_text}")
raise Exception("Ошибка скачивания: yt-dlp завершился с ошибкой")
if returncode != 0:
logger.error("yt-dlp failed")
if last_tail:
tail_text = "\n".join(last_tail[-12:])
raise Exception(f"Ошибка скачивания: yt-dlp завершился с ошибкой\n{tail_text}")
raise Exception("Ошибка скачивания: yt-dlp завершился с ошибкой")