用腾讯云语音合成(TTS)批量生成英语绘本的朗读音频

news2025/1/17 18:10:41

孩子进行英语启蒙,需要看很多英语绘本,而且要听配套的音频来练听力。但有些英语绘本是没有对应音频的,下面简单几步,就可以将任意英语绘本制作出对应的英语朗读音频。

先到电子书资源网站搜索这个绘本名称,如果有电子书,可以直接下载,最好是pdf格式的;

如果没有电子书,但是有实体书,比如从图书馆借的绘本,可以用手机拍照做成PDF文件。

绘本每一页拍照后,按照页码顺序选择,然后点击:更多——打印或生成PDF

点击右上角,选择:另存为PDF

选择一个文件夹,保存,然后将这个PDF文件传输到电脑。

得到绘本的PDF文件后,然后申请一个腾讯云的账号,新用户可以领取一个语音合成的免费资源包,内含800万调用字符,有效期为3个月。语音合成(Text To Speech,TTS)可以将文本转化成拟人化语音,提供多种音色选择,支持自定义音量、语速,让发音更自然、更专业、更符合场景需求。语音合成可以应用于语音导航、有声读物、机器人、语音助手、自动新闻播报等场景。

不过注意,这个语音合成-通用免费资源包不含长文本,一次最多只能支持500个英文字母的语音合成。

然后,在deepseek输入框中输入提示词:

你是一个Python编程专家,要写一个通过腾讯云的语音合成API进行批量AI英语语音合成的Python脚本,具体步骤如下:

腾讯云SecretId:XXX,SecretKey:XXX

读取文件夹“F:\aivideo”中的pdf文件,如果pdf文件是图像格式,调用Tesseract进行OCR文本识别,提取出全部的文本内容;如果不是图像格式,直接提取其全部文本内容;

对于每个pdf文件,创建一个TextToVoice基础语音合成任务(语言为英语),然后定期检查任务状态,直到任务完成或失败。完成后,将语音合成结果保存到本地文件。识别结果保存到文件夹:F:\\aivideo ,文件名为对应的pdf文件名,格式为mp3,采样率为16000 Hz

注意:

一次请求有字数限制:英文最大支持400个字母,包括标点符号在内。如果pdf文本中字母超过400个,要对文本进行拆分,然后语音合成,语音合成完成后,按顺序把语音文件合并成一个。

在保存音频文件时,需要确保传入的是字节对象而不是字符串。

如果创建任务或查询状态时发生错误,应该打印错误信息;

每一步都要输出信息到屏幕上;

输出参数

参数名称类型描述

AudioStringbase64编码的wav/mp3音频数据

示例值:UklGRlR/AABXQVZFZm10IBAAAAABAAEAgD4AAAB9AAACABAAZGF0YSx9AAD+

输出示例:

{

"Response": {

"Audio": "UklGRqRwAABXQVZFZm10IBAAAAABAAEAgD4AAAB9AAACABAAZGF0YYBwAAAA......AAAAA=",

"RequestId": "d91f1496-0514-4281-932e-15a022b67d16",

"SessionId": "session-1234",

"Subtitles": [

{

"BeginIndex": 0,

"BeginTime": 250,

"EndIndex": 1,

"EndTime": 430,

"Phoneme": "ni2",

"Text": "你"

},

{

"BeginIndex": 1,

"BeginTime": 430,

"EndIndex": 2,

"EndTime": 670,

"Phoneme": "hao3",

"Text": "好"

}

]

}

}

Deepseek生成的源代码:

import os

import time

import json

import base64

import PyPDF2

import pytesseract

from pdf2image import convert_from_path

from tencentcloud.common import credential

from tencentcloud.common.profile.client_profile import ClientProfile

from tencentcloud.common.profile.http_profile import HttpProfile

from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException

from tencentcloud.tts.v20190823 import tts_client, models

import moviepy.editor as mp

# 腾讯云API的SecretId和SecretKey

SECRET_ID = "XXX"

SECRET_KEY = "XXX"

# 文件夹路径

PDF_FOLDER = "F:\\aivideo"

def extract_text_from_pdf(pdf_path):

try:

# 尝试使用PyPDF2读取PDF文本

with open(pdf_path, 'rb') as file:

reader = PyPDF2.PdfFileReader(file)

text = ""

for page_num in range(reader.numPages):

page = reader.getPage(page_num)

text += page.extract_text()

return text

except:

# 如果失败,使用pdf2image和pytesseract进行OCR

images = convert_from_path(pdf_path)

text = ""

for image in images:

text += pytesseract.image_to_string(image, lang='eng')

return text

def split_text(text, max_length=400):

words = text.split()

chunks = []

current_chunk = []

current_length = 0

for word in words:

if current_length + len(word) + 1 > max_length:

chunks.append(' '.join(current_chunk))

