no conflicts version

pull/990/head
anthony lloyd 3 years ago
parent 2cfd20b566
commit 03f579dd24

@ -1,4 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import os
from pathlib import Path from pathlib import Path
from typing import Tuple from typing import Tuple
import re import re
@ -6,7 +7,10 @@ import re
# import sox # import sox
# from mutagen import MutagenError # from mutagen import MutagenError
# from mutagen.mp3 import MP3, HeaderNotFoundError # from mutagen.mp3 import MP3, HeaderNotFoundError
import numpy as np
import translators as ts import translators as ts
from moviepy.audio.AudioClip import AudioClip
from moviepy.audio.fx.volumex import volumex
from rich.progress import track from rich.progress import track
from moviepy.editor import AudioFileClip, CompositeAudioClip, concatenate_audioclips from moviepy.editor import AudioFileClip, CompositeAudioClip, concatenate_audioclips
from utils.console import print_step, print_substep from utils.console import print_step, print_substep
@ -86,42 +90,83 @@ class TTSEngine:
) )
] ]
offset = 0 offset = 0
try:
silence_duration = settings.config["settings"]["tts"]["silence_duration"]
except AttributeError:
silence_duration = 0.3
silence = AudioClip(make_frame=lambda t: np.sin(440 * 2 * np.pi * t), duration=silence_duration, fps=44100)
silence = volumex(silence, 0)
silence.write_audiofile(f"{self.path}/silence.mp3", fps=44100, verbose=False, logger=None)
idy = None
for idy, text_cut in enumerate(split_text): for idy, text_cut in enumerate(split_text):
# print(f"{idx}-{idy}: {text_cut}\n") # print(f"{idx}-{idy}: {text_cut}\n")
if not text_cut or text_cut.isspace(): newtext = process_text(text_cut)
offset += 1 if not newtext or newtext.isspace():
print("newtext was blank because sanitized split text resulted in none")
continue continue
else:
self.call_tts(f"{idx}-{idy - offset}.part", text_cut) self.call_tts(f"{idx}-{idy}.part", newtext)
split_files.append(AudioFileClip(f"{self.path}/{idx}-{idy - offset}.part.mp3")) with open(f"{self.path}/list.txt", 'w') as f:
for idz in range(0, len(split_text)):
CompositeAudioClip([concatenate_audioclips(split_files)]).write_audiofile( f.write("file " + f"'{idx}-{idz}.part.mp3'" + "\n")
f"{self.path}/{idx}.mp3", fps=44100, verbose=False, logger=None split_files.append(str(f"{self.path}/{idx}-{idy}.part.mp3"))
) f.write("file " + f"'silence.mp3'" + "\n")
f.close()
for i in split_files:
name = i.filename os.system("ffmpeg -f concat -y -hide_banner -loglevel panic -safe 0 " +
i.close() "-i " + f"{self.path}/list.txt " +
Path(name).unlink() "-c copy " + f"{self.path}/{idx}.mp3")
try:
# for i in range(0, idy + 1): name = rf"{self.path}/{idx}-{idz}.part.mp3"
# print(f"Cleaning up {self.path}/{idx}-{i}.part.mp3") os.unlink(name)
except FileNotFoundError:
# Path(f"{self.path}/{idx}-{i}.part.mp3").unlink() print("file not found error")
except OSError:
print("OSError")
def call_tts(self, filename: str, text: str): def call_tts(self, filename: str, text: str):
self.tts_module.run(text=process_text(text), filepath=f"{self.path}/{filename}.mp3")
# try:
# self.length += MP3(f"{self.path}/{filename}.mp3").info.length
# except (MutagenError, HeaderNotFoundError):
# self.length += sox.file_info.duration(f"{self.path}/{filename}.mp3")
try:
clip = AudioFileClip(f"{self.path}/{filename}.mp3")
self.length += clip.duration
clip.close()
except:
self.length = 0
if filename == "title":
try:
self.tts_module.run(text, filepath=f"{self.path}/title_no_silence.mp3")
try:
silence_duration = settings.config["settings"]["tts"]["silence_duration"]
except AttributeError:
silence_duration = 0.3
silence = AudioClip(make_frame=lambda t: np.sin(440 * 2 * np.pi * t), duration=silence_duration,
fps=44100)
silence = volumex(silence, 0)
silence.write_audiofile(f"{self.path}/silence.mp3", fps=44100, verbose=False, logger=None)
with open(f"{self.path}/title.txt", 'w') as f:
f.write("file " + f"'title_no_silence.mp3'" + "\n")
f.write("file " + f"'silence.mp3'" + "\n")
f.close()
os.system("ffmpeg -f concat -y -hide_banner -loglevel panic -safe 0 " +
"-i " + f"{self.path}/title.txt " +
"-c copy " + f"{self.path}/title.mp3")
clip = AudioFileClip(f"{self.path}/title.mp3")
self.length += clip.duration
clip.close()
try:
name = ["title_no_silence.mp3", "silence.mp3", "title.txt"]
for i in range(0, len(name)):
os.unlink(str(rf"{self.path}/"+name[i]))
except FileNotFoundError:
print("file not found error")
except OSError:
print("OSError")
except:
self.length = 0
else:
try:
self.tts_module.run(text=text, filepath=f"{self.path}/{filename}.mp3")
clip = AudioFileClip(f"{self.path}/{filename}.mp3")
self.length += clip.duration
clip.close()
except:
self.length = 0
def process_text(text: str): def process_text(text: str):
lang = settings.config["reddit"]["thread"]["post_lang"] lang = settings.config["reddit"]["thread"]["post_lang"]

Loading…
Cancel
Save