網(wǎng)站首頁 編程語言 正文
實(shí)現(xiàn)的思路:將準(zhǔn)備好的圖片通過opencv讀取出來,并將其設(shè)置好幀數(shù)等參數(shù)后合成為無聲視頻。
最后通過moviepy編輯視頻將背景音樂加入到視頻中。
開始之前還是需要說明一下非標(biāo)準(zhǔn)庫的來源,因?yàn)橛行斓拿Q和需要導(dǎo)入模塊的名稱不一定就是一樣的。
import os # python標(biāo)準(zhǔn)庫,不需要安裝,用于系統(tǒng)文件操作相關(guān)
import cv2 # python非標(biāo)準(zhǔn)庫,pip install opencv-python 多媒體處理
from PIL import Image # python非標(biāo)準(zhǔn)庫,pip install pillow,圖像處理
import moviepy.editor as mov # python非標(biāo)準(zhǔn)庫,pip install moviepy,多媒體編輯
要使用到什么模塊已經(jīng)敘述了,若是沒有的話安裝一下就可以了。接下來第一步就是將圖片素材準(zhǔn)備好來編寫如何將圖片轉(zhuǎn)換成視頻。
def image_to_video(image_path, media_path):
'''
圖片合成視頻函數(shù)
:param image_path: 圖片路徑
:param media_path: 合成視頻保存路徑
:return:
'''
# 獲取圖片路徑下面的所有圖片名稱
image_names = os.listdir(image_path)
# 對提取到的圖片名稱進(jìn)行排序
image_names.sort(key=lambda n: int(n[:-4]))
# 設(shè)置寫入格式
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])
# 初始化媒體寫入對象
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, '合并完成!')
# 釋放媒體寫入對象
media_writer.release()
print('無聲視頻寫入完成!')
向合成后的無聲視頻中添加背景音樂,背景音樂可以選擇從另外一段視頻中提取音頻。最后將提取到的音頻文件添加到該無聲視頻中。
def set_music():
'''
合成視頻設(shè)置背景音樂函數(shù)
:return:
'''
print('開始添加背景音樂!')
# 初始化視頻文件對象
clip = mov.VideoFileClip('./media.mp4')
# 從某個(gè)視頻中提取一段背景音樂
audio = mov.AudioFileClip('./source.mp4').subclip(0, 83)
# 將背景音樂寫入.mp3文件
audio.write_audiofile('./background.mp3')
# 向合成好的無聲視頻中添加背景音樂
clip = clip.set_audio(audio)
# 保存視頻
clip.write_videofile('./media.mp4')
print('背景音樂添加完成!')
# image_to_video('./images/', './media.mp4')
set_music()
上述代碼塊已經(jīng)過素材完成測試,運(yùn)行沒有任何報(bào)錯(cuò)直接copy使用即可。
原文鏈接:https://www.cnblogs.com/lwsbc/p/16200288.html
相關(guān)推薦
- 2022-05-24 python使用torch隨機(jī)初始化參數(shù)_python
- 2022-10-30 Android?虛擬機(jī)中的內(nèi)存分配與OOM問題詳解_Android
- 2022-01-19 正則——時(shí)間 時(shí)分秒 12小時(shí)制 24小時(shí)制 moment可以轉(zhuǎn)化的時(shí)間 HH:mm:ss hh:m
- 2023-02-15 react源碼合成事件深入解析_React
- 2022-10-25 基于windows10下使用bat腳本設(shè)置自定義開機(jī)啟動項(xiàng)
- 2022-05-06 詳解go語言中sort如何排序_Golang
- 2022-07-25 軟件測試業(yè)務(wù)梳理的實(shí)用技巧_應(yīng)用技巧
- 2023-07-25 mybatis-plus在實(shí)際開發(fā)中的應(yīng)用
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支