一页PPT自动生成短视频的研究

news2024/11/18 18:19:00

希望通过一些技术,将以前自己讲过的PPT转换成有解说的短视频,从而进行一些分发

旁白到语音

从文字转换成语音我们首先想到的就是TTS,这其中我也是用了各式各样的TTS,发现发音电子音非常强,听听起来很不舒服。后来发现很多云服务商都提供了文字转语音的功能,这样就是用过阿里云、华为云、科大讯飞等提供的一些服务,最后也放弃了,其实对这几个云服务没有完全的评价主要是因为付费。
最近chatGPT很火,也导致我直接想到借用AI解决这个问题。通过搜索我发现MockingBird,可以通过模拟我们提供的声音样本模拟一些发音。项目地址:MockingBird,但是MockingBird的安装并不顺利,下面我就将我的安装过程写在下面,有一些是来自官方github。

  • 安装 PyTorch,直接官网下载。如果GPU不支持CUDA,请默认选择。

  • 安装 ffmpeg:brew install ffmpeg就可以了

  • 安装了Anacoda,这样我就有了多环境的python。我是用Anacoda的UI界面来管理,挺方便的,都不用看文档,你看一下界面就知道怎么用了。

  • 使用Python3.8安装MockingBird,其他会遇见各式各样的问题,建议你也别折腾了,直接Python3.8(通过Anacoda的UI面积启动terminal),然后进入MockingBird代码所在目录pip install -r requirements.txt就可以等着安装依赖包了。

  • 本步骤可以跳过:如果你遇见了which is required to install pyproject.toml-based projects,那么无论你怎么pip install pyproject这个问题依旧存在,那么你需要打开另外一个terminal,然后输入xcode-select --install,等待安装完成就好了。这里就不告诉你安装的是什么了,你一看就知道了。

  • 再次pip install -r requirements.txt就可以等着安装依赖包就可以了。

  • 安装成功后,在MockingBird根目录执行python demo_toolbox.py,就可以尝试用它开始生成声音了

  • 这里还需要下一些先训练好的合成器(合成器可以在README-CN.md页面里找到)

  • 下载完合成器后,选择自己录制的一段语音(这段音频最好完整的一句话,不要随意截取,并且要在5到8秒之间效果最好。官方提供的合成器女生声音比男生声音更好生成)

  • 先选择自己的声音,然后点击synthesize only看一看生成的声纹,如果生成的声纹波纹状很明显,说明生成的发音就很清楚,否则再点击一下synthesize only重新生成,如果ok。点击Vocode only就可以听声了。我选择的合成器如下图中显示。

  • 点击Export按钮就可以到处音频了。(生成也建议一句一句的生成,效果会更好一点)

  • 多个导出的音频,我通过Audactivy这个软件进行的合成。

一页PPT到MP4

微软的PPT提供了导出视频功能,通过导出功能,选择导出格式为mp4完成导出。

ppt的每一页播放时长我就写了音频的时长(因为我设计的一页ppt就是一个视频)

利用moviepy库完成视频和音频的merge

