moviepyで動画にテロップを挿入

諸般の事情により動画にテロップを入れる依頼を受ける。

最初、動画編集 ソフトをRPA(マクロマン)で操作して作業を試みるも、難しすぎて諦めた。

moviepyというライブラリで行けそうだけど、実際いくつかハマりポイントがあるのでメモに残しておく。

実装コード

from moviepy.editor import *
import os

# windows で以下のエラーが出た場合の対処
# .This error can be due to the fact that ImageMagick is not installed on your computer, or (for Windows users) that you didn't specify the path to the ImageMagick binary in file conf.py, or that the path you specified is incorrect
from moviepy.config import change_settings
change_settings({"IMAGEMAGICK_BINARY": r"C:\Programs\ImageMagick-7.1.1-38-portable-Q16-x64\magick.exe"})

def add_telop(in_path, out_path):

    os.makedirs(out_path, exist_ok=True)    
    # 日本語が表示されない場合の対処
    # フォントを列挙->日本語が使えるフォントを探す
    print(TextClip.list("font"))

    fos = os.listdir(in_path)
    for fo in fos:
        __add_telop(out_path, os.path.join(in_path,fo))

def __add_telop(out_path, movie_file):
    movie_path = filename=os.path.abspath(movie_file)
    out_movie = os.path.abspath(os.path.join(out_path, os.path.basename(movie_path)))

    clip = VideoFileClip(movie_path)
    txt_clip = TextClip(
        txt="連絡先 052-XXX-XXXXX", 
        fontsize=20, 
        color='black', 
        font="HG丸ゴシックM-PRO")           # Windowsで適当に日本語が使えるフォント
        # font="ヒラギノ明朝-Pro-W3")     # Macで適当に日本語が使えるフォント
        
    txt_clip = txt_clip.set_position(("right","top")) # 右上に
    txt_clip = txt_clip.set_duration(15) # 15秒間
    txt_clip = txt_clip.set_start(1) # 1秒後から

    video = CompositeVideoClip([clip, txt_clip]) #テキストと映像を合成

    video.write_videofile(filename=out_movie, audio=True, audio_codec='aac')

if __name__ == "__main__":
    add_telop("./movies", "./out")

対処など

1.moviepy

そもそものmoviepyのインストール

https://pypi.org/project/moviepy/

pip install moviepy

2.FFMPEGがインストールされていない

以下のようなエラーが出る

RuntimeError: No ffmpeg exe could be found. Install ffmpeg on your system, or set the IMAGEIO_FFMPEG_EXE environment variable.

https://www.ffmpeg.org/

2.1 Mac : ffmpegをbrewでインストール

$ brew install ffmpeg

2.2 Windows : ffmpegをダウンロードしてPATHを通す

https://ffmpeg.org/
https://github.com/BtbN/FFmpeg-Builds/releases

ffmpeg-master-latest-win64-gpl-shared.zip

PATHに追加例

C:\Programs\ffmpeg-master-latest-win64-gpl-shared\bin

確認

ffmpeg -version

 

3.ImageMagickがインストールされていない

以下のようなエラーが出る

.This error can be due to the fact that ImageMagick is not installed on your computer, or (for Windows users) that you didn’t specify the path to the ImageMagick binary in file conf.py, or that the path you specified is incorrect

2.1 Mac : imagemagickをbrewでインストール

$ brew install imagemagick

2.2 Windows : ffmpegをダウンロードしてPATHを通し、コードで指定

https://imagemagick.org/script/download.php

https://higuma.github.io/2016/08/31/imagemagick–1/

ImageMagick–7.1.1–38-portable-Q16-x64.zip

.This error can be due to the fact that ImageMagick is not installed on your computer, or (for Windows users) that you didn’t specify the path to the ImageMagick binary in file conf.py, or that the path you specified is incorrect

のようなエラーが出る場合、コードで場所を指定

from moviepy.config import change_settings
change_settings({"IMAGEMAGICK_BINARY": r"C:\Programs\ImageMagick-7.1.1-38-portable-Q16-x64\magick.exe"})

4.日本語が出力できない

環境によって使えるフォントを列挙して、明示する

print(TextClip.list("font"))

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です