Python實(shí)現(xiàn)將多張圖片合成視頻并加入背景音樂(lè)
實(shí)現(xiàn)的思路:將準(zhǔn)備好的圖片通過(guò)opencv讀取出來(lái),并將其設(shè)置好幀數(shù)等參數(shù)后合成為無(wú)聲視頻。
最后通過(guò)moviepy編輯視頻將背景音樂(lè)加入到視頻中。
開(kāi)始之前還是需要說(shuō)明一下非標(biāo)準(zhǔn)庫(kù)的來(lái)源,因?yàn)橛行?kù)的名稱和需要導(dǎo)入模塊的名稱不一定就是一樣的。
import os # python標(biāo)準(zhǔn)庫(kù),不需要安裝,用于系統(tǒng)文件操作相關(guān) import cv2 # python非標(biāo)準(zhǔn)庫(kù),pip install opencv-python 多媒體處理 from PIL import Image # python非標(biāo)準(zhǔn)庫(kù),pip install pillow,圖像處理 import moviepy.editor as mov # python非標(biāo)準(zhǔn)庫(kù),pip install moviepy,多媒體編輯
要使用到什么模塊已經(jīng)敘述了,若是沒(méi)有的話安裝一下就可以了。接下來(lái)第一步就是將圖片素材準(zhǔn)備好來(lái)編寫(xiě)如何將圖片轉(zhuǎn)換成視頻。
def image_to_video(image_path, media_path): ''' 圖片合成視頻函數(shù) :param image_path: 圖片路徑 :param media_path: 合成視頻保存路徑 :return: ''' # 獲取圖片路徑下面的所有圖片名稱 image_names = os.listdir(image_path) # 對(duì)提取到的圖片名稱進(jìn)行排序 image_names.sort(key=lambda n: int(n[:-4])) # 設(shè)置寫(xiě)入格式 fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', 'V') # 設(shè)置每秒幀數(shù) fps = 2 # 由于圖片數(shù)目較少,這里設(shè)置的幀數(shù)比較低 # 讀取第一個(gè)圖片獲取大小尺寸,因?yàn)樾枰D(zhuǎn)換成視頻的圖片大小尺寸是一樣的 image = Image.open(image_path + image_names[0]) # 初始化媒體寫(xiě)入對(duì)象 media_writer = cv2.VideoWriter(media_path, fourcc, fps, image.size) # 遍歷圖片,將每張圖片加入視頻當(dāng)中 for image_name in image_names: im = cv2.imread(os.path.join(image_path, image_name)) media_writer.write(im) print(image_name, '合并完成!') # 釋放媒體寫(xiě)入對(duì)象 media_writer.release() print('無(wú)聲視頻寫(xiě)入完成!')
向合成后的無(wú)聲視頻中添加背景音樂(lè),背景音樂(lè)可以選擇從另外一段視頻中提取音頻。最后將提取到的音頻文件添加到該無(wú)聲視頻中。
def set_music(): ''' 合成視頻設(shè)置背景音樂(lè)函數(shù) :return: ''' print('開(kāi)始添加背景音樂(lè)!') # 初始化視頻文件對(duì)象 clip = mov.VideoFileClip('./media.mp4') # 從某個(gè)視頻中提取一段背景音樂(lè) audio = mov.AudioFileClip('./source.mp4').subclip(0, 83) # 將背景音樂(lè)寫(xiě)入.mp3文件 audio.write_audiofile('./background.mp3') # 向合成好的無(wú)聲視頻中添加背景音樂(lè) clip = clip.set_audio(audio) # 保存視頻 clip.write_videofile('./media.mp4') print('背景音樂(lè)添加完成!') # image_to_video('./images/', './media.mp4') set_music()
上述代碼塊已經(jīng)過(guò)素材完成測(cè)試,運(yùn)行沒(méi)有任何報(bào)錯(cuò)直接copy使用即可。
到此這篇關(guān)于Python實(shí)現(xiàn)將多張圖片合成視頻并加入背景音樂(lè)的文章就介紹到這了,更多相關(guān)Python圖片合成視頻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python腳本監(jiān)控Tomcat服務(wù)器的方法
這篇文章主要介紹了利用python腳本監(jiān)控Tomcat服務(wù)器的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07python?flask項(xiàng)目打包成docker鏡像發(fā)布的過(guò)程
這篇文章主要介紹了python?flask項(xiàng)目打包成docker鏡像發(fā)布,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03Python中zip()函數(shù)用法實(shí)例教程
這篇文章主要介紹了Python中zip()函數(shù)用法實(shí)例教程,對(duì)Python初學(xué)者有一定的借鑒價(jià)值,需要的朋友可以參考下2014-07-07django admin 自定義替換change頁(yè)面模板的方法
今天小編就為大家分享一篇django admin 自定義替換change頁(yè)面模板的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08Python自動(dòng)化辦公之手機(jī)號(hào)提取
這篇文章主要介紹了如何利用Python語(yǔ)言編寫(xiě)一個(gè)手機(jī)號(hào)提取器,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下2022-06-06pandas實(shí)現(xiàn)DataFrame顯示最大行列,不省略顯示實(shí)例
今天小編就為大家分享一篇pandas實(shí)現(xiàn)DataFrame顯示最大行列,不省略顯示實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-1230分鐘搭建Python的Flask框架并在上面編寫(xiě)第一個(gè)應(yīng)用
這篇文章主要介紹了如何搭建Python的Flask框架并在上面編寫(xiě)一個(gè)簡(jiǎn)單的登錄模版應(yīng)用,代碼數(shù)量少、充分體現(xiàn)了Flask框架的輕量與開(kāi)發(fā)高效的特點(diǎn),需要的朋友可以參考下2015-03-03Python實(shí)現(xiàn)同時(shí)調(diào)用多個(gè)GPT的API
這篇文章主要為大家詳細(xì)介紹了Python如何實(shí)現(xiàn)同時(shí)調(diào)用多個(gè)GPT的API,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-09-09