You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#!/usr/bin/python
from gtts import gTTS
from subprocess import call
import os
import random
import string
srt_file = 'ss.srt'
outfile_path = 'here2.wav'
def convert_string_to_wav(text, outfile_path, lang='hi', delay=0, tempo=1.2):
"""
Convert text into a wav file
Args:
:param text: the text to speech in latin encoding if wanter
:param outfile_path: where to write the outfile
:param lang: the language, english by default
:param delay: in seconds
:param tempo: speed of speech, google defaut is 1 but too slow
"""
# tts = gTTS(text=text.decode('utf-8'), lang=lang, slow=False).save(outfile_path+'.tmp.mp3')
tts = gTTS(text=text, lang=lang, slow=False).save(outfile_path+'.tmp.mp3')
call(["mpg123", "-w", outfile_path+'.tmp.wav', outfile_path+'.tmp.mp3'])
call(["sox", outfile_path+'.tmp.wav', outfile_path, "tempo", str(tempo), "delay", str(delay)])
os.remove(outfile_path+'.tmp.wav')
os.remove(outfile_path+'.tmp.mp3')
def convert_str_to_wav_in_docker_command(srt_file="", outfilename="", lang='', tempo=1.2):
"""
Convert a subtitle file found in /data into a wav file
Args:
:param srt_file: filename of the subtitle file in srt format
:param outfilename: filename of the outfile
:param lang: the language, english by default
:param tempo: speed of speech, google defaut is 1 but too slow
"""
if srt_file == "":
filenames = os.listdir('/data/')
else:
filenames = [srt_file, ]
for file_name in filenames:
if file_name[-4:] == ".srt":
print ("language of %s: %s" % (file_name, lang))
convert_str_to_wav_command(
srt_file="/data/%s" % file_name,
outfile_path="/data/%s.wav" % (file_name[:-4] if outfilename == "" else outfilename),
lang=get_language_from_filename(file_name) if lang == "" else lang,
tempo=tempo,
)
def get_language_from_filename(file_name):
try:
rindex = file_name[:-4].rindex('.')+1
if rindex == 0:
raise Exception()
return file_name[rindex:-4]
except Exception:
print("No language found. To specify it, ends the filename with .fr.srt or .en.srt")
return "en"
def convert_str_to_wav_command(srt_file, outfile_path, lang='hi', tempo=-1):
"""
Convert a subtitle file into a wav file
Args:
:param srt_file: path to the subtitle file in srt format
:param outfile_path: where to write the outfile
:param lang: the language, english by default
:param tempo: speed of speech, google defaut is 1 but too slow
"""
if tempo == -1 :
if lang == "fr" :
tempo = 1.35
else:
tempo = 1.2
f = open(srt_file, 'r')
lines = f.readlines()
line_id=0
part_files=[]
ran_str=lang+''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(5))
tmp_outfile_path="/tmp/%s-out.wav"%ran_str
while line_id+2<len(lines):
try:
name = lines[line_id+0].replace("\r","")[:-1]
timming = lines[line_id+1].replace("\r","")[:-1]
text = lines[line_id+2].replace("\r","")[:-1]
print('@@@@@@@@@@@@', timming)
print('NAMENAMENAME', name)
print('textTEXTTEXT', text)
delay = ((int(timming[0:2]) * 60 + int(timming[3:5])) * 60 + int(timming[6:8]))
part_files.append("/tmp/%s-%s.wav"%(ran_str,name))
convert_string_to_wav(
text=text,
outfile_path=part_files[-1],
lang=lang,
delay=delay,
tempo=tempo,
)
line_id+=4
except IndexError:
print("Error at line " + str(line_id) + " in " + srt_file)
#raise e
#if len(part_files) == 2:
# call(['sox', '-m'] + part_files + [tmp_outfile_path])
#elif len(part_files) > 2:
# call(['sox', '-m'] + part_files[:-1] + [tmp_outfile_path] + [tmp_outfile_path+'-out.wav'])
# call(['mv', tmp_outfile_path+'-out.wav', tmp_outfile_path])
call(['sox', '-m'] + part_files + [tmp_outfile_path, 'norm'])
call(['mv', tmp_outfile_path, outfile_path])
call(["sox", outfile_path, outfile_path[:-3]+'ogg'])
call(['rm'] + part_files)
#convert subtitle (.srt) to speech (.wav) using google API
# if __name__ == '__main__':
# scriptine.run()
convert_str_to_wav_command(srt_file=srt_file, outfile_path=outfile_path)
The text was updated successfully, but these errors were encountered:
Thanks, indeed python 3 is needed. Could you please do a pull request ? I will be easier to read, and you'll get official credit when merging it as a contributor.
The text was updated successfully, but these errors were encountered: