Team Ai
Apppublic

Insightly/transcript-generator

sourceHugging Faceupdated 3y agoView on Hugging Face
0likes
app.py117 linesDownload Raw Back to root
1import streamlit as st2import openai3from pytube import YouTube4import os5from pathlib import Path6import shutil7import whisper8from dotenv import load_dotenv9from zipfile import ZipFile10 11load_dotenv()12 13# Load OpenAI API key from .env14openai.api_key = os.getenv("OPENAI_API_KEY")15 16@st.cache_data17def load_model():18    model = whisper.load_model("base")19    return model20 21def save_audio(url):22    yt = YouTube(url)23    video = yt.streams.filter(only_audio=True).first()24    out_file = video.download()25    base, ext = os.path.splitext(out_file)26    file_name = base + '.mp3'27    try:28        os.rename(out_file, file_name)29    except WindowsError:30        os.remove(file_name)31        os.rename(out_file, file_name)32    audio_filename = Path(file_name).stem+'.mp3'33    print(yt.title + " Has been successfully downloaded")34    print(file_name)35    return yt.title, audio_filename36 37def audio_to_transcript(audio_file):38    model = load_model()39    result = model.transcribe(audio_file)40    transcript = result["text"]41    return transcript42 43def text_to_news_article(text):44    response = openai.Completion.create(45        model="text-davinci-003",46        prompt="Write a news article in 500 words from the below text:\n" + text,47        temperature=0.7,48        max_tokens=600,49        top_p=1,50        frequency_penalty=0,51        presence_penalty=052    )53    return response['choices'][0]['text']54 55def answer_question(question, context):56    response = openai.Completion.create(57        engine="text-davinci-003",58        prompt=f"Q: {question}\nContext: {context}\nAnswer:",59        temperature=0.7,60        max_tokens=150,61        top_p=1,62        frequency_penalty=0,63        presence_penalty=0,64    )65    answer = response.choices[0].text66    return answer67 68st.markdown('# Generate and Chat with Transcripts')69 70st.header('Input the Video URL')71 72url_link = st.text_input('Enter URL of YouTube video:')73 74if st.checkbox('Start Analysis'):75    video_title, audio_filename = save_audio(url_link)76    st.audio(audio_filename)77    transcript = audio_to_transcript(audio_filename)78    if not transcript:79        st.error("Transcript generation failed. Please try another video or check the input.")80    else:81        st.header("Transcript")82        st.success(transcript)83        st.header("News Article")84        result = text_to_news_article(transcript)85        st.success(result)86 87        # Save the files88        transcript_txt = open('transcript.txt', 'w')89        transcript_txt.write(transcript)90        transcript_txt.close()91 92        article_txt = open('article.txt', 'w')93        article_txt.write(result)94        article_txt.close()95 96        zip_file = ZipFile('output.zip', 'w')97        zip_file.write('transcript.txt')98        zip_file.write('article.txt')99        zip_file.close()100 101        with open("output.zip", "rb") as zip_download:102            btn = st.download_button(103                label="Download ZIP",104                data=zip_download,105                file_name="output.zip",106                mime="application/zip"107            )108 109st.header("Ask Questions")110user_question = st.text_input("Ask a question:")111if st.button("Get Answer"):112    if transcript:113        answer = answer_question(user_question, transcript)114        st.success("Answer: " + answer)115    else:116        st.error("No transcript available. Please analyze a video first.")117