import streamlit as st from pytube import YouTube from moviepy.editor import AudioFileClip import speech_recognition as sr from transformers import pipeline import os def download_and_extract_audio(youtube_link): try: yt = YouTube(youtube_link) video = yt.streams.filter(only_audio=True).first() out_file = video.download(output_path=".") base, ext = os.path.splitext(out_file) new_file = base + '.mp3' os.rename(out_file, new_file) # Convert MP3 to WAV using moviepy audio_clip = AudioFileClip(new_file) wav_file = base + '.wav' audio_clip.write_audiofile(wav_file, codec='pcm_s16le') # codec for WAV format audio_clip.close() return wav_file except Exception as e: st.error(f"Error downloading and extracting audio: {e}") return None def transcribe_audio(audio_path): try: recognizer = sr.Recognizer() with sr.AudioFile(audio_path) as source: audio_data = recognizer.record(source) text = recognizer.recognize_google(audio_data) return text except Exception as e: st.error(f"Error transcribing audio: {e}") return None def summarize_text(text): try: summarizer = pipeline("summarization", model="facebook/bart-large-cnn") summary = summarizer(text, max_length=130, min_length=30, do_sample=False) return summary[0]['summary_text'] except Exception as e: st.error(f"Error summarizing text: {e}") return None def main(): st.title("YouTube Video Summary") youtube_link = st.text_input("Enter YouTube Video Link:") if st.button("Summarize"): if youtube_link: with st.spinner('Downloading and extracting audio...'): audio_path = download_and_extract_audio(youtube_link) if audio_path is None: return with st.spinner('Transcribing audio to text...'): transcription = transcribe_audio(audio_path) if transcription is None: return with st.spinner('Summarizing transcription...'): summary = summarize_text(transcription) if summary is None: return st.subheader("Transcription:") st.write(transcription) st.subheader("Summary:") st.write(summary) else: st.error("Please enter a valid YouTube video link.") if __name__ == '__main__': main()