写点什么

用 Python 快速将 ppt 制作成配音视频课件的方法

用户头像
老猿Python
关注
发布于: 5 小时前
用Python快速将ppt制作成配音视频课件的方法

☞ ░ 老猿Python博文目录

一、引言

老猿从来没有录播个视频课件,但最近有要求在一周内必须录制一个视频课件,为此花了 3 天时间准备 ppt,花了一个小时录播了一个 20 多分钟的课件。


由于第一次干这个活,讲课时情绪还是有点紧张,导致录播的语音出现了各种重复、不该有的间断、两页切换时课件讲解过快、部分词语发音不准等问题,导致效果一团糟。


为了解决这些问题,又使用剪辑软件进行了剪辑,光剪辑就花了 2 天时间,结果效果还是不好,最后想到了一个办法,就是废掉原录播材料,将 ppt 导出成图像,然后逐页录音,再使用合成软件将图像和音频逐一匹配,再进行制作。花了 40 多分钟逐页录音并试听,最后花了半天时间制作和输出,终于赶上最后的截止时间前上交了视频。如果最开始就用这个方法,可以节省大部分时间。


基于上述过程,老猿又想到最后这个处理过程完全不需要使用合成软件,而是使用 Moviepy 是否更好呢?今天付诸行动,发现使用 Moviepy 进行合成比图形操作界面的合成软件效果更好,完美地解决了音频和 ppt 材料的协同问题。下面就详细介绍一下这个过程,供 ppt 视频课件制作生手提供一个可以高效制作视频的方法。

二、ppt 视频课件制作过程

2.1、将 ppt 保存为一张张图像

打开 ppt,选择:文件 --> 另存为,保存类型选择为 PNG 或 jpg,如图:



然后点击保存,出现:



选择“每张幻灯片”。这样就可以将每页 ppt 导出成图片了,如:



相关图片会输出到一个单独的目录,以“幻灯片 XX.png”等形式逐页输出保存。

2.2、按页录音

对照 ppt 每页的内容,将该页讲解的语音使用手机录音软件等方式录制成一个个音频文件,下面是老猿录制的音频文件目录:



注意,在以上录音时,第 18 页和 20 页录制成了 2 段,这种方式处理和其他页面不一样,是不适合用程序来处理的,除非对此针对性的改造。

2.3、编写代码进行合成

代码的说明与注释,不单独进行补充说明,完整代码如下:


from  moviepy.editor import *import os,traceback
def isdigit(c): return c>='0' and c<='9'
def getPattern(patternString): """ :param patternString: 含有模式串的字符串,模式串仿C语言整型输出格式,类似于:%d、%02d等 :return: 返回将patternString拆分成三段的一个列表,三个元素分别是:模式串前面的字符串、模式串(含百分号、数字和d)、模式串后面的字符串,如果没有找到模式串则返回None """ patternIndex = patternString.index("%") if patternIndex<0: print("模式字符串中未发现模式匹配符:%") return None matched = False for patternEnd in range(patternIndex+1,len(patternString)): if patternString[patternEnd]in'dD': matched = True break else: if not isdigit(patternString[patternEnd]): print("模式字符串中的模式存在非数字") return None if matched: return [patternString[:patternIndex],patternString[patternIndex:patternEnd+1],patternString[patternEnd+1:]] else: print("模式字符串中的模式不是字母d结尾") return None
def composePPTImgsAndSounds(imgFilePattern,soundFilePattern,startSeq=1,endSeq=None): """ :param imgFilePattern: 图像文件模式,要求图像文件中必须含文件序号,序号采用%d、%02d/%03d的方式来识别 :param soundFilePattern:音频文件格式,要求文件中必须含文件序号,序号采用%d、%02d/%03d的方式来识别 :param startSeq:文件序列号其实值,一般为0或1 :param endSeq:文件序列号结束值,可以不填 :return:生成的视频 """ if endSeq is None:endSeq=9999999 #当对应序号找不到文件时结束 patterns = getPattern(imgFilePattern) if patterns is None: print('图像文件名不符合模式格式要求') return None else: imgPrefix,imgPattern,imgPostfix = patterns patterns = getPattern(soundFilePattern) if patterns is None: print('音频文件名不符合模式格式要求') return None else: soundPrefix, soundPattern, soundPostfix = patterns clips = [] try: for seq in range(startSeq,endSeq): imgFName = f"{imgPrefix}{seq:{imgPattern[1:]}}{imgPostfix}" soundFName = f"{soundPrefix}{seq:{soundPattern[1:]}}{soundPostfix}"
if os.path.exists(soundFName) and os.path.exists(imgFName): soundClip = AudioFileClip(soundFName) imgClip = ImageClip(imgFName).set_duration(soundClip.duration).set_fps(2).set_audio(soundClip) clips.append(imgClip) else: if seq: print(f"音视和图像文件加载结束,最后一个文件的序号为{seq}") break else: print(f"图像文件{imgClip}或音频文件{soundClip}不存在") return None
except Exception as e: print(f"加载音频和图像文件失败:\n{e}\n{traceback.format_exc()}") return None
print("输出视频文件....") clip = concatenate_videoclips(clips,'compose') clip.write_videofile(r"C:\temp\ppt.mp4",threads=8) print("视频文件已经生成") return clip

