Update for coockies use

This commit is contained in:
2025-12-04 00:53:31 +03:00
parent 9786d011c2
commit d67371dcee

View File

@@ -299,14 +299,11 @@ async def download_media(
'merge_output_format': 'mp4',
# FFmpeg options for merging to ensure compatibility
# Copy streams when possible (no re-encoding), only encode if necessary
# Add proper metadata for mobile compatibility
'postprocessor_args': {
'ffmpeg': [
'-c:v', 'copy',
'-c:a', 'aac',
'-movflags', '+faststart',
'-aspect', 'auto', # Preserve aspect ratio
'-metadata:s:v:0', 'rotate=0', # Ensure no rotation metadata issues
]
},
# Don't prefer free formats (they may be lower quality)
@@ -317,18 +314,32 @@ async def download_media(
'ignoreerrors': False,
}
# Check if Node.js is available for JS extraction (required for Instagram, TikTok, etc.)
# Check if Node.js is available for JS extraction (required for Instagram, TikTok, YouTube, etc.)
import shutil
nodejs_path = shutil.which('node')
if nodejs_path:
logger.debug(f"Node.js found at: {nodejs_path}. JS extraction will be available.")
logger.info(f"Node.js found at: {nodejs_path}. JS extraction will be available.")
# yt-dlp will automatically use Node.js if available
# Optionally, we can explicitly set it via extractor_args if needed
# For YouTube, we can explicitly set extractor args to use Node.js
# This helps avoid warnings about missing JS runtime
if 'youtube.com' in url or 'youtu.be' in url:
ydl_opts['extractor_args'] = {
'youtube': {
'player_client': ['android', 'web'], # Use clients that don't require JS
}
}
else:
logger.warning(
"Node.js not found. Some sites (Instagram, TikTok, etc.) may require JS extraction. "
"Node.js not found. Some sites (Instagram, TikTok, YouTube, etc.) may require JS extraction. "
"Install Node.js for full functionality."
)
# For YouTube without Node.js, use extractor args to avoid warnings
if 'youtube.com' in url or 'youtu.be' in url:
ydl_opts['extractor_args'] = {
'youtube': {
'player_client': ['android', 'web'], # Use clients that don't require JS
}
}
# Add cookies if specified (for Instagram and other sites)
if cookies_file:
@@ -390,7 +401,22 @@ async def download_media(
raise KeyboardInterrupt("Download cancelled")
# Download (progress hook will be called from this thread)
ydl.download([url])
# Note: Some postprocessors may show errors (like FixupM3u8 with aspect ratio),
# but the video file is still downloaded correctly
try:
ydl.download([url])
except Exception as postprocess_error:
# Check if it's just a postprocessing error (video is already downloaded)
error_msg = str(postprocess_error)
if "Postprocessing" in error_msg or "aspect ratio" in error_msg.lower():
logger.warning(
f"Postprocessing error (non-critical): {error_msg}. "
f"Video file should still be available. Will check file existence."
)
# Don't raise - video is likely already downloaded
else:
# Real error, re-raise
raise
return info
except KeyboardInterrupt: