maguid28's picture
Update app.py
e63547e verified
raw
history blame
2.76 kB
import gradio as gr
from logging_config import logger, log_buffer
from ffmpeg_setup import ensure_ffmpeg_in_path
from youtube_utils import fetch_youtube_transcript
from transcription import fallback_whisper_transcription
def get_transcript(youtube_url: str, skip_official_transcript: bool):
"""
Fetch the official YouTube transcript,
or fall back to Whisper transcription if required
returns (partial_transcript, logs_so_far).
"""
# Clear logs
log_buffer.seek(0)
log_buffer.truncate()
logger.info(f"Received YouTube URL: {youtube_url}")
logger.info(f"Skip official transcript check? {skip_official_transcript}")
logger.info("")
yield "", log_buffer.getvalue()
# If user wants to skip the official transcript, go straight to fallback
if skip_official_transcript:
logger.info("User selected to skip official transcript.")
yield "", log_buffer.getvalue()
for partial_transcript, current_logs in fallback_whisper_transcription(youtube_url):
yield partial_transcript, current_logs
return
# Otherwise, try official transcript first
transcript = fetch_youtube_transcript(youtube_url)
logger.info("")
yield "", log_buffer.getvalue()
# If official transcript wasn't found, do fallback
if transcript.startswith("Error"):
logger.info("Transcript not found. Falling back to local Whisper transcription...")
logger.info("")
yield "", log_buffer.getvalue()
for partial_transcript, current_logs in fallback_whisper_transcription(youtube_url):
yield partial_transcript, current_logs
return
# Otherwise, we succeeded with the official transcript
logger.info("Official transcript found successfully.")
logger.info("")
yield transcript, log_buffer.getvalue()
def run_demo():
ensure_ffmpeg_in_path()
demo = gr.Interface(
fn=get_transcript,
inputs=[
gr.Textbox(label="YouTube URL"),
gr.Checkbox(label="Skip official transcript check?", value=False)
],
outputs=[
gr.Textbox(label="Transcript"),
gr.Textbox(label="Logs (Streaming)"),
],
title="YouTube Transcript Tool",
description=(
"Enter a YouTube link to retrieve its official transcript. "
"If that fails (or if 'Skip' is selected), we'll download the best "
"audio track with yt-dlp, convert it to WAV (via ffmpeg), and "
"then run Whisper to transcribe. Logs are displayed as it runs."
"Currently does NOT run on Hugging Face Spaces. Download and run locally."
),
)
demo.launch()
if __name__ == "__main__":
run_demo()