Spaces:
Running
Running
File size: 4,087 Bytes
89b078e 4742bfe 138ee9c 9d2b048 8d0bba0 89b078e 9d2b048 4742bfe 89b078e 9d2b048 89b078e 3f75f59 604231c 9d2b048 89b078e 7c3d441 def4cb3 924c916 89b078e df5d2d4 89b078e ade57f6 89b078e 72f25c5 4742bfe a052a01 4742bfe a052a01 138ee9c 89b078e a01fcf4 d4a3868 c76caf9 5e0aea9 df0a789 023ef49 89b078e 9d2b048 0798764 aa86aaf 89b078e 35c83a3 0798764 2551ef0 a01fcf4 aa86aaf 2551ef0 aa86aaf 2551ef0 dcef7e3 89b078e ac669c3 89b078e e5255a2 aa86aaf 18fbbc3 aa86aaf 33c1a2c a052a01 aa86aaf 138ee9c ab5d546 a01fcf4 89b078e dcad378 89b078e 48266b9 89b078e 9d2b048 47cbb99 9d2b048 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
import streamlit as st
from moviepy.editor import VideoFileClip
import time
from transformers import pipeline
from pytube import YouTube
from pydub import AudioSegment
from audio_extract import extract_audio
import google.generativeai as google_genai
import os
from dotenv import load_dotenv
load_dotenv()
GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
google_genai.configure(api_key=GOOGLE_API_KEY)
st.set_page_config(
page_title="VidText"
)
def youtube_video_downloader(url):
yt_vid = YouTube(url)
title = yt_vid.title
vid_dld = (
yt_vid.streams.filter(progressive=True, file_extension="mp4")
.order_by("resolution")
.desc()
.first()
)
vid_dld = vid_dld.download()
return vid_dld, title
def audio_extraction(video_file):
# video_file_bytes = os.fsencode(video_file)
# audio = extract_audio(input_path=video_file_bytes, output_path=f"{video_file}.mp3")
audio = AudioSegment.from_file(video_file, 'mp4')
audio_path = 'audio.wav'
audio.export(audio_path, format="wav")
return audio_path
def audio_processing(mp3_audio):
audio = AudioSegment.from_file(mp3_audio, format="mp3")
wav_file = "audio_file.wav"
audio = audio.export(wav_file, format="wav")
return wav_file
@st.cache_resource
def load_asr_model():
asr_model = pipeline(task="automatic-speech-recognition", model="openai/whisper-large-v3")
return asr_model
transcriber_model = load_asr_model()
def transcriber_pass(processed_audio):
text_extract = transcriber_model(processed_audio)
return text_extract['text']
def generate_ai_summary(transcript):
model = google_genai.GenerativeModel('gemini-pro')
model_response = model.generate_content([f"Give a summary of the text {transcript}"], stream=True)
return model_response.text
# Streamlit UI
file_select_tab, audio_file_tab = st.tabs([ "Video file", "Audio file"])
# with youtube_url_tab:
# url = st.text_input("Enter the Youtube url")
# yt_video, title = youtube_video_downloader(url)
# if url:
# if st.button("Transcribe", key="yturl"):
# with st.spinner("Transcribing..."):
# audio = audio_extraction(yt_video, "mp3")
# audio = audio_processing(audio)
# ytvideo_transcript = transcriber_pass(audio)
# st.success(f"Transcription successful")
# st.write(ytvideo_transcript)
# # st.write(f'Completed in {run_time}')
# if st.button("Generate Summary"):
# summary = generate_ai_summary(ytvideo_transcript)
# st.write(summary)
# Video file transcription
with file_select_tab:
uploaded_video_file = st.file_uploader("Upload video file", type="mp4")
if uploaded_video_file:
video_file = uploaded_video_file.read()
if st.button("Transcribe", key="vidfile"):
with st.spinner("Transcribing..."):
audio = audio_extraction(video_file)
# audio = audio_processing(audio)
video_transcript = transcriber_pass(audio)
st.success(f"Transcription successful")
st.write(video_transcript)
if st.button("Generate Summary", key="ti2"):
summary = generate_ai_summary(video_transcript)
st.write(summary)
# Audio transcription
with audio_file_tab:
audio_file = st.file_uploader("Upload audio file", type="mp3")
if audio_file:
if st.button("Transcribe", key="audiofile"):
with st.spinner("Transcribing..."):
processed_audio = audio_processing(audio_file)
audio_transcript = transcriber_pass(processed_audio)
st.success(f"Transcription successful")
st.write(audio_transcript)
if st.button("Generate Summary", key="ti1"):
summary = generate_ai_summary(audio_transcript)
st.write(summary)
|