Closed extremk closed 2 months ago
一次提交多句话,新的TTS 神经网络版 可以充分利用上下文信息修正,配音会自然得多。传统方法是一次提交一句,有500行就提交500次,这样不能利用上下文信息,被切断 Azure 一次最多可以合成 10分钟语音,停顿的部分也算在内,建议处理的时候,使用PCM(wav)格式做中间文件格式 合成的时候,建议做设置 speech_config.set_speech_synthesis_output_format(speechsdk.SpeechSynthesisOutputFormat.Riff48Khz16BitMonoPcm) 这样合成的音质会好非常多
一次最大提交行数 建议采用动态的计算,1个汉字算1秒,然后计算行数,一行停顿8~10秒,加起来不超过600秒 提交一次,这样可以最大限度的让神经网络TTS利用上下文信息 第二批提交,建议和第一次提交重叠最后一句,重叠的部分在合成中丢弃,这样可以最大限度保持上下文关联信息,使得配音自然
我前面看到一个类似的视频配音软件,想到了一种思路来攻克TTS音色不好的问题
在TTS合成的时候一次一句提交,会造成 Azure的晓晓多语言等新TTS无法利用上下文信息,修正效果
突破的方法是一次提交50句,而不是每一次一句,每一句停顿8秒,然后识别停顿,把停顿达到7秒的部分给拆开
ffmpeg 识别停顿部分代码参考
def detect_silence(input_file, silence_threshold="-42dB", silence_duration="5"): command = [ "ffmpeg", "-i", input_file, "-af", f"silencedetect=noise={silence_threshold}:d={silence_duration}", "-f", "null", "-" ] result = subprocess.run(command, text=True, capture_output=True, encoding='utf-8') return result.stderr
拆分音频代码参考
def split_audio(input_file, silence_intervals, output_folder): if not os.path.exists(output_folder): os.makedirs(output_folder)
带停顿的合成代码参考:
def synthesize_speech_with_pause(srt, filename):
先设置实际要合成的文本
剩下的步骤和以前一样,把拆分开的音频文件继续按照以前方式处理,即可有效解决TTS前后风格不一致的问题 可以有效解决 晓晓多语言版 听起来不舒服的问题