一页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_fileself.audio_file = audio_fileself.duration_flag = duration_flagpassdef 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可以先把每一页生成短视频,然后再拼接的方式完成,这里就不做详细表述了。

本文链接:https://my.lmcjl.com/post/12800.html

展开阅读全文

4 评论

留下您的评论.