利用moviepy库,给视频添加一个背景音乐,代码如下(Github仓库https://github.com/crisschan/video_merge_audio):

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
@File    :   video_merge_audio.py
@Time    :   2022/12/27 15:36:57
@Author  :   CrissChan 
@Version :   1.0
@Site    :   https://blog.csdn.net/crisschan
@Desc    :   利用moviepy库,给视频添加一个背景音乐
'''

from moviepy.editor import *

class VideoMergeAudio(object):
    
    def __init__(self,video_file,audio_file,duration_flag = 0) -> None:
        '''
        @des  :构造函数
        @params  :
                 video_file视频的绝对地址和文件名
                 audio_file音频的绝对地址和文件名
                 dration_flag如果是0,那么最终视频尝试以video_file长度为准
                             如果是1,那么最终视频尝试以audio_file长度为准
        @return  : None   
        '''
        self.video_file = video_file
        self.audio_file = audio_file
        self.duration_flag = duration_flag
        pass
    def merge(self):
        '''
        @des  :合并视频和音频
        @params  :
                 video_file视频的绝对地址和文件名
                 audio_file音频的绝对地址和文件名
                 duration_flag如果是0,那么最终视频尝试以video_file长度为准
                             如果是1,那么最终视频尝试以audio_file长度为准
        @return  : 返回合并后的视频文件的绝对地址
        '''
        video_clip = VideoFileClip(self.video_file)
        audio_clip = AudioFileClip(self.audio_file)
        if self.duration_flag == 0:
            final_clip = video_clip.set_audio(audio_clip).set_duration(video_clip.duration)
        else:
            final_clip = video_clip.set_audio(audio_clip).set_duration(audio_clip.duration)
        final_clip.write_videofile(self.video_file[:-4]+'_merge.mp4')


if __name__ == '__main__':
    vma = VideoMergeAudio('1.mp4','1.mp3',duration_flag=1)
    vma.merge()

这样我就可以完成了一页PPT生成短视频的功能,那么多页PPT可以先把每一页生成短视频,然后再拼接的方式完成,这里就不做详细表述了。

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

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

相关文章

Spring 事务和事务的传播机制

1.Spring 中事务的实现方式Spring 中的操作主要分为两类: 编程式事务 (了解)声明式事务编程式事务就是手写代码操作事务, 而声明式事务是利用注解来自动开启和提交事务. 并且编程式事务用几乎不怎么用. 这就好比汽车的手动挡和自动挡, 如果有足够的的钱, 大部分人应该都会选择自…

NPDP认证|如何实现产品的组合管理?

随着企业中研发项目类型和数量的增多,涉及的范围越来越宽广,内容越来越复杂,时效性也越来越强,传统的分散式的项目管理思想已经很难满足企业的需求。 为了使技术和资源能够得到有限的配置和利用,企业就需要把各种类型的研发项日进行有机的结合。 组合管理很重要吗? 答案是勿庸…

Vue知识点

Vue基础语法 插值操作 Mustache语法 可以直接写变量&#xff0c;也可以写简单的表达式 {{firstName lastName}}’ {{firstName lastName}} {{firstName}} {{lastName}} 其他指令使用 v-noce&#xff1a; <h2 v-once>{{message}}</h2> 某些情况下&#xff…

shell 脚本实现 k8s 集群环境下指定 ns 资源的 yaml 文件备份

shell 脚本实现 k8s 集群环境下指定 ns 资源的 yaml 文件备份需求说明功能实现shell 脚本实现shell 使用方式前置工具环境安装dump-k8s-yaml.sh 使用方式输入命令 bash ./dump-k8s-yaml.shdump-k8s-yaml.sh 应用举例dump-k8s-yaml.sh 输出日志信息参考文档需求说明 在基于 k8s…

【Java寒假打卡】Java基础-字符流

【Java寒假打卡】Java基础-字符流编码表字符串中的编码和解码问题字节流读取文本文件出现乱码的原因字符流读取中文的过程字符流写出数据字符流输出数据注意事项flush和close方法字符流读取数据案例-保存键盘录入的数据字符缓冲输入流字符缓冲输出流缓冲流的特有方法案例-读取文…

【算法】广度优先遍历 (BFS)

目录1.概述2.代码实现3.应用1.概述 &#xff08;1&#xff09;广度优先遍历 (Breadth First Search)&#xff0c;又称宽度优先遍历&#xff0c;是最简便的图的搜索算法之一。 &#xff08;2&#xff09;已知图 G (V, E) 和一个源顶点 start&#xff0c;宽度优先搜索以一种系…

让我用Python自制软件,看视频畅通无阻

前言 一个账号只能登录一台设备&#xff1f;涨价就涨价&#xff0c;至少还能借借朋友的&#xff0c;谁还没几个朋友&#xff0c;搞限制登录这一出&#xff0c;瞬间不稀罕了 这个年头谁还不会点技术了&#xff0c;直接拿python自制一个可以看视频的软件… 话不多说&#xff0…

终于弄懂了 非极大抑制 NMS

NMS的作用就是有效地剔除目标检测结果中多余的检测框&#xff0c;保留最合适的检测框。 以YOLOv5为例&#xff0c;yolov5模型的输入三个feature map的集合&#xff0c;加上batch的维度&#xff0c;也就是三维张量&#xff0c;即[batch&#xff0c;(p0∗p0p1∗p1p2∗p2)∗3&…

SWC步骤

纲要&#xff1a; SWC属于AUTOSAR的Component文件夹下&#xff0c;而Composition属于Composition文件夹下。 目录 1. Import "Data Type" and "Interface" information 2. Creat Software Component(SWC) 3. Create "Port" for this SWC 4.…

nexus raw 仓库代理(node-sass离线安装node-sass: Command failed)

问题背景 内网环境中使用 node 构建项目&#xff0c;项目中依赖了 node-sass&#xff0c;环境自动下载 node-saas 失败&#xff08;内网&#xff09;。 下面是构建 node-sass 的错误代码&#xff1a; [5/5] Building fresh packages... error /workspace/node_modules/node-…

nuxt概念

文章目录前言nuxt项目结构介绍网页导航文字显示&#xff08;商标&#xff09;package.jsonnuxt.config.js路由固定路由动态路由总结前言 首先了解下B2C模式&#xff0c;分前后台&#xff0c;后台一般为管理系统&#xff0c;不需要展示给过多的用户&#xff0c;而前台需要展示给…

2023年有哪些具备潜力的加密投资标的?

随着2022年一系列的黑天鹅事件&#xff08;Terra、Luna的暴雷、FTX、Three Arrows Capital等知名加密机构的破产&#xff09;&#xff0c;加密货币总市值已经从最高点的2.9万亿美元&#xff08;2021年的11月&#xff09;&#xff0c;下降到8500亿美元&#xff08;与2021年1月的…

NKOJ P7842 疫情防控

分析 这道题的本质就是找可以使得每座城市有且仅有一条道单行路进入该市的图有什么特点; 首先,我们假设图联通,则由于每个城市只有一条单行道可以进入,即一个城市必须有且仅有一条单行道与之配对,所以这个图至少要有nnn条边,即图中必须要有环才可以满足要求! 那如果图不连通…

Java多线程之读写锁ReentrantReadWriteLock类使用

在JDK中提供了一种读写锁ReentrantReadWriteLock类&#xff0c;相比ReentrantLock类&#xff0c;使用前者可以加快运行效率。ReentrantLock类是具有完全互斥排他的效果&#xff0c;即同一时间只有一个线程在执行ReentrantLock.lock()方法后面的任务&#xff0c;这样做虽然保证了…

【UE4 第一人称射击游戏】40-改变武器的可见性

上一篇&#xff1a;【UE4 第一人称射击游戏】39-“M4A1”武器设置本篇效果&#xff1a;步骤&#xff1a;打开“Weapon_M4A1”&#xff0c;删除带有“AK47”的那个骨架网格体打开事件图表&#xff0c;将“SkeletalMesh1”拖入打开“ThirdPersonCharacter”&#xff0c;在事件图表…

Docker:独具魅力的开源容器引擎

Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux 或 Windows操作系统的机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口&#…

MATLAB-控制系统模型之间的转换

系统的线性时不变&#xff08;LTI&#xff09;模型有传递函数&#xff08;tf&#xff09;模型、零极点增益&#xff08;zpk)模型和状态空间(ss&#xff09;模型,它们之间可以相互转换。模型之间的转换函数可以分为以下两类。第一类是把其他类型的模型转换为函数表示的模型自身&…

PHP多进程(一)

多进程的作用是一个程序启动多个进程。 一个程序启动起来本应该是一个进程&#xff0c;但它可作为父进程启动多个子进程来一起操作 形成并发操作 pcntl是php官方的多进程扩展,只能在linux环境使用 以下所有操作请在Linux环境下操作: 先认识两个函数,下面是官方文档地址: …

铜缆测试——近端和远端串扰(NEXT和FNEXT)

如果您非常熟悉铜缆测试&#xff0c;那么很可能听说过串扰——一对或一个通道上传输的信号对另外一对或一个通道产生不良影响的现象。(杂讯) 串扰会对具体的一对导线或整根电缆形成干扰&#xff0c;导致误码或数据无法传输。例如&#xff0c;您是否曾经在电话中听到有其他人说话…

马蹄集 数组最大公约数

给定一个由N个正整数组成的数组&#xff0c;求所有数组元素的最大公约数。 格式 输入格式&#xff1a;第一行输入数组长度N,第二行输入数组元素&#xff0c;整型 空格分隔。 输出格式&#xff1a;输出整型 #include <bits/stdc.h> using namespace std;int gcd(int a…