濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > python用moviepy對(duì)視頻進(jìn)行簡(jiǎn)單的處理

python用moviepy對(duì)視頻進(jìn)行簡(jiǎn)單的處理

熱門標(biāo)簽:crm電銷機(jī)器人 北京外呼電銷機(jī)器人招商 賓館能在百度地圖標(biāo)注嗎 汕頭電商外呼系統(tǒng)供應(yīng)商 鄭州智能外呼系統(tǒng)中心 云南地圖標(biāo)注 400電話 申請(qǐng) 條件 電銷機(jī)器人 金倫通信 南京crm外呼系統(tǒng)排名

楔子

隨著自媒體時(shí)代,現(xiàn)在對(duì)視頻的處理變得越來(lái)越常見。我們可以使用Adobe的一些專業(yè)工具,但是效率不高;如果只是對(duì)視頻進(jìn)行一些簡(jiǎn)單的處理的話,或者視頻的數(shù)量非常多的話,那么使用專業(yè)軟件顯然就不太適合了。

而python中有專門用于處理視頻的庫(kù):moviepy,可以非常方便地對(duì)視頻進(jìn)行一些簡(jiǎn)單處理,下面我們就來(lái)看一看。

首先是安裝:pip install moviepy -i https://pypi.tuna.tsinghua.edu.cn/simple,個(gè)人推薦安裝的時(shí)候使用清華源,因?yàn)閙oviepy需要依賴另一個(gè)庫(kù):imageio_ffmpeg,這個(gè)庫(kù)里面包含了一個(gè)50多MB的ffmpeg二進(jìn)制文件,直接從pypi上拉取的話會(huì)很長(zhǎng)時(shí)間,如果網(wǎng)絡(luò)不行的話。當(dāng)然安裝moviepy的時(shí)候,imageio_ffmpeg就順帶安裝了。

從這里我們也看到,moviepy底層還是依賴ffmpeg這個(gè)專業(yè)軟件的,而ffmpeg是跨平臺(tái)的,所以moviepy也可以在任意平臺(tái)上使用。

moviepy的簡(jiǎn)單使用

我們來(lái)簡(jiǎn)單看一下如何使用moviepy這個(gè)模塊,不過(guò)在使用之前我們需要一個(gè)視頻,就使用you-get工具從bilibili上下載一個(gè)吧。

下面我們就使用這個(gè)下載的視頻進(jìn)行演示。

一個(gè)小栗子

我們以一個(gè)小栗子,來(lái)演示一下使用moviepy是怎么操作視頻的。

from moviepy import editor

# 調(diào)用 `VideoFileClip(文件名)` 即可將視頻加載進(jìn)來(lái)
# 可以讀取各種格式的視頻文件
video_clip = editor.VideoFileClip(r"C:\Users\satori\Desktop\警察蜀黍!!!就是這個(gè)人!!!! 翻唱.flv")

# 調(diào)用subclip方法,傳入起始時(shí)間和結(jié)束時(shí)間,即可截取視頻中的指定部分
"""
video_clip.subclip(): 截取視頻全部,相當(dāng)于沒(méi)做處理
video_clip.subclip(10): 從視頻的 `第10秒` 截取到 `結(jié)尾`
video_clip.subclip(10, -2): 從視頻的 `第10秒` 截取到結(jié)尾的 `前兩秒`
video_clip.subclip((1, 35), (3, 10)): 從視頻的 `第1分35秒` 截取到 `3分10秒` 
video_clip.subclip((1, 2, 18), (2, 1, 34)): 從視頻的 `第1小時(shí)2分18秒` 截取到 `第2小時(shí)1分34秒`
"""
video_clip = video_clip.subclip(5, 20)

# 調(diào)整音量,變?yōu)樵瓉?lái)的0.5
video_clip = video_clip.volumex(0.5)

