見出し画像

【Mac/iMovie】きれいなフォントの字幕を簡単に入れる→透過文字画像ファイル作成の自動化(ImageMagick使用)

Macユーザーが無料で使える動画編集アプリiMovieは、基本的な動画編集作業が直感的にできるので、初心者が動画編集するにはありがたいツールです。

しかし、使っていると圧倒的に機能不足を感じるのが字幕を入れる機能で、好きな位置に文字を移動できない、使えるフォントがいまいち、という欠点があります。

この問題の回避策として、他のアプリで文字の背景を透過色にした画像ファイルを作り、動画に重ね合わせるという方法がありますが、とても面倒です。

本記事では、CSV形式の文字情報ファイルを入力とし、コマンドラインからシェルスクリプト実行により、一括で複数の透過字幕画像ファイルを作成することで、大幅に字幕作成の手間を省く方法を紹介します。

この環境作成当初は、画像への重ね合わせについてもコマンド(ffmpeg)でで実施することを考えていましたが、重ね合わせたあとの文字の位置や表示時間を確認する作業はiMovie上でやった方が効率が良かったため、透過字幕画像を作るところをコマンドで行うようにしました。

フォントの準備

無料のフォントがいろいろありますが、私が試した中では「源ノ角ゴシック」の最も太い字体が、白い縁取りを付けた際に見栄えが良かったので採用しました。

こちらのページ下の方にある「Japanese(日本語)」のリンクをクリックするとダウンロードできます。

/Library/Fonts/SourceHanSans-Heavy.otfのように保存しました。

※ Macに最初からインストールされているフォントのみを使用する場合は、この作業は不要です。  

ImageMagickのインストール

HomeBrewをインストールします。(インストール済みの方は次に進んでください)

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

以下のコマンドでImageMagickをインストールしてください。

brew install imagemagick

必要なファイルの準備

GitHubからシェルスクリプトmake_comment.shをダウンロードします。

git clone https://github.com/tak6uch1/imovie_comment

以下がmake_comment.shの内容です。

#!/bin/sh

MOV_SIZE=1280x720
echo "MOV_SIZE: $MOV_SIZE"

\rm -rf text/* > /dev/null 2>&1
mkdir text > /dev/null 2>&1

convert -size $MOV_SIZE xc:none aaa.png

egrep -v '^#' $1 > tmp_COMMENT.csv
n=0
while read line
do
   font=`echo $line | awk -F, '{print $1}'`
   size=`echo $line | awk -F, '{print $2}'`
   color=`echo $line | awk -F, '{print $3}'`
   stroke_width=`echo $line | awk -F, '{print $4}'`
   stroke_color=`echo $line | awk -F, '{print $5}'`
   gravity=`echo $line | awk -F, '{print $6}'`
   annotate=`echo $line | awk -F, '{print $7}'`
   comment=`echo $line | sed -e 's/^[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,//' -e 's@<[Bb][Rr]>@\\\\n@'g`
   echo "\ncomment_$n.png:"
   echo "  font=$font"
   echo "  size=$size"
   echo "  color=$color"
   echo "  stroke_width=$stroke_width"
   echo "  stroke_color=$stroke_color"
   echo "  gravity=$gravity"
   echo "  annotate=$annotate"
   echo "  comment=$comment"
   echo "convert -font $font -pointsize $size -fill $color -strokewidth $stroke_width -stroke $stroke_color  -gravity $gravity -annotate $annotate \"$comment\" aaa.png text/comment_$n.png"

   convert -font $font -pointsize $size -fill "$color" -strokewidth $stroke_width -stroke $stroke_color -gravity $gravity -annotate $annotate "$comment" aaa.png text/comment_$n.png

   n=`expr $n + 1`
done < tmp_COMMENT.csv

\rm tmp_COMMENT.csv aaa.png

まず、指定サイズ(上記では1280x720)の透過背景の画像を作成し、それに文字を重ね合わせる、という処理をImageMagickのconvertコマンドを使って行っています。

次にvi等のテキストエディタで入力ファイルを作成します。

vi COMMENT.csv

下記のように、1行が1枚の文字画像ファイルになります。

以下はGitHubに同梱しているCOMMENT_sample.csvの内容です。

#Font,Size,Color,StrokeWidth,StrokeColor,Gravity,Annotate,Comment
/Library/Fonts/SourceHanSans-Heavy.otf,80,#3377CC,2,white,south,+0+10,割とよくあるコメント
/Library/Fonts/SourceHanSans-Heavy.otf,80,red,2,white,south,+0+10,長い文章のときは<br>改行を入れると良い
/Library/Fonts/SourceHanSans-Heavy.otf,80,blue,2,white,west,+0+0,【箇条書き】<br>・左詰めはwest<br>・青字にしてみた
/System/Library/Fonts/Keyboard.ttf,70,red,2,white,north,+0-10,sample command
/Library/Fonts/SourceHanSans-Heavy.otf,200,#3377CC,2,white,center,+0+0,デカ字

第1カラム:フォント名(拡張子が.otfや.ttfのものが使えます)
第2カラム:フォントサイズ
第3カラム:文字色(blackなどの文字列または#000000〜#FFFFFF)
第4カラム:縁取りの幅
第5カラム:縁取りの色(blackなどの文字列または#000000〜#FFFFFF)
第6カラム:表示位置(※下図参考)
第7カラム:X,Y座標補正(+-を付けた数値でX,Yの順)
第8カラム:字幕文字列(改行は<br>)

※表示位置として指定可能なのは以下です。

画像1

(https://qiita.com/yoya/items/b6926f01b7cb90217e07より)

透過文字画像生成スクリプト実行

COMMENT.csvとmake_comment.shがあるディレクトリで以下を実行します。

./make_comment.sh COMMENT.csv

これによりtextディレクトリができて、その下にcomment_番号.pngができます。

画像2

これらpngファイルをiMovieに取り込み、動画に重ね合わせることで字幕が付きます。

画像3

以下の動画に手順のすべてを収めていますので、iMovieの操作等を含めた手順のイメージをつかむのに役立つと思います。

https://youtu.be/Bk9NP3qlqoA

まとめ

ImageMagickの機能を使い、透過字幕画像ファイルの作成を自動化したことで、きれいなフォントの字幕をかんたんに入れられるようになりました。

iMovieの文字入れ機能に不満をお持ちの方のお役に立てれば幸いです。

参考文献

源ノ角ゴシックフォント(https://github.com/adobe-fonts/source-han-sans/tree/release

ImageMagickの使いかた日本語マニュアル(https://imagemagick.biz/

この記事が気に入ったらサポートをしてみませんか?