pss browser to mp3 v3, code given
!pip install edge-tts pydub
import requests
from bs4 import BeautifulSoup
import re
import asyncio
import edge_tts
from pydub import AudioSegment
import os
# Config
url = "https://prabodhadevotee.blogspot.com/2025/01/test.html"
start_phrase = "ఆఖరీ మరణము"
end_phrase = "ప్రబోధానంద యోగీశ్వర్లు"
voice = "te-IN-MohanNeural"
chunk_size = 3000
output_path = "/content/final_output.mp3"
temp_dir = "/content/chunks"
os.makedirs(temp_dir, exist_ok=True)
# Step 1: Extract content
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
full_text = soup.get_text()
pattern = re.compile(f"{re.escape(start_phrase)}(.*?){re.escape(end_phrase)}", re.DOTALL)
match = pattern.search(full_text)
if match:
selected_text = start_phrase + match.group(1) + end_phrase
else:
raise Exception("Text not found between start and end phrases.")
selected_text = re.sub(r'\s+', ' ', selected_text).strip()
# Step 2: Chunking function
def split_text(text, max_len):
words = text.split()
chunks, current = [], ""
for word in words:
if len(current) + len(word) + 1 <= max_len:
current += (" " + word if current else word)
else:
chunks.append(current)
current = word
if current:
chunks.append(current)
return chunks
chunks = split_text(selected_text, chunk_size)
print(f"🔍 Total Chunks: {len(chunks)}")
# Step 3: Generate audio chunks
async def generate_chunk_audio(chunks, voice):
audio_segments = []
for i, chunk in enumerate(chunks):
chunk_path = os.path.join(temp_dir, f"chunk_{i}.mp3")
print(f"🎤 Generating chunk {i+1}/{len(chunks)} ({len(chunk)} chars)")
try:
communicate = edge_tts.Communicate(chunk, voice)
await communicate.save(chunk_path)
audio_segments.append(AudioSegment.from_file(chunk_path))
except Exception as e:
print(f"⚠️ Chunk {i} failed: {e}")
return audio_segments
# Step 4: Combine audio
async def process():
audio_segments = await generate_chunk_audio(chunks, voice)
if not audio_segments:
print("❌ No audio segments generated.")
return
final_audio = audio_segments[0]
for segment in audio_segments[1:]:
final_audio += segment
final_audio.export(output_path, format="mp3")
print(f"✅ Final MP3 saved at: {output_path}")
print(f"📏 Final Duration: {round(len(final_audio)/60000, 2)} minutes")
await process()
---------
!pip install edge-tts pydub
import requests
from bs4 import BeautifulSoup
import re
import asyncio
import edge_tts
from pydub import AudioSegment
import os
# Config
url = "https://prabodhadevotee.blogspot.com/2025/01/test.html"
start_phrase = "ఆఖరీ మరణము"
end_phrase = "ప్రబోధానంద యోగీశ్వర్లు"
voice = "te-IN-MohanNeural"
chunk_size = 3000
output_path = "/content/final_output.mp3"
temp_dir = "/content/chunks"
os.makedirs(temp_dir, exist_ok=True)
# Step 1: Extract content
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
full_text = soup.get_text()
pattern = re.compile(f"{re.escape(start_phrase)}(.*?){re.escape(end_phrase)}", re.DOTALL)
match = pattern.search(full_text)
if match:
selected_text = start_phrase + match.group(1) + end_phrase
else:
raise Exception("Text not found between start and end phrases.")
selected_text = re.sub(r'\s+', ' ', selected_text).strip()
# Step 2: Chunking function
def split_text(text, max_len):
words = text.split()
chunks, current = [], ""
for word in words:
if len(current) + len(word) + 1 <= max_len:
current += (" " + word if current else word)
else:
chunks.append(current)
current = word
if current:
chunks.append(current)
return chunks
chunks = split_text(selected_text, chunk_size)
print(f"🔍 Total Chunks: {len(chunks)}")
# Step 3: Generate audio chunks
async def generate_chunk_audio(chunks, voice):
audio_segments = []
for i, chunk in enumerate(chunks):
chunk_path = os.path.join(temp_dir, f"chunk_{i}.mp3")
print(f"🎤 Generating chunk {i+1}/{len(chunks)} ({len(chunk)} chars)")
try:
communicate = edge_tts.Communicate(chunk, voice)
await communicate.save(chunk_path)
audio_segments.append(AudioSegment.from_file(chunk_path))
except Exception as e:
print(f"⚠️ Chunk {i} failed: {e}")
return audio_segments
# Step 4: Combine audio
async def process():
audio_segments = await generate_chunk_audio(chunks, voice)
if not audio_segments:
print("❌ No audio segments generated.")
return
final_audio = audio_segments[0]
for segment in audio_segments[1:]:
final_audio += segment
final_audio.export(output_path, format="mp3")
print(f"✅ Final MP3 saved at: {output_path}")
print(f"📏 Final Duration: {round(len(final_audio)/60000, 2)} minutes")
await process()