Update for coockies use
This commit is contained in:
@@ -299,14 +299,11 @@ async def download_media(
|
|||||||
'merge_output_format': 'mp4',
|
'merge_output_format': 'mp4',
|
||||||
# FFmpeg options for merging to ensure compatibility
|
# FFmpeg options for merging to ensure compatibility
|
||||||
# Copy streams when possible (no re-encoding), only encode if necessary
|
# Copy streams when possible (no re-encoding), only encode if necessary
|
||||||
# Add proper metadata for mobile compatibility
|
|
||||||
'postprocessor_args': {
|
'postprocessor_args': {
|
||||||
'ffmpeg': [
|
'ffmpeg': [
|
||||||
'-c:v', 'copy',
|
'-c:v', 'copy',
|
||||||
'-c:a', 'aac',
|
'-c:a', 'aac',
|
||||||
'-movflags', '+faststart',
|
'-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)
|
# Don't prefer free formats (they may be lower quality)
|
||||||
@@ -317,18 +314,32 @@ async def download_media(
|
|||||||
'ignoreerrors': False,
|
'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
|
import shutil
|
||||||
nodejs_path = shutil.which('node')
|
nodejs_path = shutil.which('node')
|
||||||
if nodejs_path:
|
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
|
# 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:
|
else:
|
||||||
logger.warning(
|
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."
|
"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)
|
# Add cookies if specified (for Instagram and other sites)
|
||||||
if cookies_file:
|
if cookies_file:
|
||||||
@@ -390,7 +401,22 @@ async def download_media(
|
|||||||
raise KeyboardInterrupt("Download cancelled")
|
raise KeyboardInterrupt("Download cancelled")
|
||||||
|
|
||||||
# Download (progress hook will be called from this thread)
|
# Download (progress hook will be called from this thread)
|
||||||
|
# Note: Some postprocessors may show errors (like FixupM3u8 with aspect ratio),
|
||||||
|
# but the video file is still downloaded correctly
|
||||||
|
try:
|
||||||
ydl.download([url])
|
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
|
return info
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
|
|||||||
Reference in New Issue
Block a user