欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python視頻處理模塊之moviepy的用法教程

 更新時(shí)間:2022年07月21日 15:47:22   作者:古明地覺  
隨著自媒體時(shí)代,現(xiàn)在對(duì)視頻的處理變得越來越常見。而?Python?有一個(gè)專門用于處理視頻的第三方庫:moviepy,可以非常方便地對(duì)視頻進(jìn)行一些簡單處理,下面我們就來看一看

楔子

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

而 Python 有一個(gè)專門用于處理視頻的第三方庫:moviepy,可以非常方便地對(duì)視頻進(jìn)行一些簡單處理,下面我們就來看一看。

首先是安裝:

pip?install?moviepy?-i?https://pypi.tuna.tsinghua.edu.cn/simple

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

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

moviepy 的簡單使用

我們來看 moviepy 都提供了哪些功能,不過在使用之前我們需要一個(gè)視頻,就使用 you-get 工具從 bilibili 下載一個(gè)吧。

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

視頻截取

如果一個(gè)視頻比較長,我們可以截取感興趣的片段。

from?moviepy?import?editor

#?調(diào)用?`VideoFileClip(文件名)`?即可將視頻加載進(jìn)來
#?并且支持不同的視頻格式,比如?flv、mp4?等等
video_clip?=?editor.VideoFileClip(
????"空城計(jì),但是7Ki7Ki醬醬.mp4")

#?調(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秒`
"""

#?subclip?會(huì)返回一個(gè)新的?VideoFileClip?對(duì)象
#?所以它支持鏈?zhǔn)讲僮?
video_clip?=?video_clip.subclip(30)

音量調(diào)整

一個(gè)視頻,我們也可以調(diào)整它的音量。

from?moviepy?import?editor

video_clip?=?editor.VideoFileClip(
????"空城計(jì),但是7Ki7Ki醬醬.mp4")

#?調(diào)整音量,變?yōu)樵瓉淼?.5
#?同樣會(huì)返回一個(gè)新的對(duì)象
video_clip?=?video_clip.volumex(0.5)

在視頻上添加文字

如果你想在視頻里面寫上一些內(nèi)容,moviepy 也是支持的。

from?moviepy?import?editor

video_clip?=?editor.VideoFileClip(
????"空城計(jì),但是7Ki7Ki醬醬.mp4")

#?做一個(gè)文本剪貼板,自定義樣式、顏色。
text_clip?=?editor.TextClip("7ki7ki?棒棒",
????????????????????????????fontsize=40,?color="blue")
#?讓文本在屏幕的正中間顯示
#?持續(xù)10秒,設(shè)置透明度為?0.6
"""
屏幕左上角的坐標(biāo)為?(0,?0),右下角的坐標(biāo)為?(屏幕寬度,?屏幕高度)
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])

如果你是 Windows 系統(tǒng),不出意外的話,當(dāng)你在執(zhí)行 editor.TextClip() 的時(shí)候,會(huì)報(bào)出如下錯(cuò)誤:

這個(gè)錯(cuò)誤是由于你的電腦上缺少 ImageMagick 造成的,我們需要去官網(wǎng)下載對(duì)應(yīng)操作系統(tǒng)的 ImageMagick。

官網(wǎng):http://www.imagemagick.org/script/download.php

下載完之后,安裝在指定的目錄,然后修改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í)行就沒有問題了。

我們將上面的幾個(gè)部分,組合起來演示一下:

from?moviepy?import?editor

video_clip?=?editor.VideoFileClip(
????"空城計(jì),但是7Ki7Ki醬醬.mp4")

video_clip?=?(
????#?截取?5?到?20?秒
????video_clip.subclip(5,?20).
????#?設(shè)置音量為原來的?0.8
????volumex(0.8)
)

