| | import argparse |
| | import sys |
| |
|
| | |
| | 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: |
| | 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: |
| | |
| | voices_manager_obj = await VoicesManager().create() |
| | voices = await VoicesManager().find(voices_manager_obj, args.gender, args.language) |
| | args.tts = voices['Name'] |
| |
|
| | |
| | if not str(args.language).startswith('en'): |
| | args.non_english = True |
| |
|
| | else: |
| | |
| | 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: |
| | |
| | print( |
| | f"{msg.ERROR}Specified TTS voice not found. Use `edge-tts --list-voices` to list all voices.") |
| | sys.exit(1) |
| |
|
| | |
| | if args.tts: |
| | lang_prefix = args.tts.split('-')[0] |
| | if not lang_prefix.startswith('en'): |
| | args.non_english = True |
| |
|
| | |
| | args.font_color = args.font_color.lower() |
| |
|
| | |
| | if args.font_color.startswith('#'): |
| | args.font_color = args.font_color[1:] |
| |
|
| | |
| | args.font_color = rgb_to_bgr(args.font_color) |
| |
|
| | return args |
| |
|