Spaces:
Sleeping
Sleeping
| import argparse | |
| import sys | |
| # voice_manager.py | |
| from src.voice_manager import VoicesManager | |
| import msg | |
| from utils import rgb_to_bgr | |
| async def parse_args(): | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument("--model", default="small", help="Model to use", | |
| choices=["tiny", "base", "small", "medium", "large"], type=str) | |
| parser.add_argument("--non_english", action='store_true', | |
| help="Don't use the english model.") | |
| parser.add_argument("--url", metavar='U', default="https://www.youtube.com/watch?v=intRX7BRA90", | |
| help="Youtube URL to download as background video.", type=str) | |
| parser.add_argument("--tts", default="en-US-ChristopherNeural", | |
| help="Voice to use for TTS", type=str) | |
| parser.add_argument( | |
| "--list-voices", help="Use `edge-tts --list-voices` to list all voices", action='help') | |
| parser.add_argument("--random_voice", action='store_true', | |
| help="Random voice for TTS", default=False) | |
| parser.add_argument("--gender", choices=["Male", "Female"], | |
| help="Gender of the random TTS voice", type=str) | |
| parser.add_argument( | |
| "--language", help="Language of the random TTS voice for example: en-US", type=str) | |
| parser.add_argument("--sub_format", | |
| help="Subtitle format", choices=["u", "i", "b"], default="b", type=str) | |
| parser.add_argument("--sub_position", | |
| help="Subtitle position", choices=[i for i in range(1, 10)], default=5, type=int) | |
| parser.add_argument("--font", help="Subtitle font", | |
| default="Lexend Bold", type=str) | |
| parser.add_argument("--font_color", help="Subtitle font color in hex format: FFF000", | |
| default="FFF000", type=str) | |
| parser.add_argument( | |
| "--font_size", help="Subtitle font size", default=21, type=int) | |
| parser.add_argument('--max_characters', default=38, | |
| type=int, help='Max characters per line') | |
| parser.add_argument('--max_words', default=2, type=int, | |
| help='Max words per segment') | |
| parser.add_argument("--upload_tiktok", help="Upload to TikTok after creating the video", | |
| action='store_true', default=False) | |
| parser.add_argument("-v", "--verbose", action='store_true', | |
| help="Verbose") | |
| args = parser.parse_args() | |
| if args.random_voice: # Random voice | |
| args.tts = None | |
| if not args.gender: | |
| print( | |
| f"{msg.ERROR}When using --random_voice, please specify both --gender and --language arguments.") | |
| sys.exit(1) | |
| elif not args.language: | |
| print( | |
| f"{msg.ERROR}When using --random_voice, please specify both --gender and --language arguments.") | |
| sys.exit(1) | |
| elif args.gender and args.language: | |
| # Check if voice is valid | |
| voices_manager_obj = await VoicesManager().create() | |
| voices = await VoicesManager().find(voices_manager_obj, args.gender, args.language) | |
| args.tts = voices['Name'] | |
| # Check if language is english | |
| if not str(args.language).startswith('en'): | |
| args.non_english = True | |
| else: | |
| # Check if voice is valid | |
| voices = await VoicesManager().create() | |
| args.language = '-'.join(i for i in args.tts.split('-')[0:2]) | |
| voices = voices.find(Locale=args.language) | |
| if len(voices) == 0: | |
| # Voice not found | |
| print( | |
| f"{msg.ERROR}Specified TTS voice not found. Use `edge-tts --list-voices` to list all voices.") | |
| sys.exit(1) | |
| # Extract language from TTS voice | |
| if args.tts: | |
| lang_prefix = args.tts.split('-')[0] | |
| if not lang_prefix.startswith('en'): | |
| args.non_english = True | |
| # Cast font color to lowercase | |
| args.font_color = args.font_color.lower() | |
| # Remove # from font color | |
| if args.font_color.startswith('#'): | |
| args.font_color = args.font_color[1:] | |
| # Convert font color from RGB to BGR | |
| args.font_color = rgb_to_bgr(args.font_color) | |
| return args | |