t-v / app.py
muhammadshaheryar's picture
Update app.py
c0cca23 verified
import streamlit as st
from PyPDF2 import PdfReader
from transformers import pipeline
from gtts import gTTS
from moviepy.editor import TextClip, CompositeVideoClip, concatenate_videoclips
import tempfile
import os
# Streamlit app
st.title("PDF to Video Converter")
st.write("Upload a PDF, and the app will create a video summarizing its content.")
# Upload PDF
uploaded_file = st.file_uploader("Upload your PDF file", type=["pdf"])
if uploaded_file:
with st.spinner("Processing PDF..."):
# Extract text from PDF
pdf_reader = PdfReader(uploaded_file)
text = ""
for page in pdf_reader.pages:
text += page.extract_text()
st.write("Extracted text:")
st.text_area("Document Content", text, height=200)
# Option to summarize text
summarize = st.checkbox("Summarize the content?")
if summarize:
with st.spinner("Summarizing content..."):
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
summarized_text = summarizer(text, max_length=150, min_length=30, do_sample=False)[0]['summary_text']
text = summarized_text
st.write("Summarized content:")
st.text_area("Summary", text, height=100)
# Generate audio
with st.spinner("Converting text to audio..."):
tts = gTTS(text)
audio_path = tempfile.NamedTemporaryFile(suffix=".mp3", delete=False).name
tts.save(audio_path)
# Generate video
with st.spinner("Creating video..."):
# Create video clips from text
lines = text.split(". ")
clips = []
for i, line in enumerate(lines):
txt_clip = TextClip(line, fontsize=24, color='white', size=(1280, 720), method='caption')
txt_clip = txt_clip.set_duration(3 + len(line) // 10) # Duration based on text length
clips.append(txt_clip)
# Concatenate all text clips
final_clip = concatenate_videoclips(clips, method="compose")
# Add audio to the video
final_clip = final_clip.set_audio(audio_path)
# Export video
video_path = tempfile.NamedTemporaryFile(suffix=".mp4", delete=False).name
final_clip.write_videofile(video_path, codec="libx264", fps=24)
st.video(video_path)
# Option to download video
with open(video_path, "rb") as file:
st.download_button(
label="Download Video",
data=file,
file_name="output_video.mp4",
mime="video/mp4"
)
import os
os.system('apt-get install -y ffmpeg')
from moviepy.editor import TextClip
# Create a text clip
txt_clip = TextClip("Hello World", fontsize=50, color='white')
# Set the duration
txt_clip = txt_clip.set_duration(3)
# Write the video to a file
txt_clip.write_videofile("simple_test.mp4", fps=24)