生成长篇小说的朗读语音小说

使用chattts的兄弟都知道,它只支持30s的朗读,所以如果要使用篇的话,就需要想一些别的办法,我现在使用的办法是:

  1. 将长篇小说按章节进行分拆

    使用用正则表达式从文件中取出每个章节

  2. 将每个章节按自然语言的语句来分折每一个语句 主要是由通过nlp,将章节进行分段处理生个语句,将每个语句中加入相应的语气词,保障每个语句是在30s以内。

  3. 将每个语句生成一个文件,将每个章节的语音进行合并成一个mp3文件

5. 通过视频生成工具将文件转成mp4

scss 复制代码
Path(source_directory + Path(self.get_file_name()).stem).mkdir(parents=True, exist_ok=True)

output_file_wav = source_directory + Path(self.get_file_name()).stem + '/' + Path(self.get_nlp_file()).stem + '.wav'

cmd = ["ffmpeg","-safe", "0","-f", "concat","-i", self.save_dir + "input.txt","-c", "copy", "-y",f"{output_file_wav}"]

log.info(" ".join(cmd))

subprocess.run(cmd, check=True)

# 删除

Path(self.save_dir + "input.txt").unlink()

for wav in wav_list:

Path(wav).unlink()

# 将文件转换成mp3

output_file_mp3 = source_directory + Path(self.get_file_name()).stem + '/' + Path(self.get_nlp_file()).stem + '.mp3'

cmd_to_mp3 = [

"ffmpeg",

"-i", f"{output_file_wav}",

f"{output_file_mp3}"

]

log.info(" ".join(cmd_to_mp3))

subprocess.run(cmd_to_mp3, check=True)

# 删除wav文件

Path(output_file_wav).unlink()
相关推荐
BingoGo5 小时前
Laravel13 + Vue3 的免费可商用 PHP 管理后台 CatchAdmin V5.2.0 发布
后端·php·laravel
rannn_1115 小时前
【Redis|高级篇1】分布式缓存|持久化(RDB、AOF)、主从集群、哨兵、分片集群
java·redis·分布式·后端·缓存
weixin_408099675 小时前
【实战教程】EasyClick 调用 OCR 文字识别 API(自动识别屏幕文字 + 完整示例代码)
前端·人工智能·后端·ocr·api·安卓·easyclick
添尹5 小时前
Go语言基础之指针
开发语言·后端·golang
GreenTea14 小时前
一文搞懂Harness Engineering与Meta-Harness
前端·人工智能·后端
我是大猴子16 小时前
Spring代理类为何依赖注入失效?
java·后端·spring
码事漫谈16 小时前
手把手带你部署本地模型,让你Token自由(小白专属)
前端·后端
码农BookSea17 小时前
ReAct:让大模型学会边想边做
后端·ai编程
码农BookSea18 小时前
10分钟掌握 JSON-RPC 协议,面试加分、设计不踩坑
后端
凤年徐18 小时前
C++手撕红黑树:从0到200行,拿下STL map底层核心
c++·后端·算法