iT邦幫忙

2

python好用模組moviepy幫你剪輯/串接影片

近來有大量處理影片的需求,
剛好有在網上查到moviepy是python中強大的編輯影片模組,
便嘗試使用看看,
以下記錄下安裝的過程及簡易的使用方法。

開發環境: anaconda->Spyder4.0.1, python版本3.7

一、安裝教學

可先參考網路的這篇教學,
有空小馬再將細節補上。

自己是用網上教的第二個「手動安裝」的方式,
先在github下載程式碼,
將程式碼解壓縮至一個資料夾下,
再於該資料夾下,
於anaconda prompt命令視窗中下指令

python setup.py install

二、程式碼教學

如想將三個影片檔案1.mp4, 2.mp4, 3.mp4串接為一個),
並輸出影片名out.mp4(新的影片單純按順序播放這三個影片),
程式碼如下:

from moviepy.editor import VideoFileClip, concatenate_videoclips

clip1 = VideoFileClip("1.mp4")
clip2 = VideoFileClip("2.mp4")
clip3 = VideoFileClip("3.mp4")

finalclip = concatenate_videoclips([clip1, clip2, clip3])
finalclip.write_videofile("out.mp4") # 寫出檔案out.mp4

注意1.mp4, 2.mp4, 3.mp4這三支影片必須跟你的python程式放在同一個資料夾下才能執行。

三、碰到問題記錄

程式無法編譯

照網上教學安裝完moviepy後,似乎還無法直接執行程式,
仍需在anaconda prompt命令視窗下一行指令安裝必要的軟件ffmpeg:

conda install ffmpeg -c conda-forge

串接好的影片只有影像沒有聲音

小馬在網上搜索很多資料都解決不了,
小馬的解決方法是在anaconda prompt下指令:

conda uninstall ffmpeg

我的原意是想說沒有聲音會不會是ffmpeg版本不對的問題,
打算先卸載ffmpeg再嘗試重裝看看,
然後莫名其妙就修好了,
目前此問題仍是一個謎(?)

四、舉一反三: 串接一百多個影片,每十四個接成一個影片

情境: 假設你現在有154個短影片(.mp4檔案),
你想要每14個短影片串成一個影片,
總共串成11個影片 (因為14*11=154),
那麼如何讓python幫我們自動做這件事呢?

我們可以結合之前的技術python批量讀取資料夾檔案、修改檔案
首先將154個.mp4檔利用程式將名稱更改為1.mp4, 2.mp4,..., 154.mp4
函數如下:

import os
def batch_rename(path):
    # 函數功能: 在指定path路徑下,將文件依名字順序重新命名
    i=1
    f=os.listdir(path)
    f.sort() # 按文件名排序,否則為亂序
    for fname in f:
        new_fname = str(i)+".mp4"
        os.rename(os.path.join(path, fname), os.path.join(path, new_fname))
        i+=1

工作完成後,將154個影音檔置於跟python程式同一個資料夾下,
執行底下的程式:

def videoConcat(name, videos):
    # 函數功能: videos是list[str]記錄要串接的影片名稱,name是欲輸出的影片名稱
    finalclip = concatenate_videoclips([VideoFileClip(v) for v in videos])
    finalclip.write_videofile(name)

for i in range(11):
    videos = [str(i*14+j)+".mp4" for j in range(1,15)]
    videoConcat("myVideo_"+str(i)+".mp4", videos)

(註: 目前本文整理moviepy的功能尚未完善,預計再找時間詳盡它)


尚未有邦友留言

立即登入留言