Spaces:
Runtime error
Runtime error
import gradio as gr | |
import re | |
import sys | |
import glob | |
import os | |
from io import StringIO | |
from openbb_terminal.forecast.whisper_model import transcribe_and_summarize | |
def get_video_id(url): | |
video_id = re.findall(r"v=([\w]{11})", url)[0] | |
old_stdin = sys.stdin | |
# mkdir /home/user/.cache/whisper | |
os.makedirs(f"/home/user/.cache/whisper", exist_ok=True) | |
if not sys.stdin.isatty(): | |
# seems I only need 3 y's to get past the prompt, but 5 is safer | |
y_strings = "\n".join(["y", "y", "y", "y", "y"]) | |
sys.stdin = StringIO(y_strings) | |
transcribe_and_summarize(video=url, output_dir=video_id) | |
else: | |
return "Please enter a YouTube URL" | |
sys.stdin = old_stdin | |
print(f"Video ID: {video_id}") | |
try: | |
summary_file = glob.glob(f"{video_id}/*_summary.txt")[0] | |
except Exception as e: | |
# get latest file with *_summary.txt | |
summary_file = max(glob.glob(f"**/*_summary.txt"), key=os.path.getctime) | |
# file .srt file | |
subtitle_file = None | |
try: | |
subtitle_file = glob.glob(f"{video_id}/*.vtt")[0] | |
except Exception as e: | |
# get latest file with .srt or .vtt | |
subtitle_file = max(glob.glob(f"**/*.vtt"), key=os.path.getctime) | |
if subtitle_file is None: | |
try: | |
subtitle_file = glob.glob(f"{video_id}/*.srt")[0] | |
except Exception as e: | |
subtitle_file = max(glob.glob(f"**/*.srt"), key=os.path.getctime) | |
# returns contents of summary file and subtitle file | |
try: | |
with open(summary_file, "r") as f: | |
summary_contents = f.read() | |
except Exception as e: | |
summary_contents = "No summary file found" | |
try: | |
with open(subtitle_file, "r") as f: | |
subtitle_contents = f.read() | |
except Exception as e: | |
subtitle_contents = "No subtitle file found" | |
return summary_contents, subtitle_contents | |
input_text = gr.inputs.Textbox(label="Enter a YouTube URL") | |
output_text = [gr.outputs.Textbox(label="Summary File"), gr.outputs.Textbox(label="Subtitle File")] | |
gr.Interface(fn=get_video_id, inputs=input_text, outputs=output_text, title="YouTube Video Summarization").launch() |