Update yt-dlp
This commit is contained in:
@@ -23,6 +23,8 @@ class YtDlpErrorFilter:
|
|||||||
|
|
||||||
def write(self, text):
|
def write(self, text):
|
||||||
"""Filter stderr output from yt-dlp"""
|
"""Filter stderr output from yt-dlp"""
|
||||||
|
text_lower = text.lower()
|
||||||
|
|
||||||
# Suppress "Unable to extract title" errors - they're not critical
|
# Suppress "Unable to extract title" errors - they're not critical
|
||||||
if "Unable to extract title" in text:
|
if "Unable to extract title" in text:
|
||||||
# Log as debug instead of error
|
# Log as debug instead of error
|
||||||
@@ -30,10 +32,21 @@ class YtDlpErrorFilter:
|
|||||||
return
|
return
|
||||||
|
|
||||||
# Suppress other non-critical extraction errors
|
# Suppress other non-critical extraction errors
|
||||||
if "Unable to extract" in text and ("title" in text.lower() or "metadata" in text.lower()):
|
if "Unable to extract" in text and ("title" in text_lower or "metadata" in text_lower):
|
||||||
logger.debug(f"yt-dlp: {text.strip()}")
|
logger.debug(f"yt-dlp: {text.strip()}")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Suppress "Unable to download webpage" errors that are often non-critical
|
||||||
|
# These can occur due to network issues but yt-dlp may still succeed with retries
|
||||||
|
if "Unable to download webpage" in text:
|
||||||
|
# Check if it's a partial read (often recoverable)
|
||||||
|
if "bytes read" in text_lower or "incompleteread" in text_lower:
|
||||||
|
logger.debug(f"yt-dlp: {text.strip()} (may retry)")
|
||||||
|
return
|
||||||
|
# For other cases, still log as warning but don't show as ERROR
|
||||||
|
logger.warning(f"yt-dlp: {text.strip()}")
|
||||||
|
return
|
||||||
|
|
||||||
# Write everything else to original stderr
|
# Write everything else to original stderr
|
||||||
self.original_stderr.write(text)
|
self.original_stderr.write(text)
|
||||||
self.original_stderr.flush()
|
self.original_stderr.flush()
|
||||||
@@ -342,9 +355,10 @@ async def download_media(
|
|||||||
'ignoreerrors': True, # Continue on extraction errors (e.g., missing title)
|
'ignoreerrors': True, # Continue on extraction errors (e.g., missing title)
|
||||||
# Network settings for better reliability
|
# Network settings for better reliability
|
||||||
'socket_timeout': 60, # Increase socket timeout to 60 seconds
|
'socket_timeout': 60, # Increase socket timeout to 60 seconds
|
||||||
'retries': 3, # Retry failed downloads up to 3 times
|
'retries': 5, # Retry failed downloads up to 5 times (increased for network issues)
|
||||||
'fragment_retries': 3, # Retry failed fragments
|
'fragment_retries': 5, # Retry failed fragments
|
||||||
'file_access_retries': 3, # Retry file access errors
|
'file_access_retries': 3, # Retry file access errors
|
||||||
|
'http_chunk_size': 10485760, # 10MB chunks for better stability
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check if Node.js is available for JS extraction (required for Instagram, TikTok, YouTube, etc.)
|
# Check if Node.js is available for JS extraction (required for Instagram, TikTok, YouTube, etc.)
|
||||||
@@ -462,6 +476,14 @@ async def download_media(
|
|||||||
f"Video file should still be available. Will check file existence."
|
f"Video file should still be available. Will check file existence."
|
||||||
)
|
)
|
||||||
# Don't raise - video is likely already downloaded
|
# Don't raise - video is likely already downloaded
|
||||||
|
# Check for incomplete read errors (often recoverable with retries)
|
||||||
|
elif "incompleteread" in error_lower or ("unable to download webpage" in error_lower and "bytes read" in error_lower):
|
||||||
|
logger.warning(
|
||||||
|
f"Incomplete read error (may retry or file may still be available): {error_msg}. "
|
||||||
|
f"Will check if file was downloaded."
|
||||||
|
)
|
||||||
|
# Don't raise immediately - file might still be downloaded
|
||||||
|
# yt-dlp will retry automatically if configured
|
||||||
# Check if it's just a postprocessing error (video is already downloaded)
|
# Check if it's just a postprocessing error (video is already downloaded)
|
||||||
elif "Postprocessing" in error_msg or "aspect ratio" in error_lower:
|
elif "Postprocessing" in error_msg or "aspect ratio" in error_lower:
|
||||||
logger.warning(
|
logger.warning(
|
||||||
|
|||||||
Reference in New Issue
Block a user