composePPTImgsAndSounds(r'F:\bak\pr\大H\十百千\视频制作\5G在线计费动态授权机制介绍3.9\幻灯片%d.PNG',r'C:\temp\录音文件\p%d.m4a')
复制代码


如果不了解 Moviepy 的,请参考《 Python音视频剪辑库MoviePy1.0.3中文教程导览及可执行工具下载》的导览式介绍。

三、效果

使用该方式制作的视频,比图形界面合成软件制作的视频效果更流畅、大小更小、制作时间也更短,大小大概是图形界面视频合成软件的不到十分之一,视频输出时间是图形界面合成软件手工输出的四分之一,还省了手工去进行合成剪辑的过程(非熟练人员一般需要 1-2 个小时),老猿 20 分钟的视频课,含录音、试听及部分重录时间,整个制作过程不到 70 分钟(不含代码编写时间),是不是特别好用?


不过注意,老猿上面的案例处理到第 18 页时就认为课件完结了,要将整个课件处理完,需要合并 18 页和 20 页的音频输出到其他音频文件类似的音频文件中。

四、小结

本文介绍了一种 ppt 视频课件快速制作的方法,通过将 ppt 输出成一张张图片,然后逐页配音,最后使用 Moviepy 将其合成输出,课件制作又快又好。由于采用了分页录音的方式,对于讲解不好的地方很快就可以更换,因此比期望一次性录播然后剪辑的效果要好很多,同时输出的视频文件小、输出快。

写博不易,敬请支持:

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!


如对文章内容存在疑问,可在博客评论区留言,或关注博主微信公号发消息咨询。


更多相关 moviepy 知识的介绍请参考 Python音视频剪辑库MoviePy1.0.3中文教程导览及可执行工具下载》的导览式介绍。

关于老猿的付费专栏

  1. 付费专栏《 使用PyQt开发图形界面Python应用》专门介绍基于 Python 的 PyQt 图形界面开发基础教程,对应文章目录为《 使用PyQt开发图形界面Python应用专栏目录》;

  2. 付费专栏《 moviepy音视频开发专栏 )详细介绍 moviepy 音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《moviepy音视频开发专栏文章目录》;

  3. 付费专栏《 OpenCV-Python初学者疑难问题集》为《 OpenCV-Python图形图像处理 》的伴生专栏,是笔者对 OpenCV-Python 图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于 OpenCV-Python 初学者比较深入地理解 OpenCV,对应文章目录为《 OpenCV-Python初学者疑难问题集专栏目录

  4. 付费专栏《Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取 CSDN 文章信息、博主信息、给文章点赞、评论等实战内容。


前两个专栏都适合有一定 Python 基础但无相关知识的小白读者学习,第三个专栏请大家结合《 OpenCV-Python图形图像处理 》的学习使用。


对于缺乏 Python 基础的同仁,可以通过老猿的免费专栏《 专栏:Python基础教程目录》从零开始学习 Python。


如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。


如对文章内容存在疑问,可在博客评论区留言,或关注:老猿 Python 微信公号发消息咨询。

老猿 Python,跟老猿学 Python!

☞ ░ 前往老猿Python博文目录

发布于: 5 小时前阅读数: 3
用户头像

老猿Python

关注

学问无遗力,功夫老始成。 2020.08.21 加入

CSDN 2020年博客之星季军、高级程序员、超50万行C语言项目开发经验 擅长领域:Python语言、PyQt界面程序开发、Moviepy音视频剪辑、OpenCV-Python图像处理、爬虫、5G、区块链、人工智能数学基础

评论

发布
暂无评论
用Python快速将ppt制作成配音视频课件的方法