温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python中如何将ppt制作成配音视频课件

发布时间:2021-06-21 10:45:50 来源:亿速云 阅读:125 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关Python中如何将ppt制作成配音视频课件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

    一、引言

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

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

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

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

    二、ppt视频课件制作过程

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

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

    Python中如何将ppt制作成配音视频课件

    然后点击保存,出现:

    Python中如何将ppt制作成配音视频课件

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

    Python中如何将ppt制作成配音视频课件

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

    2.2、按页录音

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

    Python中如何将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页的音频输出到其他音频文件类似的音频文件中。

    关于“Python中如何将ppt制作成配音视频课件”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI