import subprocess import re import os def generate_audio(text, lang, filename, speed): subprocess.run(['espeak-ng', '-v', lang, '-s', str(speed), '-w', filename, "\""+text+"\""]) def combine_audio(files, output): inputs = [] for file in files: inputs.extend(['-i', file]) filter_complex = ''.join([f'[{i}:a]' for i in range(len(files))]) + f'concat=n={len(files)}:v=0:a=1[out]' subprocess.run(['ffmpeg', *inputs, '-filter_complex', filter_complex, '-map', '[out]', output]) def process_text(k, text): print(f'processing {k}') parts = re.split(r'(\[hi\].*?\[/hi\])', text.replace('*','')) audio_files = [] for i, part in enumerate(parts): if part.startswith('[hi]') and part.endswith('[/hi]'): other_text = part[4:-5] filename = f'other{i}.wav' generate_audio(other_text, 'ar', filename, 90) else: filename = f'english{i}.wav' generate_audio(part, 'en', filename, 140) audio_files.append(filename) num_file=f'explain_{k+1}.wav' print(num_file) combine_audio(audio_files, num_file ) # Delete temporary audio files for file in audio_files: os.remove(file) for i in range(0,1500): try: file_to_open = f'content_{i+1}.txt' print(file_to_open) with open(file_to_open, 'r') as file: content = file.read() content = content.replace('*', '') process_text(i, content) #time.sleep(4) except: print('remove me')