当前位置: 首页 > article >正文

基于python文案转语音并输出-自媒体等职业副业均可使用,不受他人限制

开发背景:
目前自媒体比较火爆,有很多书单、视频等推广方式可以作为副业盈利,之前每次搞的时候都需要不停的网上找一些在线文字转语音的平台将文案复制上去然后生成下载,好多还是付费的,挺无奈的,然后就想着自己能不能搞,然后的然后就有了下面的东西,
如果大家有此类需要,但是又不想运行代码及环境,请在该博客下回复 邮箱+文案,我生成后会单独发送到对应邮箱

先看效果:
在这里插入图片描述

# -*- coding: utf-8 -*-
import asyncio
import os
from edge_tts import Communicate
import time
# 调用合并视频和音频的函数
import mergeVideoAndVoice
from tqdm import tqdm  # 引入 tqdm 库用于显示进度条
#检测输入值
def get_non_empty_input(prompt):
    """
    获取用户输入的非空字符串,若输入为空则提示用户重新输入。
    """
    while True:
        value = input(prompt).strip()
        if value:
            return value
        else:
            print("输入不能为空,请重新输入。")
#文字转语音方法
async def text_to_speech(text, title, voice, voice_dir):
    try:
        beginTime = time.time()
        communicate = Communicate(text, voice)
        endTime = time.time()
        temp_audio_file = os.path.join(voice_dir, f"{title}.mp3.temp")
        # 计算耗时
        elapsedTime = endTime - beginTime
        # 打印耗时
        print(f"耗时: {elapsedTime} 秒")
        #进度条开始前记录下时间
        beginProceTime = time.time()
        formatted_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(beginProceTime))
        print(f"进度条开始: {formatted_time}")
        # 使用 tqdm 创建进度条
        with tqdm(total=100, desc="音频生成进度") as pbar:
            # 运行并等待语音合成完成并保存到临时文件
            await communicate.save(temp_audio_file)
            # 模拟进度更新
            for i in range(100):
                await asyncio.sleep(0.1)  # 模拟耗时操作
                pbar.update(1)
                # print(f"当前进度:{i}")
                if i == 99:
                    endProceTime = time.time()
                    formatted_time_end = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(endProceTime))
                    print(f"进度条结束: {formatted_time_end} 秒")
                    proceTime = endProceTime - beginProceTime
                    print(f"总耗时: {proceTime} 秒")

        final_audio_file = os.path.join(voice_dir, f"{title}.mp3")
        os.rename(temp_audio_file, final_audio_file)
        return final_audio_file
    except Exception as e:
        # 处理异常
        print(f"生成音频文件时发生错误: {e}")
        return None

async def main(videoRealPath, videoRealName, text):
    isNeedInput = get_non_empty_input("请确认音频保存路径是否需要输入 Y:需要 N:不需要 (不需要输入请确认脚本路径配置正确):  ")
    print("视频完整路径:" + videoRealPath + " 视频名称:" + videoRealName + "

http://www.kler.cn/news/283016.html

相关文章:

  • 从“云、边、端”的统一管理,为传统工厂数字化转型赋能的智慧地产开源了
  • OpenAI API Error: Resource not found - Text Summarization in NodeJS
  • QT中引入SQLITE3数据库
  • 自定义全局变量在SpringBoot的应用
  • 后端完成api顺序
  • 外卖霸王餐项目是什么?怎么搭建属于自己的外卖霸王餐小程序 ?
  • 灰度发布-介绍-全链路灰度实现
  • 由浅入深学习 C 语言:Hello World【提高篇】
  • 浏览器缓存
  • 网络安全-安全渗透简介和安全渗透环境准备
  • 【CSP:202109-2】非零段划分(Java)
  • 4.sklearn-K近邻算法、模型选择与调优
  • MySQL集群技术1——编译部署mysql
  • “重启就能解决一切问题”,iPhone重启方法大揭秘
  • 解决:无法从域控制器读取配置信息
  • 2024.8.29 C++
  • C#面:ASP.NET MVC 中还有哪些注释属性用来验证?
  • RKNPU2从入门到实践 ---- 【8】借助 RKNN Toolkit lite2 在RK3588开发板上部署RKNN模型
  • 设计模式--装饰器模式
  • 理解torch.argmax() ,我是错误的
  • 融资和融券分别是什么意思,融资融券开通后能融到多少资金?
  • Datawhale X 李宏毅苹果书 AI夏令营_深度学习基础学习心得Task2.2
  • Java 入门指南:Java NIO —— Selector(选择器)
  • 【hot100篇-python刷题记录】【搜索二维矩阵】
  • 分布式锁的实现:ZooKeeper 的解决方案
  • hive数据迁移
  • 低代码革命:JNPF平台如何简化企业应用开发
  • Linux 中的中断响应机制
  • TCP keepalive和HTTP keepalive区别
  • SCP拷贝失败解决办法