|
from argparse import ArgumentParser |
|
from utils.download_video import download_video |
|
from utils.transcriber import transcriber |
|
from utils.subtitler import subtitler |
|
from utils.convert_video_to_audio import convert_video_to_audio |
|
import logging, os |
|
from tqdm import tqdm |
|
|
|
logging.basicConfig(filename='main.log', |
|
encoding='utf-8', |
|
level=logging.DEBUG, |
|
format='%(asctime)s %(levelname)s %(message)s', |
|
datefmt='%m/%d/%Y %I:%M:%S %p') |
|
|
|
def main(video_url:str, |
|
invideo_filename:str, |
|
max_words_per_line:int, |
|
fontsize:int, |
|
font:str, |
|
bg_color:str, |
|
text_color:str |
|
): |
|
INVIDEO_DIR = os.path.join('data/',invideo_filename) |
|
os.makedirs(INVIDEO_DIR, exist_ok=True) |
|
SRT_PATH = os.path.join(INVIDEO_DIR, f"{invideo_filename}.srt") |
|
OUTVIDEO_PATH = os.path.join(INVIDEO_DIR, f"result_{invideo_filename}.mp4") |
|
with tqdm(total=100, desc="Overall Progress") as pbar: |
|
if video_url != None: |
|
INVIDEO_PATH = download_video(video_url, INVIDEO_DIR, invideo_filename) |
|
pbar.update(25) |
|
INAUDIO_PATH = os.path.join(INVIDEO_DIR, f"{invideo_filename}.m4a") |
|
convert_video_to_audio(INVIDEO_PATH,INAUDIO_PATH) |
|
pbar.update(25) |
|
if not os.path.exists(SRT_PATH): |
|
transcriber(INAUDIO_PATH, SRT_PATH, max_words_per_line) |
|
pbar.update(25) |
|
subtitler(INVIDEO_PATH, SRT_PATH, OUTVIDEO_PATH,fontsize, font, bg_color, text_color) |
|
pbar.update(25) |
|
return |
|
INVIDEO_PATH = os.path.join(INVIDEO_DIR, f"{invideo_filename}.mp4") |
|
INAUDIO_PATH = os.path.join(INVIDEO_DIR, f"{invideo_filename}.m4a") |
|
if not os.path.exists(INAUDIO_PATH): |
|
convert_video_to_audio(INVIDEO_PATH,INAUDIO_PATH) |
|
pbar.update(50) |
|
if not os.path.exists(SRT_PATH): |
|
transcriber(INAUDIO_PATH, SRT_PATH, max_words_per_line) |
|
pbar.update(25) |
|
subtitler(INVIDEO_PATH, SRT_PATH, OUTVIDEO_PATH, fontsize, font, bg_color, text_color) |
|
pbar.update(25) |
|
|
|
if __name__ == '__main__': |
|
parser = ArgumentParser() |
|
parser.add_argument('--invideo_filename', required=True, type=str, help='Filename to caption.') |
|
parser.add_argument('--video_url', required=False, default=None, type=str, help='A video file to be subtitled (Optional)') |
|
parser.add_argument("--max_words_per_line", type=int, default=None, help="the maximum number of words in a segment. (int)") |
|
parser.add_argument('--fontsize', required=False, default=32, type=int, help='Font size for captions (int)') |
|
parser.add_argument('--font', required=False, default="FuturaPTHeavy", type=str, help='Font style for captions (str)') |
|
parser.add_argument('--bg_color', required=False, default="#070a13b3", type=str, help='Hex color value for caption background colour. (str)') |
|
parser.add_argument('--text_color', required=False, default="white", type=str, help='color value for caption text. (str)') |
|
args = parser.parse_args() |
|
|
|
main(args.video_url, |
|
args.invideo_filename, |
|
args.max_words_per_line, |
|
args.fontsize, |
|
args.font, |
|
args.bg_color, |
|
args.text_color |
|
) |