AviUtl用ルパン三世風タイトルパーツメーカーをちょっと改造してみた。

By | 2018年8月29日

はじめに

ずいぶん前の記事で「AviUtl用ルパン三世風タイトルパーツメーカー」(lupin3rdtwexo.py)をPython3で記述し、いくつかの動画で使用してみました。

最初に開発した当時はツールであるということと、できるだけ早く使いたいと思う気持ちが強かったために、あまり深く考えずにサクサクとプログラムを書いてみたわけですが、実際に運用してみるといろいろと修正をした方が良いと思われる点もいくつか出てきました。

そこで、この記事では改善が必要と思われる点のうち、「生成されたオブジェクト群をグループ化するオプション」を実際に追加してみましたので、それについて書いていきます。

スポンサーリンク

一体、何が問題なのか?

まず、普通に作ってみます。

まず最初に、何が問題なのかをlupin3rdtwexo.pyを使いながら実際に説明していきます。

※というわけなので、結論をお急ぎの方は本節は読み飛ばしていただいても構いません。

以下の手順で、AviUtlにexoファイルをインポートしてみます。

  1. Windowsのコマンドプロンプトで以下のコマンドを実行し、「panda大学習帳」という(ルパン三世風の)タイトルを生成するためのオブジェクトが記述されたAviUtlのエクスポートファイル(以下、「exoファイル」と書きます。)を作成します。なお、タイプライター音については効果音ラボ方面から適当なものを見繕って事前にダウンロードしておきます。また、出力先のexoファイルのファイル名は”pandanote.exo”としています。
    > python.exe lupin3rdtwexo.py “panda大学習帳” <タイプライター音ファイルへのフルパス> > pandanote.exo

     

  2. AviUtlを起動し、手順1で作成したexoファイルをドラッグ&ドロップ等の手段で拡張編集のタイムラインに貼り付けます。すると、タイムライン上では下図のように表示されます。

  3. スポンサーリンク

  4. 上図のような表示では何が表示されているのかわかりにくいので、タイムスケールを拡大してみます。すると、下図のように表示されます。ルパン三世風のタイトルが生成されているようです。

貼り付けることはできましたが…

前節の手順で、exoファイルに記述されたオブジェクト群を動画の先頭に貼り付けることができました。

でも、本来やりたいことは「動画を作る」ということであったはずです。

先は割と長いです。

貼り付けたオブジェクト群も動画の先頭では使えないことの方が普通かと思います。

私の記憶が確かならば、ルパン三世でもいきなりアニメの各回の先頭からタイプライターのタイトルコールがどーんと来ることはなくて、主人公たるルパン三世が不二子ちゃんに足蹴にされたりとかする小噺の後にタイトルコールが来ることの方が圧倒的に多かったはずです。

そういうことで、貼り付けたオブジェクト群を動かすことになるわけですが、このままだとオブジェクトを1個ずつ動かす作業が必要になります。


スポンサーリンク

工数と精神的なダメージがここでアドオンされてきます。

そんなこともあろうかと…

ここまでの稀有壮大な前フリで、オブジェクトを作った後のハンドリングにどうやら課題がありそうだと言うことが理解していただけたところで、どのように解決すればいいか考えることになります。

まず、直感的に思いつくのは、

「exoファイルを出力する時点でグループ化しとけばよくね?」

という策です。

そこで、lupin3rdtwexo.pyにexoファイルの出力時にオブジェクトをグループ化して出力させるコマンドラインオプションを追加することができないか検討することにしました。

サクサクと検討、のち実装。

AviUtlを使って2個のオブジェクトを拡張編集のタイムライン上に作成してグループ化したものを作成してexoファイルに出力して、ファイルの中身をじーっと観察した結果、簡単に実装できそうだったので、以下のように実装してみました。

具体的には、-gオプションを指定すると、オブジェクトが1個のグループの下にグループ化されてexoファイルに出力されます。なお、今回の実装ですがコマンドラインオプションの読み込みにはargparseモジュールなどのパッケージを使わず、”-g”オプションが指定されていたら、以降のコマンドライン引数の要素番号を1減じるというC言語の教科書などに書いてある方法に類似した簡易的な方法を用いています。

動作確認。


スポンサーリンク

-gオプションを指定してlupin3rdtwexo.pyを実行した結果出力されるexoファイルの中身を確認します。各オブジェクトの定義ごとに

group=1

 
という文字列が記述されている行が含まれていれば成功です。

また、AviUtlの拡張編集のタイムライン上に”-g”オプションなしで生成したexoファイルと”-g”オプションありで生成したexoファイルをインポートしてみました(下図)。

上図の(a)が”-g”オプションなしで生成したexoファイルからインポートされたグループ化されていないオブジェクト群で、(b)が”-g”オプションありで生成したexoファイルからインポートされたグループ化されているオブジェクト群を示しています。(a)の方はオブジェクト1個単位でしか移動できないのに対し、(b)の方はまとめて移動できることがわかります。

スポンサーリンク

まとめ

実はAviUtlのテキストオブジェクトには、表示をクリアするタグ(参考文献参照。)があるのですが、タグを入れることによって実際に表示ができる文字数がその分少なくなってしまうのが嫌だったのと、文字だけではなく画像を入れるというアイデアも考えていたので、「1文字につき1オブジェクト」がよいだろうということで、lupin3rdtwexo.pyもそれに沿ったオブジェクト群が記述されたexoファイルを出力する仕様となっています。ただそうは言っても動画作成・編集時の取り扱い方としてはこれらのオブジェクト群は一体的に取り扱うべきものであることは明らかですので、それを実現するためにグループ化というアプローチをとることとしました。

コマンドラインオプションの処理は簡易的な方法としてしました。あまりPython3ではこのような方法でコマンドラインオプションの処理を行うことはなかなかないと思いますが、argparseモジュールを使うのがちょっと重たいなぁ、と思った時にはこの記事を思い出して参考にしていただけると幸いです。

この記事は以上です。

参考文献

  1. 【AviUtl】制御文字の使い方
  2. 効果音ラボ