# 做一個(gè)文本剪貼板,自定義樣式、顏色。
text_clip = editor.TextClip("hanser, little angel", fontsize=40, color="blue")
# 讓文本在屏幕的正中間顯示,持續(xù)10秒,設(shè)置透明度為0.8
"""
屏幕左上角為(0, 0),右下角為(屏幕寬度, 屏幕高度)
set_position((800, 500)): 顯示在800, 500的位置上
set_position(("center", "center")): 顯示在屏幕的正中央
set_position((0.4, 0.6), True): 顯示在距離左邊百分之40、距離上邊百分之60的位置上

set_duration(10): 持續(xù)10秒
set_opacity(0.6): 設(shè)置透明度為0.6
"""
text_clip = text_clip.set_position(("center", "center")).set_duration(10).set_opacity(0.8)

# 然后把文本剪貼板貼在視頻上
video_clip = editor.CompositeVideoClip([video_clip, text_clip])

# 然后導(dǎo)出視頻,可以是其它的視頻格式
video_clip.write_videofile("1.mp4")

# 下面很重要:
r"""
如果你是在Windows上執(zhí)行,不出意外的話,當(dāng)你在執(zhí)行 editor.TextClip() 的時(shí)候,會(huì)報(bào)出如下錯(cuò)誤:

OSError: MoviePy Error: creation of None failed because of the following error:

[WinError 2] 系統(tǒng)找不到指定的文件。.

.This error can be due to the fact that ImageMagick is not installed on your computer, 
or (for Windows users) that you didn't specify the path to the ImageMagick binary in file conf.py, 
or that the path you specified is incorrect

這個(gè)錯(cuò)誤是由于你的電腦上缺少ImageMagick造成的,我們需要去http://www.imagemagick.org/script/download.php
這個(gè)網(wǎng)站上下載對(duì)應(yīng)操作系統(tǒng)的ImageMagick,我這里是Windows??赡芟螺d的比較慢,畢竟是外網(wǎng)。
如果覺得速度無(wú)法忍受的話,我提供了相應(yīng)了網(wǎng)盤鏈接: 鏈接:https://pan.baidu.com/s/1n1xNohD7V-abQbX81UENJQ 提取碼:usl3,可以進(jìn)行保存下載

下載完畢之后,直接安裝在指定的目錄。
然后修改site-packages\moviepy\config_defaults.py, 在文件的尾部有如下內(nèi)容:
import os

FFMPEG_BINARY = os.getenv('FFMPEG_BINARY', 'ffmpeg-imageio')
IMAGEMAGICK_BINARY = os.getenv('IMAGEMAGICK_BINARY', 'auto-detect')

我們把 `IMAGEMAGICK_BINARY = ` 后面的內(nèi)容,換成你剛才ImageMagick的安裝路徑下magick.exe的絕對(duì)路徑:
import os

FFMPEG_BINARY = os.getenv('FFMPEG_BINARY', 'ffmpeg-imageio')
IMAGEMAGICK_BINARY = r'E:\ImageMagick-7.0.10-Q16\magick.exe'
"""
# 然后執(zhí)行就沒(méi)有問(wèn)題了

我們看到此時(shí)文字就添加進(jìn)去了,并且該視頻只有15秒,也就是我們截取的部分。

那么moviepy是如何工作的呢?

moviepy使用ffmpeg對(duì)視頻、音頻文件進(jìn)行讀取和導(dǎo)出,使用ImageMagick生成文字等等。

首先我們使用VideoFileClip對(duì)視頻進(jìn)行讀取,得到VideoFileClip對(duì)象,我們記作clip。我們可以對(duì)這個(gè)clip進(jìn)行任意的操作(剪切、合并、調(diào)整亮度、速度、和其它的clip拼接在一起等等)。并且我們需要注意的是,這些操作是可以鏈?zhǔn)秸{(diào)用的,因?yàn)槊恳淮尾僮鞫紩?huì)得到一個(gè)新的clip,不會(huì)影響原來(lái)的。我們上面演示了視頻的讀取、以及指定部分的截取、音量的調(diào)整、以及添加文字等等,我們后面還會(huì)介紹更多操作。

