您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Python中如何將ppt制作成配音視頻課件,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
老猿從來沒有錄播個視頻課件,但最近有要求在一周內必須錄制一個視頻課件,為此花了3天時間準備ppt,花了一個小時錄播了一個20多分鐘的課件。
由于第一次干這個活,講課時情緒還是有點緊張,導致錄播的語音出現了各種重復、不該有的間斷、兩頁切換時課件講解過快、部分詞語發音不準等問題,導致效果一團糟。
為了解決這些問題,又使用剪輯軟件進行了剪輯,光剪輯就花了2天時間,結果效果還是不好,最后想到了一個辦法,就是廢掉原錄播材料,將ppt導出成圖像,然后逐頁錄音,再使用合成軟件將圖像和音頻逐一匹配,再進行制作。花了40多分鐘逐頁錄音并試聽,最后花了半天時間制作和輸出,終于趕上最后的截止時間前上交了視頻。如果最開始就用這個方法,可以節省大部分時間。
基于上述過程,老猿又想到最后這個處理過程完全不需要使用合成軟件,而是使用Moviepy是否更好呢?今天付諸行動,發現使用Moviepy進行合成比圖形操作界面的合成軟件效果更好,完美地解決了音頻和ppt材料的協同問題。下面就詳細介紹一下這個過程,供ppt視頻課件制作生手提供一個可以高效制作視頻的方法。
打開ppt,選擇:文件 --> 另存為,保存類型選擇為PNG或jpg,如圖:
然后點擊保存,出現:
選擇“每張幻燈片”。
這樣就可以將每頁ppt導出成圖片了,如:
相關圖片會輸出到一個單獨的目錄,以“幻燈片XX.png”等形式逐頁輸出保存。
對照ppt每頁的內容,將該頁講解的語音使用手機錄音軟件等方式錄制成一個個音頻文件,下面是老猿錄制的音頻文件目錄:
注意,在以上錄音時,第18頁和20頁錄制成了2段,這種方式處理和其他頁面不一樣,是不適合用程序來處理的,除非對此針對性的改造。
代碼的說明與注釋,不單獨進行補充說明,完整代碼如下:
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制作成配音視頻課件”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。