python脚本实现短剧配音

news/2026/1/26 23:57:04/文章来源:https://www.cnblogs.com/ranjiang/p/19535900

1 功能描述

输入:小说文本(txt格式),通过python库函数生成音频文件(MP3格式),配音可通过在文本中加入指定提示词切换不同音源。

2 实现方式

有两种实现方式:
(1)tts库:可以离线生成,可调整生成音频的语速,但生成的音频机械感重,通常情况下仅有一种windows系统自带的声音引擎SAPI5,可以自行安装其他语音包来切换音源;
(2)edge-tts库:本质是调用edge浏览器的的音源完成配音,所以需要安装edge浏览器并联网,生成的音频富有感情。

3 功能实现

3.1 tts库生成

(1)安装支持包

pip install pyttsx3

(2)创建示例文稿testfile.txt

这是一段示例文稿,文稿内容可以自定义。

(3)创建生成脚本pydemo-tts.py
脚本文件要与示例文稿testfile.txt在同一路径下,运行脚本生成的音频也会保存到当前路径下。

点击查看代码
import pyttsx3INPUT_FILE = "testfile.txt"
TEMPOUTPUT_DIR = "outputAudios"
OUTPUT_FILE = "generatefile.mp3"        #可以生成mp3格式或wav格式with open(INPUT_FILE, "r", encoding="utf-8") as f:text = f.read()engine = pyttsx3.init()
# engine.say(text)     #可以在生成时播放生成的语音
# rate:设置语速
# volume:设置音量
# voice:设置声音引擎
engine.setProperty('rate', 180)   # 语速
engine.setProperty('volume', 0.9) # 音量
engine.save_to_file(text,OUTPUT_FILE)
engine.runAndWait()
print("音频文件已生成!")

(4)运行效果

image

image

3.2 edge-tts库生成

3.2.1 环境配置

(1)若未安装Microsoft edge浏览器则需要先安装浏览器。
(2)安装支持包:
① 直接使用pip自动安装edge-tts包:

pip install edge-tts

② 我的程序脚本中,会根据提示词切换不同音源,生成多个音频,还需要安装ffmpeg将多个音频合成一个,ffmpeg包的的zip下载地址:https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-essentials.zip
下载后解压,我的解压路径如下:
image
③ 将...\pack\ffmpeg-8.0.1-essentials_build\bin路径添加到环境变量PATH中:
image
在CMD中输入ffmpeg -version可以验证是否配置成功,成功可正确输出版本号:
image

④ 安装pydub

pip install pydub

3.2.2 生成脚本

(1)创建示例文稿testfile.txt

【旁白】这是一段示例文稿,文稿内容可以自定义。
【男一】这是男一的声音。
【女一】这是女一的声音。
【男二】这是男二的声音。
【女二】这是女二的声音。

(2)创建生成脚本dubscript.py

点击查看代码
from pydub import AudioSegment
import asyncio
import edge_tts
import re
import os
from pydub import AudioSegment  # 导入音频处理库
import imageio_ffmpeg# --- 配置区域 ---
VOICE_PROFILES = {"女一": {"voice": "zh-CN-XiaoyiNeural"},      # 晓伊,声音稍显成熟知性"女二": {"voice": "zh-CN-XiaoxiaoNeural"},  # 晓晓,最常用,声音标准、温柔,适合大多数场景# "女三": {"voice": "zh-CN-XiaohanNeural"},  # 晓涵,比较甜美、活泼"男一": {"voice": "zh-CN-YunxiNeural"},       # 云希,声音比较稳重,适合纪录片或男声旁白"男二": {"voice": "zh-CN-YunyangNeural"},     # 云扬,听起来像新闻主播,比较正式"男三": {"voice": "zh-CN-YunjianNeural"},     # 云健,沉稳,适合讲故事"旁白": {"voice": "zh-CN-YunxiNeural"}        # 云希,声音比较稳重,适合纪录片或男声旁白
}INPUT_FILE = "testfile.txt"
TEMPOUTPUT_DIR = "outputAudios"
OUTPUT_FILE = "generatefile.mp3"
os.makedirs(TEMPOUTPUT_DIR, exist_ok=True)
# 用于存储生成的音频文件路径
generated_files = []# 异步函数:调用edge_tts库接口函数文本转语音
# text:输入文本字符串
# voice:选择声音音源
# output_file:生成的输出音频文件
async def text_to_speech(text, voice, output_file):communicate = edge_tts.Communicate(text, voice)await communicate.save(output_file)return output_file# 函数:调用ffmpeg库函数将多个音频合成一个
# file_list:音频列表
# output_path:合成视频输出路径
def merge_audio_files_ffmpeg(file_list, output_path):print("正在使用 FFmpeg 合并音频...")# 1. 创建一个临时文件列表 txt,告诉 ffmpeg 要合并哪些文件# 注意:Windows 路径中如果有空格或特殊字符,需要用单引号括起来with open("temp_list.txt", "w", encoding="utf-8") as f:for file in file_list:# 写入格式:file 'C:/path/to/audio.mp3'f.write(f"file '{os.path.abspath(file)}'\n")# 2. 构建 FFmpeg 命令# -f concat: 告诉 ffmpeg 使用拼接模式# -safe 0: 允许使用绝对路径# -c copy: 直接复制流,不重新编码(速度快,无损质量)cmd = f'ffmpeg -f concat -safe 0 -i temp_list.txt -c copy "{output_path}"'# 3. 执行命令print(f"执行命令: {cmd}")os.system(cmd)# 4. 清理临时文件if os.path.exists("temp_list.txt"):os.remove("temp_list.txt")print(f"合并完成!最终音频: {output_path}")# 异步函数:调用text_to_speech将INPUT_FILE文本转换为音频存储到TEMPOUTPUT_DIR路径下
async def process_novel_script():global generated_fileswith open(INPUT_FILE, "r", encoding="utf-8") as f:text = f.read()# 正则表达式:用于识别音源提示pattern = r'【([^】]+)】([^【]+)'matches = re.findall(pattern, text)tasks = []for i, (character, dialogue) in enumerate(matches):clean_dialogue = dialogue.strip()# 选择声音if character in VOICE_PROFILES:voice_name = VOICE_PROFILES[character]["voice"]else:voice_name = VOICE_PROFILES["旁白"]["voice"]  # 默认旁白output_file = os.path.join(TEMPOUTPUT_DIR, f"segment_{i:03d}.mp3")generated_files.append(output_file)  # 记录文件名,用于后续合并# print(f"[{character}] -> {clean_dialogue}")task = text_to_speech(clean_dialogue, voice_name, output_file)tasks.append(task)# 先生成所有音频片段await asyncio.gather(*tasks)print("所有音频片段生成完毕。")if __name__ == "__main__":# 运行异步处理asyncio.run(process_novel_script())# 合并音频# 检查是否有生成的文件if generated_files:# 确保文件按顺序排列(因为文件名有000, 001编号)generated_files.sort()merge_audio_files_ffmpeg(generated_files, OUTPUT_FILE)else:print("未生成任何音频文件。")