text_clip?=?(
????editor.TextClip("7ki7ki",
???????????????????fontsize=40,?color="blue").
????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("空城計(jì),但是7Ki7Ki醬醬_2.mp4")

執(zhí)行代碼,會(huì)看到以下輸出:

表示正在調(diào)用 ffmpeg 處理視頻,而視頻處理完畢大概需要十幾秒鐘的時(shí)間。處理完畢之后,我們打開看一下。

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

總結(jié)一下整個(gè)流程,首先使用 VideoFileClip 對(duì)視頻進(jìn)行讀取,得到 VideoFileClip 對(duì)象,記作 video_clip。我們可以對(duì)這個(gè) video_clip 進(jìn)行任意的操作(剪切、合并、調(diào)整亮度、速度、和其它的 video_clip 拼接在一起等等)。

并且需要注意的是,這些操作是可以鏈?zhǔn)秸{(diào)用的,因?yàn)槊恳淮尾僮鞫紩?huì)得到一個(gè)新的 video_clip,不會(huì)影響原來的。我們上面演示了視頻的讀取、以及指定部分的截取、音量的調(diào)整、以及添加文字等等,下面還會(huì)介紹更多操作。

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

但是要清楚,moviepy 處理視頻使用的是 ffmpeg,生成文字使用的是 ImageMagick。

獲取視頻屬性

一個(gè)視頻,肯定有大小、寬高、fps、時(shí)長等屬性,那么 moviepy 要如何獲取這些屬性呢。

from?moviepy?import?editor

video_clip?=?editor.VideoFileClip(r"空城計(jì),但是7Ki7Ki醬醬.mp4")
#?獲取寬度和高度
print(video_clip.size)
print(video_clip.w,?video_clip.h)
"""
[2160,?1080]
2160?1080
"""

#?獲取?fps
print(video_clip.fps)
"""
30.0
"""

#?獲取時(shí)長,單位是秒
print(video_clip.duration)
"""
110.92
"""

#?獲取大小,可以直接使用?os?模塊
import?os
#?大概?13MB
size?=?os.stat(r"空城計(jì),但是7Ki7Ki醬醬.mp4").st_size
print(size)
print(size?/?1024?**?2)
"""
13324402
12.70713996887207
"""

視頻合成

視頻合成有兩種方式:

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

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

先來看看第一種:

from?moviepy?import?editor
video_clip?=?editor.VideoFileClip(r"D:\satori\空城計(jì),但是7Ki7Ki醬醬.mp4")

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

執(zhí)行完之后,視頻就展示在 jupyter 上了,而且是兩個(gè)視頻拼接在一起的,總共 12 秒鐘。此外 concatenate_videoclips 中還可以指定一個(gè)transition參數(shù)(也是一個(gè)VideoFileClip對(duì)象),作為銜接之間的過渡。

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

from?moviepy?import?editor

videos?=?["1.mp4",?"2.mp4",?"3.flv",
??????????"4.mp4",?"5.flv"]
video_clips?=?[]

for?video?in?videos:
????video_clips.append(editor.VideoFileClip(video))

editor.concatenate_videoclips(
????video_clips).write_videofile("xxx.mp4")

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

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

然后是第二種拼接

有多個(gè)視頻,可以讓它們?cè)谕粋€(gè)畫面上顯示。

from?moviepy?import?editor

#?margin:?設(shè)置外邊距
video_clip?=?editor.VideoFileClip(
????r"D:\satori\空城計(jì),但是7Ki7Ki醬醬.mp4").margin(10)

#?截取?10?到?20?秒
video_clip1?=?video_clip.subclip(10,?20)
#?x?軸鏡像
video_clip2?=?video_clip1.fx(editor.vfx.mirror_x)
#?y?軸鏡像
video_clip3?=?video_clip1.fx(editor.vfx.mirror_y)
#?resize:?等比縮放
video_clip4?=?video_clip1.resize(0.5)

#?列表里面有兩個(gè)列表,所以會(huì)將屏幕上下等分
#?上半部分顯示?video_clip1,?video_clip2
#?下半部分顯示video_clip3,?video_clip4
video_clip?=?editor.clips_array([[video_clip1,?video_clip2],
??????????????????????????      ?[video_clip3,?video_clip4]])
video_clip.ipython_display(width=600)

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

修改視頻屬性

from?moviepy?import?editor

video_clip?=?editor.VideoFileClip(
????r"D:\satori\空城計(jì),但是7Ki7Ki醬醬.mp4").subclip(10,?20)

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

