亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2021年03月11日 11:20:12   作者:古明地盆  
這篇文章主要介紹了python如何用moviepy對(duì)視頻進(jìn)行簡(jiǎn)單的處理,幫助大家更好的利用python處理視頻,感興趣的朋友可以了解下

楔子

隨著自媒體時(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è)模塊,不過在使用之前我們需要一個(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)于沒做處理
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í)行就沒有問題了

我們看到此時(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ì)象),作為銜接之間的過渡。

還是比較簡(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í),視頻不要過長(zhǎng),否則報(bào)錯(cuò)。當(dāng)然你也可以給ipython_display函數(shù)傳遞一個(gè)maxduration參數(shù),讓它支持顯示更大時(shí)長(zhǎng)的視頻文件。但是注意:如果文件過大,在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)文章!

相關(guān)文章

  • Python重新加載模塊的實(shí)現(xiàn)方法

    Python重新加載模塊的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇Python重新加載模塊的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-10-10
  • Python 中如何實(shí)現(xiàn)參數(shù)化測(cè)試的方法示例

    Python 中如何實(shí)現(xiàn)參數(shù)化測(cè)試的方法示例

    這篇文章主要介紹了Python 中如何實(shí)現(xiàn)參數(shù)化測(cè)試的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • python使用pip成功導(dǎo)入庫(kù)后還是報(bào)錯(cuò)的解決方法(針對(duì)vscode)

    python使用pip成功導(dǎo)入庫(kù)后還是報(bào)錯(cuò)的解決方法(針對(duì)vscode)

    最近在學(xué)爬蟲,但在使用Scrapy包時(shí),在終端通過pip裝好包以后,在pycharm中導(dǎo)入包時(shí),依然會(huì)報(bào)錯(cuò),下面這篇文章主要給大家介紹了關(guān)于python使用pip成功導(dǎo)入庫(kù)后還是報(bào)錯(cuò)的解決方法,需要的朋友可以參考下
    2022-07-07
  • 解決Python 中英文混輸格式對(duì)齊的問題

    解決Python 中英文混輸格式對(duì)齊的問題

    今天小編就為大家分享一篇解決Python 中英文混輸格式對(duì)齊的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-07-07
  • 使用Python進(jìn)行數(shù)獨(dú)求解詳解(一)

    使用Python進(jìn)行數(shù)獨(dú)求解詳解(一)

    本文主要介紹了如何構(gòu)建一個(gè)Python腳本來(lái)解決數(shù)獨(dú)難題,本文的重點(diǎn)在于介紹用于構(gòu)建數(shù)獨(dú)求解器的回溯算法。感興趣的小伙伴可以學(xué)習(xí)一下
    2022-02-02
  • Python中JSON常見用法(json.load()、json.loads()、json.dump()、json.dumps())

    Python中JSON常見用法(json.load()、json.loads()、json.dump()、json.du

    本文主要介紹了Python中JSON常見用法(json.load()、json.loads()、json.dump()、json.dumps()),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Pycharm如何返回上一次編輯處的快捷鍵

    Pycharm如何返回上一次編輯處的快捷鍵

    這篇文章主要介紹了Pycharm如何返回上一次編輯處的快捷鍵問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Python學(xué)習(xí)_幾種存取xls/xlsx文件的方法總結(jié)

    Python學(xué)習(xí)_幾種存取xls/xlsx文件的方法總結(jié)

    今天小編就為大家分享一篇Python學(xué)習(xí)_幾種存取xls/xlsx文件的方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-05-05
  • 使用ITK-SNAP進(jìn)行摳圖操作并保存mask的實(shí)例

    使用ITK-SNAP進(jìn)行摳圖操作并保存mask的實(shí)例

    這篇文章主要介紹了使用ITK-SNAP進(jìn)行摳圖操作并保存mask的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-07-07
  • pandas數(shù)據(jù)清洗(缺失值和重復(fù)值的處理)

    pandas數(shù)據(jù)清洗(缺失值和重復(fù)值的處理)

    這篇文章主要介紹了pandas數(shù)據(jù)清洗(缺失值和重復(fù)值的處理),pandas對(duì)大數(shù)據(jù)有很多便捷的清洗用法,尤其針對(duì)缺失值和重復(fù)值,詳細(xì)介紹感興趣的小伙伴可以參考下面文章內(nèi)容
    2022-08-08

最新評(píng)論