并且我們最后調(diào)用clip的write_videofile方法,可以將處理之后的視頻寫入本地。當(dāng)然我們還可以使用pygame,或者jupyter notebook進(jìn)行展示。為了方便,我們后面就使用jupyter notebook。

視頻屬性

我們說(shuō)一個(gè)視頻,肯定有大小、寬高、fps、時(shí)長(zhǎng)等等屬性,下面我們就來(lái)看看如何獲取這些屬性。

from moviepy import editor

# 調(diào)用 `VideoFileClip(文件名)` 即可將視頻加載進(jìn)來(lái)
# 可以讀取各種格式的視頻文件
video_clip = editor.VideoFileClip(r"C:\Users\satori\Desktop\警察蜀黍!!!就是這個(gè)人!!!! 翻唱.flv")
# 獲取寬度和高度
print(video_clip.size) # [800, 600]
print(video_clip.w, video_clip.h) # 800 600

# 獲取fps
print(video_clip.fps) # 23.976023976023978

# 獲取時(shí)長(zhǎng),單位是秒
print(video_clip.duration) # 155.12

# 獲取大小,可以直接使用os模塊
import os
# 大概16兆
print(os.stat(r"C:\Users\satori\Desktop\警察蜀黍!!!就是這個(gè)人!!!! 翻唱.flv").st_size) # 16852110
print(os.stat(r"C:\Users\satori\Desktop\警察蜀黍!!!就是這個(gè)人!!!! 翻唱.flv").st_size / 1024 ** 2) # 16.07142448425293

視頻合成

視頻合成有兩種方式:

1.多個(gè)視頻按照先后順序拼接起來(lái)。比如一個(gè)一分鐘和一個(gè)兩分鐘的視頻組合起來(lái),變成三分鐘。

from moviepy import editor
video_clip = editor.VideoFileClip(r"C:\Users\satori\Desktop\警察蜀黍!!!就是這個(gè)人!!!! 翻唱.flv")

# 截取10到20秒
video_clip1 = video_clip.subclip(10, 20)
# 截取1分45秒到結(jié)尾的前兩秒
video_clip2 = video_clip.subclip((1, 45), -2)
# 然后前后拼接起來(lái)
clip = editor.concatenate_videoclips([video_clip1, video_clip2])
# 使用jupyter進(jìn)行展示,設(shè)置一個(gè)寬度
clip.ipython_display(width=360)

此時(shí)視頻就展示在jupyter上了,而且是兩個(gè)視頻拼接在一起的。并且在concatenate_videoclips中還可以指定一個(gè)transition參數(shù)(也是一個(gè)VideoFileClip對(duì)象),作為銜接之間的過(guò)渡。

還是比較簡(jiǎn)單的,假設(shè)我們有5個(gè)視頻,如果只是簡(jiǎn)單的前后拼接就可以這么做。

from moviepy import editor


videos = ["1.mp4", "2.mp4", "3.flv", "4.mp4", "5.flv"]
clips = []
for video in videos:
 clips.append(editor.VideoFileClip(video))

editor.concatenate_videoclips(clips).write_videofile("xxx.mp4")

這里值得一提的是,多個(gè)clip進(jìn)行拼接,并不需要這些clip之間有相同的尺寸、時(shí)長(zhǎng)什么的,僅僅是將它們按照順序拼接起來(lái)而已。

另外,當(dāng)你用jupyter進(jìn)行展示時(shí),視頻不要過(guò)長(zhǎng),否則報(bào)錯(cuò)。當(dāng)然你也可以給ipython_display函數(shù)傳遞一個(gè)maxduration參數(shù),讓它支持顯示更大時(shí)長(zhǎng)的視頻文件。但是注意:如果文件過(guò)大,在jupyter上可能會(huì)耗光你的內(nèi)存。

2.多個(gè)視頻在同一個(gè)畫面上顯示

