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.
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"))