(3)运行效果
image

image

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

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

相关文章

洛谷 P9100 [PA 2020] Miny 题解

这道题难点在于状态设计。考虑线性 DP,设 dpidp_idpi​ 为仅考虑前 iii 个地雷且钦定第 iii 个不引爆的方案数。这样设计的好处在于 iii 前面的地雷一定不会引爆 iii 后面的,从而满足无后效性。 注意需要在左右无穷远处各添加一个爆炸半径无穷大的哨兵地…

Java应用实例:简易背单词程序(更新)

一、预期实现功能 V1.0: 准备数据: 找到 单词与翻译的对照数据 存入到文件中 在程序中读取文件中的数据V2.0: 1: 随机抽取单词,去掉其中某个字母,要求用户输入这个字母填空 2:给出中文翻译,输入单词 实现拼…

初识线程:带你理解程序运行的基本流程

一、基本概念开发程序是为了解决问题1.程序一个存在磁盘中的程序(一份文件 代码文件数据文件)不能解决问题2.进程正在运行中的程序 代码和数据 都在内存中可以解决问题:通过(代码-计算机指令)调度计算机资源&#xf…

后端开发效率翻倍:IntelliJ IDEA的5个“神级插件

一、GitToolBox:Git协作效率加速器功能概述:增强IDEA原生Git功能,将版本控制操作无缝集成到IDE中,避免频繁切换命令行。 核心作用:实时Blame信息:点击代码行右侧显示最近修改者、提交时间和摘要&#xff0c…

Zookeeper在大数据实时报表系统中的应用

Zookeeper在大数据实时报表系统中的应用 关键词:Zookeeper、大数据、实时报表系统、分布式协调、一致性协议、分布式锁、元数据管理 摘要:本文深入探讨Zookeeper在大数据实时报表系统中的核心应用场景,包括分布式协调、配置管理、集群节点管理…

063.经典搜索,剪枝

