1. 程式人生 > >Mac High Sierra + pyCharm + py3.5 + Moviepy 工廠式視訊合成測試

Mac High Sierra + pyCharm + py3.5 + Moviepy 工廠式視訊合成測試

近日接觸手機端小視訊合成業務,發現現有的主流視訊合成APP中,能實現“單張圖片 + 指定語音”型別的APP屈指可數,ios自帶APP“Clips”僅能合成正方形圖片,超出正方形部分會自動進行黑色背景補齊。

於是需要一個能在手機端完成的、實現“單張圖片 + 指定語音”、視訊畫面尺寸可自行定製的APP或小程式。

百度之,忽略中間的資料傳輸部分,發現py有可工廠化的伺服器端視訊合成模組Moviepy,利用已有 Mac High Sierra + pyCharm + py3.5 進行測試。

一、安裝Moviepy
(1) 在pyCharm上搜索模組“moviepy”並安裝

注:安裝期間報錯,更新pip後順利安裝,因依賴模組較多,安裝時間較長

(2) 安裝 ImageMagick, http://www.imagemagick.org/script/download.php
跳轉至Mac部分,下載提示如下:
imagemagick_macos下載說明

如圖,官方推薦使用 MacPorts 進行 ImageMagick 安裝,MacPorts 的pkg下載連結 https://www.macports.org/install.php,按提示進行 pkg 安裝後即完成 ImageMagick 安裝

(3) 在pyCharm上搜索模組“ffmpeg”並安裝(完成視訊合成的關鍵部分)

二、利用 Moviepy 製作視訊合成工廠的核心程式碼部分

視訊合成工廠在量少時可以簡單設計為佇列模式,量多時可設計成並行池模式。這裡討論核心程式碼部分。程式碼如下。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time     :2018/7/26 21:11
# @Author   : Ale
# @File     : compose.py
# @Software : PyCharm

from moviepy.editor import *
from moviepy.audio.fx import all

# 設定視訊字型以支援中文字元
FONT_URL = '/Users/Ale/Library/Fonts/msyh.ttf'


def render(input_video, output_video="new_video.mp4"
)
:
# 剪個10s的720x1280px的10s視訊,即手機豎屏 background_clip = VideoFileClip(input_video, target_resolution=(1280, 720)).subclip(0, 10) # 螢幕下方居中加文字, 持續10s text_clip1 = TextClip('我是字幕', fontsize=30, color='white', font=FONT_URL) text_clip1 = text_clip1.set_position(('center', 'bottom')) text_clip1 = text_clip1.set_duration(10) # 右下角加文字, 持續3s text_clip2 = TextClip('我是右下角字幕', fontsize=30, color='white', font=FONT_URL) text_clip2 = text_clip2.subclip(0, 3).set_position(('right', 'bottom')) # 圖片放中間, 從第2s開始播持續6s image_clip = ImageClip('xx.png') image_clip = image_clip.set_duration(6).set_position('center').set_start(2) # 合成視訊 video = CompositeVideoClip([background_clip, text_clip1, text_clip2, image_clip]) # 替換音訊 audio_clip = AudioFileClip('a.mp3').subclip(0, 10) video = video.set_audio(audio_clip) # 調節音量 video = all.volumex(video, 0.8) # 輸出合成視訊,libx264 = *.mp4 的預設編碼格式 video.write_videofile(output_video, codec='libx264') # 輸出合成視訊的音訊部分 audio_output = video.audio audio_output.write_audiofile('a-output.mp3') print('Done') if __name__ == '__main__': print('Start') # 事先用Pr等軟體準備黑色背景的無聲 backgroundvideo.mp4,視訊時間長度需大於待輸出視訊時間長度 render(input_video="backgroundvideo.mp4", output_video="output_video.mp4")

說明:
1. 字幕部分為測試對中文字元的支援使用,若不手工指定支援中文字元的字型,則中文部分亂碼。
2. moviepy的各函式引數用例可參考官網 http://zulko.github.io/moviepy/index.html,其中的視音訊輸入輸出格式均可進行指定,支援web開發專用格式。(本博後續將推出該網站內容翻譯,敬請期待!)
3. 輸出視訊 output_video.mp4 在 mac 系統自帶播放器上無法輸出聲音,在 mac 版 Pr 內有聲音且可分離出音訊檔案,單獨輸出視訊合成後的音訊部分,即

# 輸出合成視訊的音訊部分
audio_output = video.audio
audio_output.write_audiofile('a-output.mp3')

發現視訊聲音確已進行替換。將合成視訊拷貝至win系統後任一播放器均可成功播放視訊聲音。百度之谷歌之未搜尋到相關問題及其解答,懷疑為 moviepy 、ffmpeg 及其依賴外掛針對 macOS 版本的適配問題,後續會繼續進行驗證。

參考連結:
1. 用Python剪輯製作簡單視訊(moviepy) https://blog.csdn.net/u014563989/article/details/79953730
2. 用Python編輯視訊:MoviePy https://baijiahao.baidu.com/s?id=1595821972028895763&wfr=spider&for=pc
3. 視訊自媒體人:《幾行python搞定一切》的安裝方法 https://baijiahao.baidu.com/s?id=1590372519257149053&wfr=spider&for=pc
4. moviepy初體驗 https://blog.csdn.net/zjshui/article/details/78343171
5. moviepy使用者手冊 http://zulko.github.io/moviepy/index.html

今天先到這兒,有問題請下方留言,謝謝~