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)