include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=25; int n; vectorwords; int cnt[N]; char st; int ans=0; void dfs(string cur){ ans=max(ans,(int)cur.size()); for(int i…

从零开始学大模型核心:向量嵌入技术完全指南

文章全面介绍了向量嵌入技术在大模型中的应用&#xff0c;包括词嵌入、文档嵌入、多模态嵌入等多种类型&#xff0c;以及向量索引、存储优化和相似度计算等关键技术。文章详细阐述了嵌入与向量数据库的协同关系&#xff0c;以及在大规模语义搜索、推荐系统、异常检测和RAG等场景…

CF2029G Balanced Problem

题目大意: 有一个长度为 \(n\) 的数组 \(a\) 和一个长度为 \(n\) 的数组 \(c_{i}\),初始全都为 \(0\),有两种操作,一种是前缀加 \(1\),一种是后缀加 \(1\)。 已经进行了 \(m\) 次操作(已给定),现在对于每个 \(…

【技术干货】大模型记忆机制进化全攻略:从存储到经验的AI认知革命

本文解析了LLM智能体记忆机制的三阶段进化&#xff1a;从基础存储到反思提炼&#xff0c;再到经验抽象。这一进化解决了AI在多步骤任务中的逻辑断裂、无法持续学习等痛点&#xff0c;通过主动探索和跨轨迹抽象等技术突破&#xff0c;使AI从"单次响应工具"升级为"…

1.5万字硬核AI架构指南:从单体智能到系统智能的实战设计

正文开始&#xff1a; 回顾这两年的 AI 发展轨迹&#xff0c;你会发现两条截然不同却又并行不悖的主线&#xff1a; 一条是造脑路线&#xff1a;基础模型层&#xff08;Foundation Models&#xff09;的狂奔&#xff0c;各大厂商拼参数、拼算力&#xff0c;目标是通用人工智能…

双非二程序员的大模型逆袭之路:RAG与Agent技术学习指南

本文探讨双非二本科生在大模型应用开发领域的就业前景&#xff0c;指出尽管学历存在挑战&#xff0c;但行业对RAG和Agent技术人才需求旺盛&#xff0c;更看重实际技术能力而非学历。文章分析了企业招聘要求、薪资前景&#xff0c;并提供了系统学习路径&#xff0c;包括Python编…

大模型应用工程师学习路线:从提示词工程到AI系统构建,年薪50w+技能全攻略_这是一份大模型应用学习路线!(附学习资料)

本文详细介绍了大模型应用工程师的完整学习路线&#xff0c;涵盖提示词工程、检索增强生成(RAG)、模型微调、系统部署及AI项目实践五大核心技术。随着大模型与各行业深度融合&#xff0c;应用工程师年薪可达50w。学习路线从基础到进阶&#xff0c;强调实践落地&#xff0c;帮助…

AARONIA(安诺尼)PBS 1 与 PBS 2 近场探头 —— 精准定位电磁干扰源

AARONIA(安诺尼)PBS 1 与 PBS 2 近场探头 —— 精准定位电磁干扰源的专业工具 在电磁兼容(EMC)预测试、电路调试及故障诊断中,快速锁定近场辐射源是提升产品可靠性的关键一步。AARONIA(安诺尼)推出的 PBS 1 与 …

20260126 之所思 - 人生如梦

20260126 之所思做的好的事:1. 天气寒冷干燥,脖子后面长了两颗痘痘,可能是在发育期,扭动脖子就会很疼,要是放在以前肯定是手痒将其挤掉,然后引发炎症,一发不可收拾。以往身体的疼痛与不适还会引起心情烦躁,干事…

mysql day2

sql 语句简单介绍sql语句执行顺序 FROM/JOIN → WHERE → GROUP BY → HAVING → 窗口函数(OVER) → SELECT → DISTINCT → ORDER BY → LIMIT . . . 简单的用法 1. 数据库操作创建数据库 create database db1; 使用…

YOLOv8改进 - 注意力机制 | SENetV2: 用于通道和全局表示的聚合稠密层,结合SE模块和密集层来增强特征表示

前言 本文介绍了将SENetV2与YOLOv8结合的方法&#xff0c;以提升图像分类性能。SENetV2是结合Squeeze-and-Excitation&#xff08;SE&#xff09;模块和密集层的图像分类模型&#xff0c;引入聚合稠密层用于通道和全局表示。其SE模块重新校准通道特征&#xff0c;密集层优化特…

21点,如何计算胜率高达75%

算法原理低牌&#xff08;2-6&#xff09;&#xff1a;1分低牌&#xff08;2-6&#xff09;在21点中通常对玩家有利&#xff0c;因为它们更可能帮助玩家接近21点&#xff08;如16218&#xff0c;16319等&#xff09;&#xff0c;而不会轻易导致爆牌。因此&#xff0c;当低牌被打…

干瞪眼游戏胜率较高的玩法分析

### **干瞪眼游戏胜率较高的玩法分析**在干瞪眼游戏中&#xff0c;玩家需要通过合理出牌、灵活运用牌型和策略性保留关键牌来提高胜率。以下是胜率较高的玩法策略&#xff1a;---#### **1. ** **炸弹的灵活运用** - **核心作用**&#xff1a;炸弹&#xff08;四张相同牌&#x…

中国船级社信息开发咨询中心 APP开发工程师职位深度解析与技术面试指南

中国船级社信息开发咨询中心 APP开发工程师 职位信息 岗位职责: 1、掌握所参与工作涉及的船检业务以及办公业务; 2、移动应用以及微信小程序的需求调研、分析、文档编制工作; 3、移动应用以及微信小程序的编码开发及单元测试工作; 4、移动应用以及微信小程序使用培训、技术…

北航杭州创新研究院移动客户端/前端开发工程师岗位深度解析与面试指南

北京航空航天大学杭州创新研究院 移动客户端/前端开发工程师 职位信息 有意向人员请前往北航杭研院人才招聘网(杭研院官网→招才引智→人才招聘网)注册,登陆填写信息后投递,每人限报1个岗位。 岗位描述: 1.负责移动端 APP(Android)的设计、开发与维护,了解ios/鸿蒙开发;…