current_chunk = [word]

current_length = len(word)

else:

current_chunk.append(word)

current_length += len(word) + 1

if current_chunk:

chunks.append(' '.join(current_chunk))

return chunks

def create_tts_task(client, text):

try:

req = models.TextToVoiceRequest()

params = {

"Text": text,

"SessionId": str(int(time.time())),

"ModelType": 1,

"VoiceType": 101001, # 英语女声

"SampleRate": 16000

}

req.from_json_string(json.dumps(params))

resp = client.TextToVoice(req)

return resp.Audio

except TencentCloudSDKException as err:

print(f"Error creating TTS task: {err}")

return None

def save_audio_to_file(audio, file_path):

with open(file_path, 'wb') as f:

f.write(base64.b64decode(audio))

print(f"Audio saved to {file_path}")

def merge_audio_files(file_paths, output_path):

clips = [mp.AudioFileClip(f) for f in file_paths]

final_clip = mp.concatenate_audioclips(clips)

final_clip.write_audiofile(output_path, codec='mp3')

for f in file_paths:

os.remove(f)

print(f"Merged audio saved to {output_path}")

def main():

cred = credential.Credential(SECRET_ID, SECRET_KEY)

httpProfile = HttpProfile()

httpProfile.endpoint = "http://tts.tencentcloudapi.com"

clientProfile = ClientProfile()

clientProfile.httpProfile = httpProfile

client = tts_client.TtsClient(cred, "ap-guangzhou", clientProfile)

for filename in os.listdir(PDF_FOLDER):

if filename.endswith('.pdf'):

pdf_path = os.path.join(PDF_FOLDER, filename)

print(f"Processing {pdf_path}")

text = extract_text_from_pdf(pdf_path)

if text:

chunks = split_text(text)

audio_files = []

for i, chunk in enumerate(chunks):

audio = create_tts_task(client, chunk)

if audio:

temp_file_path = os.path.join(PDF_FOLDER, f"temp_{i}.mp3")

save_audio_to_file(audio, temp_file_path)

audio_files.append(temp_file_path)

if audio_files:

output_file_path = os.path.join(PDF_FOLDER, os.path.splitext(filename)[0] + '.mp3')

merge_audio_files(audio_files, output_file_path)

else:

print(f"No text extracted from {pdf_path}")

if __name__ == "__main__":

main()

程序运行成功,pdf文本完美的转换为音频文件,朗读音色很自然,和真人非常接近。

回到腾讯云控制台,点击:语音合成资源包,可以查看刚才程序运行消耗的字符数量和剩余字符数量。

可以看到,一本简单的英文绘本消耗了3712个字符,免费的语音合成资源包支持8000000个字符,大概可以转换2000本左右英文绘本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1853370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OGG几何内核开发-复杂装配模型读取、显示、分析

OGG几何内核读取STEP模型文件的API有STEPCAFControl_Reader、STEPControl_Reader。 STEPCAFControl_Reader使用很复杂,但可以展示装配树,有利于模型的详细分析。 本文演示了《插件化算法研究平台V2》的OCC几何模型插件的部分功能:显示装配树…

什么是孪生素数猜想

什么是孪生素数猜想 素数p与素数p2有无穷多对 孪生素数的公式(详见百度百科:孪生素数公式) 利用素数的判定法则,可以得到以下的结论:“若自然数q与q2都不能被任何不大于的素数 整除,则q与q 2都是素数”…

【Python机器学习】k均值聚类——矢量量化,或者将k均值看作分解

虽然k均值是一种聚类算法,但在k均值和分解方法之间存在一些相似之处。k均值尝试利用簇中心来表示每个数据点,可以看作仅用一个分量来表示每个数据点,该分量由簇中心给出。这种观点将k均值看作是一种分解方法,其中每个点用单一分量…

BUU XXE COURSE 1 1 解题过程

通过使用BurpSuite工具抓包可以得出此题使用的是XML注入。 XML原理 xml是一种类似与html的文本标记语言,与HTML不同的是,xml的作用是传输数据,而不是显示数据。 xml语言是定义一个根元素,下面跟上若干对子元素。 XML DTD 为了规…

fot循环语句

概念: 循环是一种重复执行一段代码的结构,只要满足循环的条件,会一种执行这个代码。 循环条件:在一定范围内,按照指定的次数来执行循环 循环体:在指定的次数内,执行的命令序列。只要条件满足…

程序猿大战Python——面向对象——继承进阶

方法重写 目标:掌握方法的重写。 当父类的同名方法达不到子类的要求,则可以在子类中对方法进行重写。语法: class 父类名(object):def 方法A(self):代码... class 子类名(父类名):def 方法A(self):代码... 例如,一起来完成&…

【云原生】Docker可视化工具Portainer使用详解

