1
前言
今天給大家介紹一個專門用于視頻操作的庫,安裝了它,就可以用代碼來完成視頻剪輯等系列操作。
當然只是為了玩而已,最主要的是為了將我們的視頻和音頻進行軌道分離,從中提取音頻,來完成后續的語音識別轉文字功能。
如果玩過 (一款專業的視頻剪輯軟件)的同學, 一定知道了解一些視頻剪輯的技巧。
比如我們日常生活中看到的視頻文件,常以 .mp4、.avi 、.flv 等作為文件后綴。但你知道它背后的小原理嘛?
視頻后綴的本質叫做封裝格式。來看個圖(ppt畫的,湊合看吧)你就理解了:
你可以把格式理解成一個大箱子,這個箱子可以裝進所有的幀,你的音頻,媒體信息,字幕或者一些別的東西。
當你播放視頻的時候,軟件會打開這個箱子,用正確的方式來回放你的片子。你也就能看到所謂的視頻以及聽到聲音了!
2
環境準備
普及完上述小知識后,來進入今天的正題。
今天的主角是一個叫做 的第三方庫。安裝如下:
pip install moviepy
在安裝的過程中,心細的同學會看到這樣一個名字。
如果寫過爬蟲,并且爬取過視頻爬蟲的同學,對這個東西一定不陌生!
,一款神奇的視頻合成拆分軟件工具,今天不是來介紹它的,所以感興趣的同學可以自己去查下。
而 正是基于 來實現的!貼一張官網的圖:
3
實戰演示
從抖音上下了一段視頻,野狼disco。(公眾號只允許傳3個視頻,所以原視頻均用圖片代替)
接下來就用代碼來操作一波,如何對其進行剪輯。我們最終要實現的目的,是將 disco 的兩段視頻(文章后面還有個小姐姐跳舞的視頻)切分片段,然后剪輯在一起。后續在做個鬼畜的效果。
PS:下述代碼均在 中完成。
# 導入需要的庫
from moviepy.editor import *
# 從本地載入視頻 disco.mp4 并截取 00:00:10 - 00:00:15 部分
clip = VideoFileClip("disco.mp4").subclip(10,15)
# 把生成的視頻導出到文件內
clip.write_videofile("disco_2.mp4")
只需要三行代碼,便可以將特效師的原視頻 10-15s 處剪出。
同理,還有一段小姐姐跳的視頻,放個照片吧。
代碼如下,和上述同理,只不過改了視頻名稱和截取秒數:
有了上面兩段剪輯的視頻做鬼畜用什么軟件,接下來將他們兩個按照順序拼接在一起!
from moviepy.editor import VideoFileClip, concatenate_videoclips
clip1 = VideoFileClip("disco_2.mp4") # 加載剛才剪輯大叔的視頻
clip2 = VideoFileClip("disco_w_2.mp4") # 加載剛才剪輯小姐姐的視頻
# 按照 clip 順序進行視頻拼接
finalclip = concatenate_videoclips([clip1, clip2])
finalclip.write_videofile("disco_final.mp4") # 輸出合并視頻
合成視頻效果:
看了以上操作,是不是覺得用代碼來剪輯視頻很簡單呢!
當然,是支持在服務端處理的做鬼畜用什么軟件,這意味著你可以用它進行批量的視頻剪輯操作,絕對是個神器,尤其是現在玩抖音矩陣的同學!
4
提取視頻中的音頻
在開篇的時候,介紹了封裝格式的概念,而視頻實際上有兩個"軌道"。一個是視頻軌道,一個是音頻軌道。想要提取視頻中的音頻,只需要將視頻與音頻分離即可!
以特效師 18s 的野狼disco為例,將 18s 的音頻從視頻中提取。
from moviepy.editor import *
video = VideoFileClip('disco.mp4')#加載視頻
audio = video.audio
audio.write_audiofile('disco.mp3')#提出音頻
依然是三行代碼,即可提取視頻中的音頻。
5
鬼畜小姐姐
上面說好了要鬼畜小姐姐,下面的代碼來演示一下,主要是音樂不太給力,鬼畜起來一點也不好玩。。。
from moviepy.editor import *
clip_raw = VideoFileClip("disco_w.mp4") #13s原視頻
clip_before = VideoFileClip("disco_w.mp4").subclip(0,1)
clip_after = VideoFileClip("disco_w.mp4").subclip(4,13)
# 按照 clip 順序進行視頻拼接,重復1s的動作 3 次進行鬼畜
clip1 = concatenate_videoclips([clip_before, clip_before,clip_before, clip_after])
clip2 = clip1.fx(vfx.mirror_x) # x軸鏡像
clip3 = clip1.fx(vfx.mirror_y) # y軸鏡像
clip4 = clip3.fx(vfx.mirror_x) # clip3的x軸鏡像
videoclip = clips_array([[clip1, clip2],
[clip3,clip4]])
my_audioclip = AudioFileClip("disco_w.mp4") # 提取原視頻音頻
finalclip = videoclip.set_audio(my_audioclip) # 音頻放入音軌,必須要有這步!
finalclip.write_videofile("ghost-disco.mp4") # 輸出合并視頻
6
總結
簡單的總結一下, 是一個專門用于視頻剪輯的庫,總的來說,當你熟悉了各函數用法以后,是個非常不錯的選擇,對于基本的剪輯,其實遠遠比手動操作軟件來的要快。
最主要的是,使用程序來操作,如果有大量重復視頻,用它來完成一系列的自動批量剪輯,絕對是非常方便,且省時省力!
【往期閱讀】
點「在看」的人都變好看了哦