# Required libraries import PyPDF2 from gtts import gTTS from pydub import AudioSegment from pydub.effects import normalize import os # 1. PDF Text Extraction def extract_text_from_pdf(pdf_path): text = "" with open(pdf_path, "rb") as file: reader = PyPDF2.PdfReader(file) for page in reader.pages: text += page.extract_text() return text # 2. Text Processing def process_text(text): # Basic cleaning and chunking text = text.replace("\n", " ").strip() chunks = [text[i:i+500] for i in range(0, len(text), 500)] return chunks # 3. Text-to-Speech Conversion def text_to_speech(chunks, output_dir="temp"): os.makedirs(output_dir, exist_ok=True) files = [] for i, chunk in enumerate(chunks): tts = gTTS(text=chunk, lang='en', slow=False) file_path = f"{output_dir}/part_{i}.mp3" tts.save(file_path) files.append(file_path) return files # 4. Audio Processing def create_podcast(audio_files, output_file, intro=None, outro=None, bg_music=None): combined = AudioSegment.empty() # Add intro if intro: combined += AudioSegment.from_file(intro).fade_out(1000) # Combine speech files for file in audio_files: speech = AudioSegment.from_file(file) if bg_music: bg = AudioSegment.from_file(bg_music).loop_until_duration(len(speech)) - 20 combined += speech.overlay(bg) else: combined += speech # Add outro if outro: combined += AudioSegment.from_file(outro).fade_in(1000) # Normalize and export normalized = normalize(combined) normalized.export(output_file, format="mp3") # Main Function def pdf_to_podcast(pdf_path, output_file, intro=None, outro=None, bg_music=None): text = extract_text_from_pdf(pdf_path) chunks = process_text(text) audio_files = text_to_speech(chunks) create_podcast(audio_files, output_file, intro, outro, bg_music) # Clean temporary files for file in audio_files: os.remove(file) os.rmdir("temp") # Usage pdf_to_podcast( pdf_path="document.pdf", output_file="podcast.mp3", intro="intro.mp3", outro="outro.mp3", bg_music="background.mp3" )

Comments