雖然截取了 10 秒鐘,但是 2 倍數(shù)播放,所以變成了 5 秒鐘。

視頻音頻合成

假設(shè)有一個(gè)視頻 A 和一個(gè)視頻 B,現(xiàn)在要將視頻 B 的音頻和視頻 A 組合起來,怎么做呢?

from?moviepy?import?editor

video_clipA?=?editor.VideoFileClip(r"A.mp4")
video_clipB?=?editor.VideoFileClip(r"B.mp4")

#?獲取?B?的音頻
audioB?=?video_clipB.audio
"""
#?如果已經(jīng)是音頻格式,那么也可以直接加載
audioB?=?editor.AudioFileClip("b.mp3")
"""

#?將?B?的音頻和?A?組合起來
video_clipA?=?video_clipA.set_audio(audioB)

以上就是Python視頻處理模塊之moviepy的用法教程的詳細(xì)內(nèi)容,更多關(guān)于Python視頻處理模塊moviepy的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用python實(shí)現(xiàn)個(gè)性化詞云的方法

    使用python實(shí)現(xiàn)個(gè)性化詞云的方法

    最近看到可視化的詞云,看到網(wǎng)上也很多這樣的工具,但是都不怎么完美,有些不支持中文,有的中文詞頻統(tǒng)計(jì)得莫名其妙、有的不支持自定義形狀、所有的都不能自定義顏色,于是網(wǎng)上找了一下,決定用python繪制詞云
    2017-06-06
  • python的dict,set,list,tuple應(yīng)用詳解

    python的dict,set,list,tuple應(yīng)用詳解

    這篇文章主要介紹了python的dict,set,list,tuple應(yīng)用詳解,需要的朋友可以參考下
    2014-07-07
  • python使用多線程查詢數(shù)據(jù)庫的實(shí)現(xiàn)示例

    python使用多線程查詢數(shù)據(jù)庫的實(shí)現(xiàn)示例

    這篇文章主要介紹了python使用多線程查詢數(shù)據(jù)庫的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • pytest解讀fixtures之Teardown處理yield和addfinalizer方案

    pytest解讀fixtures之Teardown處理yield和addfinalizer方案

    這篇文章主要為大家介紹了pytest解讀fixtures之Teardown處理yield和addfinalizer的方案實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 深入理解Python中__init__.py文件

    深入理解Python中__init__.py文件

    本文主要介紹了深入理解Python中__init__.py文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 詳解python里的命名規(guī)范

    詳解python里的命名規(guī)范

    這篇文章主要介紹了詳解python里的命名規(guī)范,命名應(yīng)當(dāng)盡量使用全拼寫的單詞,縮寫的情況文章中也給大家提到,需要的朋友參考下吧
    2018-07-07
  • 使用Pandas對(duì)數(shù)據(jù)進(jìn)行篩選和排序的實(shí)現(xiàn)

    使用Pandas對(duì)數(shù)據(jù)進(jìn)行篩選和排序的實(shí)現(xiàn)

    這篇文章主要介紹了使用Pandas對(duì)數(shù)據(jù)進(jìn)行篩選和排序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 將python打包后的exe還原成py

    將python打包后的exe還原成py

    這篇文章主要介紹了將python打包后的exe還原成py,利用pyinstxtractor.py?拆包(解壓)工具,將exe文件解壓成一個(gè)文件夾<BR>uncompyle6?pyc反編譯工具,需要的朋友可以參考一下
    2022-01-01
  • 基于Python實(shí)現(xiàn)萬年歷制作

    基于Python實(shí)現(xiàn)萬年歷制作

    制作一個(gè)萬年歷是一個(gè)有趣的Python項(xiàng)目,它可以讓您查看任何年份的日歷并獲得特定日期的信息,下面我們就來看看具體是如何使用Python實(shí)現(xiàn)的吧
    2023-12-12
  • python Django的顯示個(gè)人信息詳解

    python Django的顯示個(gè)人信息詳解

    這篇文章主要介紹了在Python的Django的顯示個(gè)人信息方法,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09

最新評(píng)論