155 lines
4.9 KiB
Python
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() |