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

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

先到电子书资源网站搜索这个绘本名称,如果有电子书,可以直接下载,最好是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本左右英文绘本。

相关推荐
带电的小王17 分钟前
sherpa-ncnn:Linux(x86/ARM32/ARM64)构建sherpa-ncnn --语音转文本大模型
linux·语音识别·实时音视频·sherpa-ncnn
xiaoh_72 小时前
解决视频处理中的 HEVC 解码错误:Could not find ref with POC xxx【已解决】
python·ffmpeg·音视频
正在走向自律5 小时前
AI数字人:繁荣背后的伦理困境与法律迷局(8/10)
人工智能·python·opencv·语音识别·ai数字人·ai伦理与法律
灏瀚星空6 小时前
Python在AI虚拟教学视频开发中的核心技术与前景展望
人工智能·python·音视频
Everbrilliant8912 小时前
音视频之H.265/HEVC环路后处理
音视频·h.265·h.265/hevc·去方块滤波技术·h.265环路后处理·sao技术·h.265去方块滤波
飞桨PaddlePaddle12 小时前
Wan2.1和HunyuanVideo文生视频模型算法解析与功能体验丨前沿多模态模型开发与应用实战第六期
人工智能·算法·百度·音视频·paddlepaddle·飞桨·deepseek
EasyDSS15 小时前
视频监控从安装到优化的技术指南,视频汇聚系统EasyCVR智能安防系统构建之道
大数据·网络·网络协议·音视频
阿酷tony19 小时前
将视频生成视频二维码步骤
音视频·视频格式·视频二维码·视频生成二维码
9527华安19 小时前
国产紫光同创FPGA视频采集转SDI编码输出,基于HSSTHP高速接口,提供2套工程源码和技术支持
fpga开发·音视频·紫光同创·sdi·高速接口·hssthp