目录 一、前言 二、docker可视化管理概述​​​​​​​ 2.1 什么是docker可视化管理 2.1.1 Docker可视化管理常用功能 2.2 为什么需要docker可视化管理工具 2.3 docker可视化工具带来的好处 三、常用的docker容器可视化管理工具解决方案 3.1 Portainer 3.2 Rancher 3…

快速业务建模

一句话故事 培训学院进行新季度招生工作,出计划后教务处审批,教学秘书下发计划,班主任手机名单审核后完成计划 用户故事 角色 时间线 动作为动名词 业务建模 多次建模,模型是否能完成业务

【解决方案】智慧园区解决方案(配套源码)

智慧园区整体解决方案-综合运营管理系统 1. 园区现状与发展机遇 2. 智慧园区愿景 3. 智慧解决方案架构 4. 智慧园区各子系统介绍 5. 智慧园区建设意义 楼宇管理,物业管理,消防管理,巡检管理,门禁管理,停车管理等综合实…

VMWARE安装Centos8,并且使用ssh连接虚拟机

VMWARE安装Centos8,并且使用ssh连接虚拟机 安装VMWARE安装Centos 8SSH连接 安装VMWARE 参考这篇文章: https://blog.csdn.net/weixin_74195551/article/details/127288338 安装Centos 8 首先在aliyun镜像仓库下载: https://mirrors.aliyun.com/centos/8/isos/x86_64/ 我下载…

练手代码之使用Python实现合并PDF文件

如果你有合并PDF的需要,你会怎么办 我们无所不能的程序员会选择写一个Python代码来实现(谁会这么无聊?是我),如果真的有PDF操作需要,我推荐你使用PDF Expert这个软件哈~ 话不多说直接上代码: …

FuTalk设计周刊-Vol.030

🔥AI漫谈 热点捕手 1、ChatGPT王炸升级!更强版GPT-4上线,API定价打骨折,发布现场掌声没停过 ChatGPT,今天裂变成无数个GPT。OpenAI在首届开发者日上,正式公布自定义GPT。还将上线“GPT商店”,…

html做一个画热图的软件

完整示例 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>热图生成器</title><script src"https://cdn.plot.ly/plotly-latest.min.js"></script><style>body …

基于Java的学生成绩管理系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术&#xff0c;B/S结构 工具&#xff1a;MyEclipse&#xff0c;MySQL 系统展示 首页 个人中…

TDA4VH高速路线指南和接口设计概要

TDA4VH 高速链路设计指南阅读及考虑 0、说明 本人目前做相关域控制器相关内容&#xff0c;目前正在研究TDA4的开发&#xff0c;目前正在对高速电路的的相关设计进行考虑&#xff0c;下面对TI官方提供的高速电路的设计的开发文档进行学习和分享: 1、高速系统架构介绍及PCB阻抗…

【C语言】顺序表(下卷)

本文继续讲顺序表上卷未讲完的相关内容。&#xff08;简短的补充&#xff09; 在指定位置之前插入数据 test.c SeqList.c SeqList.h //在指定位置之前插入数据 void SLInsert(SL* ps, int pos, SLDataType x);在指定位置删除数据 test.c SeqList.c SeqList.h //在指定位…

跨平台免费流程图(思维导图)制作工具 draw.io v24.6.3(可离线)

在当今快节奏的工作环境中&#xff0c;有效地传达复杂信息和工作流程至关重要。流程图和思维导图是两种强大的视觉工具&#xff0c;它们帮助我们清晰地表达想法&#xff0c;理解复杂的系统&#xff0c;并协作完成项目。可以帮助我们清晰地展示信息和逻辑关系。然而&#xff0c;…

无需破解,打开就是旗舰版!

在当今快节奏的工作环境里&#xff0c;有效的视觉沟通变得至关重要。流程图、思维导图、组织结构图等图表能够帮助我们以清晰、直观的方式传达复杂信息。而Wondershare Edraw Max正是这样一款强大的绘图工具&#xff0c;它能够帮助用户轻松创建各种专业图表。 软件链接&#x…

Spring Boot 快速入门2 ——SpringBoot运行原理分析

一、SpringBoot运行原理 父依赖 我们再查看 Spring Boot 项目中 pom.xml 可以看出&#xff0c;所有的 Spring Boot 项目 直接或间接的 依赖于一个 父项目 spring-boot-starter-parent &#xff0c;主要是管理项目的资源及其插件。 <parent><groupId>org.sprin…

Linux 时区设置函数 tzset()【man 3 tzset】

1. NAME&#xff08;名&#xff09; tzset, tzname, timezone, daylight - 初始化时间转换信息 2. SYNOPSIS&#xff08;概要&#xff09; #include <time.h>void tzset(void);extern char *tzname[2]; extern long timezone; extern int daylight;glibc的功能测试宏要…