KaraokeVideoDownloader/update_resolution.py

155 lines
4.9 KiB
Python

#!/usr/bin/env python3
"""
Resolution Update Utility for Karaoke Playlist Downloader
Easily update the preferred video resolution in the configuration.
"""
import json
import argparse
from pathlib import Path
def update_resolution(resolution):
"""Update the resolution in config.json file."""
config_file = Path("config.json")
# Load existing config or create default
if config_file.exists():
try:
with open(config_file, 'r', encoding='utf-8') as f:
config = json.load(f)
except json.JSONDecodeError:
print("❌ Error: Invalid config.json file")
return False
else:
print("📝 Creating new config.json file...")
config = {
"download_settings": {
"format": "best[height<=720][ext=mp4]/best[height<=720]/best[ext=mp4]/best",
"preferred_resolution": "720p",
"audio_format": "mp3",
"audio_quality": "0",
"subtitle_language": "en",
"subtitle_format": "srt",
"write_metadata": True,
"write_thumbnail": True,
"write_description": True,
"write_annotations": True,
"write_comments": True,
"write_subtitles": True,
"embed_metadata": True,
"add_metadata": True,
"continue_downloads": True,
"no_overwrites": True,
"ignore_errors": True,
"no_warnings": False
},
"folder_structure": {
"downloads_dir": "downloads",
"logs_dir": "logs",
"tracking_file": "karaoke_tracking.json"
},
"logging": {
"level": "INFO",
"format": "%(asctime)s - %(levelname)s - %(message)s",
"include_console": True,
"include_file": True
},
"yt_dlp_path": "downloader/yt-dlp.exe"
}
# Resolution mapping
resolution_map = {
'480p': '480',
'720p': '720',
'1080p': '1080',
'1440p': '1440',
'2160p': '2160'
}
if resolution not in resolution_map:
print(f"❌ Error: Invalid resolution '{resolution}'")
print(f"Valid options: {', '.join(resolution_map.keys())}")
return False
height = resolution_map[resolution]
old_resolution = config["download_settings"].get("preferred_resolution", "720p")
# Update the format string
config["download_settings"]["format"] = f"best[height<={height}][ext=mp4]/best[height<={height}]/best[ext=mp4]/best"
config["download_settings"]["preferred_resolution"] = resolution
# Save the updated config
try:
with open(config_file, 'w', encoding='utf-8') as f:
json.dump(config, f, indent=2, ensure_ascii=False)
print(f"✅ Successfully updated resolution from {old_resolution} to {resolution}")
print(f"📝 Format string: {config['download_settings']['format']}")
return True
except Exception as e:
print(f"❌ Error saving config: {e}")
return False
def show_current_resolution():
"""Show the current resolution setting."""
config_file = Path("config.json")
if not config_file.exists():
print("📝 No config.json file found. Using default 720p resolution.")
return
try:
with open(config_file, 'r', encoding='utf-8') as f:
config = json.load(f)
current_resolution = config["download_settings"].get("preferred_resolution", "720p")
current_format = config["download_settings"].get("format", "best[height<=720][ext=mp4]/best[height<=720]/best[ext=mp4]/best")
print(f"🎬 Current resolution: {current_resolution}")
print(f"📝 Format string: {current_format}")
except json.JSONDecodeError:
print("❌ Error: Invalid config.json file")
except Exception as e:
print(f"❌ Error reading config: {e}")
def main():
parser = argparse.ArgumentParser(
description="Update video resolution for Karaoke Playlist Downloader",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
Examples:
python update_resolution.py --show
python update_resolution.py --resolution 1080p
python update_resolution.py --resolution 720p
"""
)
parser.add_argument(
'--resolution', '-r',
choices=['480p', '720p', '1080p', '1440p', '2160p'],
help='Set the preferred video resolution'
)
parser.add_argument(
'--show', '-s',
action='store_true',
help='Show current resolution setting'
)
args = parser.parse_args()
if args.show:
show_current_resolution()
elif args.resolution:
update_resolution(args.resolution)
else:
parser.print_help()
if __name__ == "__main__":
main()