字幕でアニメーション 〜Aegisub〜

アニメーションと言うほどのことではないのですが、

のようなことをやりたかったわけです。
それも、お金をかけずに・・・

このようなことをするには動画編集ソフトなどを使うのだろうと思い、最初、Photoshopの動画編集機能を使ってみました。

動画を読み込んでフレーム毎のレイヤーに普通に文字や図を描画していきます。
この例では、マーカー(手の矢印+”カモメ”)はIllustratorで作りました。

ちなみに、レイヤーを一つずつ複製(duplicate)するのは面倒なので、

のようなScriptで一気に10個ほどのレイヤーを一度に複製してからマーカー位置を調整していきました。

あとはmp4ファイルで書き出せば良いのですが、Photoshopはちょっと修正する(例えば、’カモメ’文字の大きさや色を変えるとか)にはいかにも重いし、何より人にpsdファイルをあげようとしても周りにPhotoshopを持っている人はいません。

もっと簡単に作る方法がないかと考えているうちに、字幕ファイルで何とかならないかと思いついたのでした。

Aegisubを使う

字幕は通常は画面の下の方に1行から2行程度の文字列を、指定した時間の間表示するもので、ほとんどの動画プレーヤーでサポートされています。(サポートされる字幕ファイルの形式はそれぞれですが)
srtと言う形式が一番基本になるようですが、それにスタイル機能を追加したass形式というものもあります。
ass形式では、字幕(文字に限りませんが)を表示する位置や色の設定はもちろん、図形の描画機能やレイヤーの機能も備わっています。

詳しくは、こちらのサイトで分かり易く解説されています:
 http://www.geocities.co.jp/bancodesrt/index.html

このass形式の字幕ファイルを編集するソフトが、Aegisubです。
Aegisubはオープンソースで開発されています。

Aegisubのダウンロード:
 http://www.aegisub.org/downloads/

一見してわかるように、動画を参照しながらassファイルを編集していくことができます。
下のペインにタイムラインが表示され、右のペインにコードを記述します。

この例では、吹き出しと文字(’カモメ’)は別々のレイヤーにして重ね合わせています。
また、吹き出し
 {\p1}m -57 17 b 42 38 42 -42 -25 -42 b -92 -42 -92 5 -62 14 l -72 32 l -57 17 {\p0}
というコードを用いていますが、これを見て吹き出しとわかる人はいませんよね。

AegisubにはASSdraw3と言うドローイングコマンド記述をサポートするツールが付属しています。

PhotosopやIllustratorのペンツールを使うような感覚で一筆書きの図形を描くと、ドローイングコマンドを生成してくれます。
これを、AegisubにコピペすればOKです。(とはいえ、慣れるまで結構難しいです・・・)

上記の例では、0.05秒毎に表示を切り替えるように編集していますが、Aegisubではフレーム単位での編集も可能です。
 
上図は1フレーム単位で編集したもの(左)を、時間表示(右)に切り替えたものです。
この動画は30fpsですので、
 1フレーム=0.333....秒
となり、時間とフレームの変換に誤差が生じるため1フレームの長さが一定になりません。
つまり、Aegisubが誤差を調整してることになります。

基本的に字幕は(フレームではなく)時間で表示するものですので、これは致し方ないことでしょう。

ソフトサブとハードサブ

ソフトサブ

assファイルができたら動画に表示させます。
動画ファイルとassファイルをいっしょに入力して、字幕をオーバーレイのように表示させることをソフトサブと呼びます。
これは、動画プレーヤーの機能で実現する物で、ほとんどのプレーヤーで表示可能です。
ただ、assでサポートされている機能(スタイルに関するコード等)の全てをサポートするプレーヤーは多くはありません。

例えば、文字(マーカー)を透明にする {\1a&Hff&} と言うコードがあります。
Aegisub上の表示では、

となり、当然ですがマーカーが透明に表示されます。
ところが私が普段使っているVLCメディアプレーヤーでは、

のように透明になるべき部分が黒く塗りつぶされたようになってしまいます。

一方、Pure Codec Player(Potplayer)と言うメディアプレーヤーでは、

のように透明に表示されます。
ただ、このプレーヤーでは、1440x1080の解像度の動画がそのままのアスペクトで再生されてしまい、縦長になってしまいます。

いまのところ、assファイルにフルに対応しているプレーヤーは見つかっておらず、結局のところAegisubに内蔵のプレーヤーが一番ということになりそうです。

ハードサブ

字幕を動画に焼き付けた字幕入り動画をハードサブと言います。
動画とassファイルを入力としたレンダリングを行う事になります。

aviファイルでよければVirtualDubレンダリングできます。

assファイルとアスペクト比を変更するresizeフィルターを読み込んでいます。(解像度が1440x1080なので)
それと、映像圧縮はH.264/MPEG-4 AVC codecにしました。

↓結果

透明のコードもちゃんと効いています。

でもVirtualDubについては、mp4やm2tsを入力できるようにしたり、フィルターとしてassファイルを取り込めるようにしたりする為に、色々なプラグインをセットアップする必要があり、ちょっと敷居が高いです。

普段私は動画フォーマットを変換するツールとして、XMedia Recodeと言うコンバータツールを使っているのですが、実は、このツールがassファイルに対応していることを最近知りました。。。

「字幕」タブで、「インポート」からassファイルを選択し、モード→「レンダ」、コーディング→「Unicode」を選択します。
結果↓

文字が吹き出しからはみ出てしまいましたが、ドローイングコマンドも一応解釈できているようです。
ただ、XMedia Recodeでは、文字(マーカー)を透明にする {\1a&Hff&}は解釈できないようで、やはり透明であるべきところが黒く塗りつぶされてしまいます。


assファイルはテキストファイルなので、Aegisubを使わなくてもテキストエディタで編集できます。
と言うことは、他のアプリケーションとの連携も比較的容易でしょう。
アニメーション用のドローイングコマンドを出力できるようなツールがあれば、もっと楽しい動画が作れるかも知れません。