from moviepy import editor
# margin: 設(shè)置外邊距
video_clip = editor.VideoFileClip(r"C:\Users\satori\Desktop\警察蜀黍!!!就是這個(gè)人!!!! 翻唱.flv").margin(10)

video_clip1 = video_clip.subclip(10, 20)
# editor.vfx.mirror_x: x軸鏡像
video_clip2 = video_clip1.fx(editor.vfx.mirror_x)
# editor.vfx.mirror_y: y軸鏡像
video_clip3 = video_clip1.fx(editor.vfx.mirror_y)
# resize: 等比縮放
video_clip4 = video_clip1.resize(0.8)
# 列表里面有兩個(gè)列表,所以會(huì)將屏幕上下等分
# 上半部分顯示video_clip1, video_clip2,下半部分顯示video_clip3, video_clip4
clip = editor.clips_array([[video_clip1, video_clip2], [video_clip3, video_clip4]])
clip.ipython_display(width=600)

所以我們看到concatenate_videoclips是將多個(gè)視頻前后拼接,而clips_array是將多個(gè)視頻同時(shí)顯示在一個(gè)畫面里面。

修改視頻屬性

from moviepy import editor


clip = editor.VideoFileClip(r"C:\Users\satori\Desktop\警察蜀黍!!!就是這個(gè)人!!!! 翻唱.flv").subclip(10, 20)

clip = (clip.fx(editor.vfx.resize, width=460) # 調(diào)整尺寸,保持比例
  .fx(editor.vfx.speedx, 2) # 調(diào)整倍數(shù)
  .fx(editor.vfx.colorx, 0.5) # 畫面調(diào)暗
  )

視頻音頻合成

假設(shè)我們有一個(gè)視頻A和一個(gè)視頻B,我要將視頻B的音頻和視頻A組合起來(lái),怎么做呢?

from moviepy import editor


clipA = editor.VideoFileClip(r"A.mp4")
clipB = editor.VideoFileClip(r"B.mp4")

# 獲取B的音頻
audioB = clipB.audio

# 將B的音頻和A組合起來(lái)
clipA = clipA.set_audio(audioB)
# 然后保存即可

# 或者我們也可以直接加載一個(gè)音頻
audio = editor.AudioFileClip("b.mp3")

以上就是python用moviepy對(duì)視頻進(jìn)行簡(jiǎn)單的處理的詳細(xì)內(nèi)容,更多關(guān)于python moviepy對(duì)視頻處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • MoviePy常用剪輯類及Python視頻剪輯自動(dòng)化
  • MoviePy簡(jiǎn)介及Python視頻剪輯自動(dòng)化
  • Python視頻編輯庫(kù)MoviePy的使用
  • Python使用pydub模塊轉(zhuǎn)換音頻格式以及對(duì)音頻進(jìn)行剪輯
  • Python竟然能剪輯視頻
  • 用python進(jìn)行視頻剪輯
  • python基于moviepy實(shí)現(xiàn)音視頻剪輯

標(biāo)簽:錫林郭勒盟 昆明 石家莊 文山 懷化 梅州 西寧 浙江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python用moviepy對(duì)視頻進(jìn)行簡(jiǎn)單的處理》,本文關(guān)鍵詞  python,用,moviepy,對(duì),視頻,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python用moviepy對(duì)視頻進(jìn)行簡(jiǎn)單的處理》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于python用moviepy對(duì)視頻進(jìn)行簡(jiǎn)單的處理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    花莲市| 留坝县| 色达县| 志丹县| 甘泉县| 南江县| 台湾省| 延寿县| 白银市| 余庆县| 江华| 高密市| 前郭尔| 阆中市| 偏关县| 嵩明县| 泊头市| 肇庆市| 兴文县| 澄江县| 长顺县| 伽师县| 正安县| 民丰县| 八宿县| 辉县市| 怀集县| 扶绥县| 广东省| 衢州市| 台湾省| 乌恰县| 都江堰市| 固始县| 城市| 谷城县| 文登市| 宝兴县| 平乡县| 龙南县| 丰顺县|