# 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
Post a Comment