網站首頁 編程語言 正文
python 中的視頻處理模塊,有一個叫做 moviepy,今天我們就來嘮嘮它。
模塊安裝使用如下命令即可
pip install moviepy
接下來完成第一個 Demo,為后續學習提高信心,截取視頻中的一段。
截取視頻
下述代碼重點使用的是 subclip
方法,但需要提前聲明一個 VideoFileClip
對象, VideoFileClip
類的構造函數在代碼后進行說明。
from moviepy.editor import * import time clip = VideoFileClip('./1644974996.mp4').subclip(10, 20) new_file = str(int(time.time())) + '_subclip.mp4' clip.write_videofile(new_file)
代碼運行結果如下所示:
subclip(t_start,t_end)
方法中的時間參數可以用 (t_start=10)
,以秒的時間來表示,也可以用 (t_start=(1,20))
,以1分20秒的形式來表示,還可以 (t_start=(0,1,20))
或者 (t_start=(00:01:20))
, 以小時: 分鐘: 秒的形式表示, t_end
的默認值就是視頻的長度
VideoFileClip
類的構造函數如下所示:
__init__(self, filename, has_mask=False, audio=True, audio_buffersize=200000, target_resolution=None, resize_algorithm='bicubic', audio_fps=44100, audio_nbytes=2, verbose=False, fps_source='tbr')
其中只有 filename
為必填項,其余都為選填內容。
-
filename
:視頻文件名,一般常見格式都支持; -
has_mask
:是否包含遮罩; -
audio
:是否加載音頻; -
audio_buffersize
:音頻緩沖區大小; -
target_resolution
:加載后需要變換到的分辨率; -
resize_algorithm
:調整分辨率的算法,默認是bicubic
,可以設置為bilinear
,fast_bilinear
; -
audio_fps
:聲音的采樣頻率; -
audio_nbytes
:采樣的位數; -
verbose
:是否輸出處理信息。
subclip(t1,t2)
方法的含義為截取t1到t2時間段內的片段。write_videofile()
方法用于視頻輸出。
提取A視頻的音頻,注入到B視頻中
from moviepy.editor import * # 讀取2個視頻文件 videoclip_a = VideoFileClip("1644974996.mp4") videoclip_b = VideoFileClip("1644974998.mp4") # 提取A視頻文件的音頻部分 audio_a = videoclip_a.audio # 給B設置音頻,注意視頻最終合成的大小會依據長的為準 videoclip_c = videoclip_b.set_audio(audio_a) # 輸出新的視頻文件 videoclip_c.write_videofile("videoclip_c.mp4")
使用 VideoFileClip
對象的 audio
屬性,可以獲取視頻的音頻部分,然后調用 set_audio()
方法對文件進行音頻設置,這里要注意一點,合成的音頻和視頻等于長度長的。
去掉視頻聲音
from moviepy.editor import * video = VideoFileClip('1644974996.mp4') video = video.without_audio() video.write_videofile('cc.mp4')
without_audio()
方法見名知意 - 去除聲音。
獲取視頻信息
視頻的分辨率和時間可以直接通過屬性讀取
from moviepy.editor import * video = VideoFileClip('1644974996.mp4') print(dir(video)) print(video.size) # 獲取分辨率 print(video.duration) # 獲取視頻總時長
獲取文件大小就比較簡單了,使用 os
模塊的 os.path.getsize()
方法即可,得到的是字節大小。
from moviepy.editor import * video = VideoFileClip('1644974996.mp4') size = os.path.getsize('1644974996.mp4') print(size)
設置視頻倍速播放
讀取視頻,調用 speedx()
方法,其中設置要加速到的倍數。
from moviepy.editor import * clip = VideoFileClip('./1644974996.mp4') video_1 = clip.speedx(2) video_1.write_videofile('sss.mp4')
截取視頻封面
很多時候我們需要生成視頻的封面,直接使用下述幾行代碼,即可實現。
from moviepy.editor import * clip = VideoFileClip('./1644974996.mp4') clip.save_frame("frame.jpg") # 保存第1幀 clip.save_frame("frame.png", t=2) # 保存2s時刻的那1幀
提取視頻中的音頻內容
如果想要把目標視頻中的某段音頻截取出來,可以使用如下代碼
from moviepy.editor import * clip = VideoFileClip('./1644974996.mp4').subclip(10, 20) audioclip1 = clip.audio # 從視頻對象中提取音頻 audioclip1.write_audiofile('a.mp3') # 寫入音頻文件
截取視頻中的一段,將其保存為 gif
from moviepy.editor import * clip = VideoFileClip('./1644974996.mp4').subclip(10, 20) # clip.write_gif('demo.gif',fps=15) # 生成之后的文件大 clip.write_gif('demo.gif',fps=5) # 生成之后的文件小
寫在后面
到這里,相信你能順著這個思路去學習 moviepy 更多的高級用法啦。
原文鏈接:https://blog.csdn.net/hihell/article/details/122967803
相關推薦
- 2022-09-26 淺談Redis如何應對并發訪問_Redis
- 2022-09-13 c++11中的noexcept關鍵字_C 語言
- 2022-04-23 arguments獲取當前所在函數
- 2022-03-22 C++this指針詳情_C 語言
- 2022-06-14 GO語言結構體面向對象操作示例_Golang
- 2021-12-12 linux縮減XFS分區格式的根目錄_Linux
- 2022-04-25 C#中使用DevExpress中的ChartControl實現極坐標圖的案例詳解_C#教程
- 2022-07-16 python中文文本切詞Kmeans聚類_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支