溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Python中如何將ppt制作成配音視頻課件

發(fā)布時(shí)間:2021-06-21 10:45:50 來(lái)源:億速云 閱讀:137 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)Python中如何將ppt制作成配音視頻課件,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

    一、引言

    老猿從來(lái)沒(méi)有錄播個(gè)視頻課件,但最近有要求在一周內(nèi)必須錄制一個(gè)視頻課件,為此花了3天時(shí)間準(zhǔn)備ppt,花了一個(gè)小時(shí)錄播了一個(gè)20多分鐘的課件。

    由于第一次干這個(gè)活,講課時(shí)情緒還是有點(diǎn)緊張,導(dǎo)致錄播的語(yǔ)音出現(xiàn)了各種重復(fù)、不該有的間斷、兩頁(yè)切換時(shí)課件講解過(guò)快、部分詞語(yǔ)發(fā)音不準(zhǔn)等問(wèn)題,導(dǎo)致效果一團(tuán)糟。

    為了解決這些問(wèn)題,又使用剪輯軟件進(jìn)行了剪輯,光剪輯就花了2天時(shí)間,結(jié)果效果還是不好,最后想到了一個(gè)辦法,就是廢掉原錄播材料,將ppt導(dǎo)出成圖像,然后逐頁(yè)錄音,再使用合成軟件將圖像和音頻逐一匹配,再進(jìn)行制作?;?0多分鐘逐頁(yè)錄音并試聽(tīng),最后花了半天時(shí)間制作和輸出,終于趕上最后的截止時(shí)間前上交了視頻。如果最開(kāi)始就用這個(gè)方法,可以節(jié)省大部分時(shí)間。

    基于上述過(guò)程,老猿又想到最后這個(gè)處理過(guò)程完全不需要使用合成軟件,而是使用Moviepy是否更好呢?今天付諸行動(dòng),發(fā)現(xiàn)使用Moviepy進(jìn)行合成比圖形操作界面的合成軟件效果更好,完美地解決了音頻和ppt材料的協(xié)同問(wèn)題。下面就詳細(xì)介紹一下這個(gè)過(guò)程,供ppt視頻課件制作生手提供一個(gè)可以高效制作視頻的方法。

    二、ppt視頻課件制作過(guò)程

     2.1、將ppt保存為一張張圖像

    打開(kāi)ppt,選擇:文件 --> 另存為,保存類(lèi)型選擇為PNG或jpg,如圖:

    Python中如何將ppt制作成配音視頻課件

    然后點(diǎn)擊保存,出現(xiàn):

    Python中如何將ppt制作成配音視頻課件

    選擇“每張幻燈片”。
    這樣就可以將每頁(yè)ppt導(dǎo)出成圖片了,如:

    Python中如何將ppt制作成配音視頻課件

    相關(guān)圖片會(huì)輸出到一個(gè)單獨(dú)的目錄,以“幻燈片XX.png”等形式逐頁(yè)輸出保存。

    2.2、按頁(yè)錄音

    對(duì)照ppt每頁(yè)的內(nèi)容,將該頁(yè)講解的語(yǔ)音使用手機(jī)錄音軟件等方式錄制成一個(gè)個(gè)音頻文件,下面是老猿錄制的音頻文件目錄:

    Python中如何將ppt制作成配音視頻課件

    注意,在以上錄音時(shí),第18頁(yè)和20頁(yè)錄制成了2段,這種方式處理和其他頁(yè)面不一樣,是不適合用程序來(lái)處理的,除非對(duì)此針對(duì)性的改造。

    2.3、編寫(xiě)代碼進(jìn)行合成

    代碼的說(shuō)明與注釋?zhuān)粏为?dú)進(jìn)行補(bǔ)充說(shuō)明,完整代碼如下:

    from  moviepy.editor import *
    import os,traceback
    
    def isdigit(c):
        return c>='0' and c<='9'
    
    def getPattern(patternString):
        """
        :param patternString: 含有模式串的字符串,模式串仿C語(yǔ)言整型輸出格式,類(lèi)似于:%d、%02d等
        :return: 返回將patternString拆分成三段的一個(gè)列表,三個(gè)元素分別是:模式串前面的字符串、模式串(含百分號(hào)、數(shù)字和d)、模式串后面的字符串,如果沒(méi)有找到模式串則返回None
        """
        patternIndex = patternString.index("%")
        if patternIndex<0:
            print("模式字符串中未發(fā)現(xiàn)模式匹配符:%")
            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("模式字符串中的模式存在非數(shù)字")
                    return None
        if matched: return [patternString[:patternIndex],patternString[patternIndex:patternEnd+1],patternString[patternEnd+1:]]
        else:
            print("模式字符串中的模式不是字母d結(jié)尾")
            return None
    
    def composePPTImgsAndSounds(imgFilePattern,soundFilePattern,startSeq=1,endSeq=None):
        """
        :param imgFilePattern: 圖像文件模式,要求圖像文件中必須含文件序號(hào),序號(hào)采用%d、%02d/%03d的方式來(lái)識(shí)別
        :param soundFilePattern:音頻文件格式,要求文件中必須含文件序號(hào),序號(hào)采用%d、%02d/%03d的方式來(lái)識(shí)別
        :param startSeq:文件序列號(hào)其實(shí)值,一般為0或1
        :param endSeq:文件序列號(hào)結(jié)束值,可以不填
        :return:生成的視頻
        """
        if endSeq is None:endSeq=9999999  #當(dāng)對(duì)應(yīng)序號(hào)找不到文件時(shí)結(jié)束
        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"音視和圖像文件加載結(jié)束,最后一個(gè)文件的序號(hào)為{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("視頻文件已經(jīng)生成")
        return clip
    
    
    composePPTImgsAndSounds(r'F:\bak\pr\大H\十百千\視頻制作\5G在線計(jì)費(fèi)動(dòng)態(tài)授權(quán)機(jī)制介紹3.9\幻燈片%d.PNG',r'C:\temp\錄音文件\p%d.m4a')

    如果不了解Moviepy的,請(qǐng)參考《 Python音視頻剪輯庫(kù)MoviePy1.0.3中文教程導(dǎo)覽及可執(zhí)行工具下載》的導(dǎo)覽式介紹。

    三、效果

    使用該方式制作的視頻,比圖形界面合成軟件制作的視頻效果更流暢、大小更小、制作時(shí)間也更短,大小大概是圖形界面視頻合成軟件的不到十分之一,視頻輸出時(shí)間是圖形界面合成軟件手工輸出的四分之一,還省了手工去進(jìn)行合成剪輯的過(guò)程(非熟練人員一般需要1-2個(gè)小時(shí)),老猿20分鐘的視頻課,含錄音、試聽(tīng)及部分重錄時(shí)間,整個(gè)制作過(guò)程不到70分鐘(不含代碼編寫(xiě)時(shí)間),是不是特別好用?

    不過(guò)注意,老猿上面的案例處理到第18頁(yè)時(shí)就認(rèn)為課件完結(jié)了,要將整個(gè)課件處理完,需要合并18頁(yè)和20頁(yè)的音頻輸出到其他音頻文件類(lèi)似的音頻文件中。

    關(guān)于“Python中如何將ppt制作成配音視頻課件”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI