Spaces:
Runtime error
Runtime error
# Helper functions for the video and audio extraction | |
from pytube import YouTube | |
from moviepy.editor import VideoFileClip | |
import os | |
import stable_whisper | |
import gradio as gr | |
def download_video(youtube_url, save_path="./"): | |
try: | |
# Create a YouTube object with the link | |
yt = YouTube(youtube_url) | |
# Get the highest resolution stream | |
stream = yt.streams.get_highest_resolution() | |
# Generate a unique filename for the downloaded video | |
video_filename = "video.mp4" | |
# Download the video | |
video_path = stream.download(output_path=save_path, filename=video_filename) | |
print("Download complete!") | |
# Extract audio | |
audio_path = extract_audio(video_path, save_path) | |
if audio_path: | |
print("Audio extracted successfully at:", audio_path) | |
return [video_path, audio_path] | |
except Exception as e: | |
print("An error occurred:", str(e)) | |
def extract_audio(video_path, save_path): | |
try: | |
# Load the video clip using moviepy | |
video_clip = VideoFileClip(video_path) | |
# Extract audio | |
audio_clip = video_clip.audio | |
# Create path for saving audio | |
audio_path = video_path[:-4] + ".mp3" | |
# Save audio | |
audio_clip.write_audiofile(audio_path) | |
return audio_path | |
except Exception as e: | |
print("An error occurred while extracting audio:", str(e)) | |
# # Example usage | |
# youtube_link = input("Enter the YouTube link: ") | |
# download_video(youtube_link) | |
# BONUS 1: This cell contains the function for the gradio app | |
def vid_to_subs(link): | |
try: | |
# Download video and extract audio | |
# Construct the full path to the downloaded video | |
video_path = download_video(link)[0] | |
# Transcribe the audio | |
model = stable_whisper.load_model('medium') | |
result = model.transcribe(video_path) | |
# Store transcription result in a variable | |
transcription = result.to_txt() | |
return transcription | |
except Exception as e: | |
print("An error occurred:", str(e)) | |
demo = gr.Interface(fn=vid_to_subs, inputs="textbox", outputs="textbox") | |
demo.launch(share=True, debug=True) |