一区二区日本_久久久久久久国产精品_无码国模国产在线观看_久久99深爱久久99精品_亚洲一区二区三区四区五区午夜_日本在线观看一区二区

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

目錄

楔子

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

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

首先是安裝:

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

個人推薦安裝得時候使用清華源,因為moviepy需要依賴另一個庫:imageio_ffmpeg,這個庫里面包含了一個 50 多 MB 得 ffmpeg 二進制文件,如果網(wǎng)絡不行得話,直接從pypi上拉取會花很長時間。當然安裝moviepy得時候,imageio_ffmpeg 就順帶安裝了。

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

moviepy 得簡單使用

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

下面就使用這個下載得視頻進行演示。

視頻截取

如果一個視頻比較長,我們可以截取感興趣得片段。

from?moviepy?import?editor#?調用?`VideoFileClip(文件名)`?即可將視頻加載進來#?并且支持不同得視頻格式,比如?flv、mp4?等等video_clip?=?editor.VideoFileClip(????"空城計,但是7Ki7Ki醬醬.mp4")#?調用subclip方法,傳入起始時間和結束時間#?即可截取視頻中得指定部分"""video_clip.subclip():????截取視頻全部,相當于沒做處理video_clip.subclip(10):????從視頻得?`第10秒`?截取到?`結尾`video_clip.subclip(10,?-2):????從視頻得?`第10秒`?截取到結尾得?`前兩秒`video_clip.subclip((1,?35),?(3,?10)):????從視頻得?`第1分35秒`?截取到?`第3分10秒`?video_clip.subclip((1,?2,?18),?(2,?1,?34)):????從視頻得?`第1小時2分18秒`?截取到?`第2小時1分34秒`"""#?subclip?會返回一個新得?VideoFileClip?對象#?所以它支持鏈式操作video_clip?=?video_clip.subclip(30)

音量調整

一個視頻,我們也可以調整它得音量。

from?moviepy?import?editorvideo_clip?=?editor.VideoFileClip(????"空城計,但是7Ki7Ki醬醬.mp4")#?調整音量,變?yōu)樵瓉淼?.5#?同樣會返回一個新得對象video_clip?=?video_clip.volumex(0.5)

在視頻上添加文字

如果你想在視頻里面寫上一些內容,moviepy 也是支持得。

from?moviepy?import?editorvideo_clip?=?editor.VideoFileClip(????"空城計,但是7Ki7Ki醬醬.mp4")#?做一個文本剪貼板,自定義樣式、顏色。text_clip?=?editor.TextClip("7ki7ki?棒棒",????????????????????????????fontsize=40,?color="blue")#?讓文本在屏幕得正中間顯示#?持續(xù)10秒,設置透明度為?0.6"""屏幕左上角得坐標為?(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):?設置透明度為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),不出意外得話,當你在執(zhí)行 editor.TextClip() 得時候,會報出如下錯誤:

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

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

下載完之后,安裝在指定得目錄,然后修改site-packagesmoviepyconfig_defaults.py,在文件得尾部有如下內容:

import?osFFMPEG_BINARY?=?os.getenv('FFMPEG_BINARY',?'ffmpeg-imageio')IMAGEMAGICK_BINARY?=?os.getenv('IMAGEMAGICK_BINARY',?'auto-detect')#?把?`IMAGEMAGICK_BINARY?=?`?后面得內容#?換成?ImageMagick?安裝路徑下?magick.exe?得絕對路徑:import?osFFMPEG_BINARY?=?os.getenv('FFMPEG_BINARY',?'ffmpeg-imageio')IMAGEMAGICK_BINARY?=?r'E:ImageMagick-7.0.10-Q16magick.exe'

替換完之后,再執(zhí)行就沒有問題了。

我們將上面得幾個部分,組合起來演示一下:

from?moviepy?import?editorvideo_clip?=?editor.VideoFileClip(????"空城計,但是7Ki7Ki醬醬.mp4")video_clip?=?(????#?截取?5?到?20?秒????video_clip.subclip(5,?20).????#?設置音量為原來得?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])#?然后將視頻導出video_clip.write_videofile("空城計,但是7Ki7Ki醬醬_2.mp4")

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

表示正在調用 ffmpeg 處理視頻,而視頻處理完畢大概需要十幾秒鐘得時間。處理完畢之后,我們打開看一下。

我們看到此時文字就添加進去了,并且該視頻只有15秒,也就是我們截取得 5 到 20 秒得部分。

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

并且需要注意得是,這些操作是可以鏈式調用得,因為每一次操作都會得到一個新得 video_clip,不會影響原來得。我們上面演示了視頻得讀取、以及指定部分得截取、音量得調整、以及添加文字等等,下面還會介紹更多操作。

最后我們調用 video_clip 得 write_videofile 方法,可以將處理之后得視頻寫入本地。當然也可以使用 pygame,或者 jupyter notebook 進行展示。為了方便,我們后面就使用 jupyter notebook。

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

獲取視頻屬性

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

from?moviepy?import?editorvideo_clip?=?editor.VideoFileClip(r"空城計,但是7Ki7Ki醬醬.mp4")#?獲取寬度和高度print(video_clip.size)print(video_clip.w,?video_clip.h)"""[2160,?1080]2160?1080"""#?獲取?fpsprint(video_clip.fps)"""30.0"""#?獲取時長,單位是秒print(video_clip.duration)"""110.92"""#?獲取大小,可以直接使用?os?模塊import?os#?大概?13MBsize?=?os.stat(r"空城計,但是7Ki7Ki醬醬.mp4").st_sizeprint(size)print(size?/?1024?**?2)"""1332440212.70713996887207"""

視頻合成

視頻合成有兩種方式:

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

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

先來看看第一種:

from?moviepy?import?editorvideo_clip?=?editor.VideoFileClip(r"D:satori空城計,但是7Ki7Ki醬醬.mp4")#?截取10到20秒video_clip1?=?video_clip.subclip(10,?20)#?截取結尾得前兩秒video_clip2?=?video_clip.subclip(-2)#?然后前后拼接起來video_clip?=?editor.concatenate_videoclips([video_clip1,?video_clip2])#?使用jupyter進行展示,設置一個寬度video_clip.ipython_display(width=360)

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

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

from?moviepy?import?editorvideos?=?["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")

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

另外,當你用 jupyter 進行展示時,視頻不要過長,否則報錯。當然你也可以給 ipython_display 函數(shù)傳遞一個 maxduration 參數(shù),讓它支持顯示更大時長得視頻文件。但是注意:如果文件過大,在 jupyter 上可能會耗光你得內存。

然后是第二種拼接

有多個視頻,可以讓它們在同一個畫面上顯示。

from?moviepy?import?editor#?margin:?設置外邊距video_clip?=?editor.VideoFileClip(????r"D:satori空城計,但是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)#?列表里面有兩個列表,所以會將屏幕上下等分#?上半部分顯示?video_clip1,?video_clip2#?下半部分顯示video_clip3,?video_clip4video_clip?=?editor.clips_array([[video_clip1,?video_clip2],??????????????????????????      ?[video_clip3,?video_clip4]])video_clip.ipython_display(width=600)

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

修改視頻屬性

from?moviepy?import?editorvideo_clip?=?editor.VideoFileClip(????r"D:satori空城計,但是7Ki7Ki醬醬.mp4").subclip(10,?20)video_clip?=?(????#?調整尺寸,保持比例????video_clip.fx(editor.vfx.resize,?width=460)????????#?倍數(shù)播放????????.fx(editor.vfx.speedx,?2)????????#?畫面調暗????????.fx(editor.vfx.colorx,?0.5))video_clip.ipython_display(width=600)

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

視頻音頻合成

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

from?moviepy?import?editorvideo_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得用法教程得詳細內容,更多關于Python視頻處理模塊moviepy得資料請關注之家其它相關內容!

聲明:所有內容來自互聯(lián)網(wǎng)搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯(lián)系我們進行處理。
發(fā)表評論
更多 網(wǎng)友評論1 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 久久tv在线观看 | 国产精品免费大片 | 麻豆久久久久久久久久 | 国产精品成人一区二区 | 色婷婷一区二区三区四区 | 欧美6一10sex性hd | 99re在线 | 激情视频网站 | 中文字幕一区在线观看视频 | a国产视频 | 成人区精品 | 免费在线视频一区二区 | 三级黄色片在线播放 | 国产精品久久精品 | 男女激情网 | 国产美女一区二区 | 亚洲高清视频一区二区 | 免费人成激情视频在线观看冫 | 成年人国产在线观看 | 日韩精品成人 | 国产一区二区欧美 | 久久久久久久久久久一区二区 | 国产精品一区在线 | 涩爱av一区二区三区 | 视频在线一区二区 | 精品国产一区二区三区四区在线 | 国产精成人| 三级视频久久 | aaa精品 | 伊人免费在线观看 | 国产激情网站 | 亚洲欧洲日韩精品 中文字幕 | 精品久久久久久中文字幕 | 91精品国产综合久久久久 | 亚洲一二视频 | 欧美一区二区三区一在线观看 | 九九久久精品 | 色视频网站 | 天天av天天好逼 | 欧美中文一区 | 在线免费黄色小视频 |