Program
撮影ツールとしてのMacOSXとUNIX


アニメ撮影とプログラム

【2】初めて作るソフトウェア

ソフトを作る‥‥と言ったって‥‥。

 「誰も作らないのなら自分で作る!こうなったらソフトの作り方の1つや2つくらい覚えてやる!」‥‥と一大決心をしても、「‥‥とっかかり、何から始めたら良いんだろう‥‥?」と、振り上げたコブシのやり場に困ってしまう人は結構多いのではないかと思います。とりあえず、大きい本屋さんのコンピュータ関連図書のコーナーに足を運ぶと、何やら色々置いてあってどれを購入したら良いかも解りません。そんな時、「どの参考書を買ったら良いかも解らない自分に、これからプログラムを覚えるなんてできるんだろうか‥‥」と早々にくじけそうになります。‥‥かつての私自身がそうだったので、似たような境遇の人たちの心境を容易に想像出来るのです。

 「ソフトウェアを作る『開発環境』は何が良いのか」「その開発環境の値段はいくらなのか?」「自分のマシンはソフトウェア開発に適しているのか」など、わからない事だらけです。わからない事が2つや3つなら何とかなりそうな気分にもなりますが両手にあまるほどだったら「お手上げムード」がどんどん濃厚になり、「プログラム言語の習得で苦労するのは目に見えているのに、その前段階でこれほど多くつまずいていたら、お話にならない」と自虐的な気持ちに陥っていきます。

 まず、「山ほどあるプログラム言語のうち、何から始めたら良いのか」でつまずきます。各種解説本の冒頭に書かれている「xxはooに比べて優れている」「xxはスタンダードだ」「ooはこれから発展していく有望株だ」などのプログラム言語の紹介文は、全くの初心者にとっては「何を選べば良いのか迷う」結果を招いてしまいます。事実私は、どのプログラム言語を選択したら良いか、初心者の頃はまったく自己判断できませんでした。Webで検索しても、結局は「素人判断」で検索結果を取捨選択しなければなりませんし、情報の「読み間違い・誤解釈」で妙な思い込みを自ら植え付ける危険性もあります。だからといって、初心者・素人の身としては、「判断が正しいか否か」すら解りません。結果、「やっぱり自分には無理だ」と自己完結し、プログラム習得の第1ステップからつまずきます。

 「何から始めたら良いのか」と迷う原因は、いくつかあると思います。「入り口が簡単なものはどれか」「将来性のあるものはどれか」「目的(今回の場合は撮影・エフェクト)に適したものはどれか」などが、代表的な「迷う原因」でしょう。しかしこれらを気にするあまり、選考条件の折り合いがつかなくなって先に進めなくなってしまう事はよくあります。私はプログラムを始める以前、「あれもこれも作りたい」と言う欲求から選考条件を乱立させてしまい、その条件をすべて満たすものを見いだせずに破綻してしまった(結局モノにならなかった)という経験があります。

 では、「何から始めたら」良いのでしょうか?‥‥私の経験から申しますと、「手の届く範囲から始める」のが良いかと思います。「手の届く範囲」とは、有り体に言えば無償で入手出来るプログラム言語です。無償で配布されているIDE(Integrated Development Environment = 統合開発環境)は、現在結構な数にのぼりますし、MacOSXは「AppleScript」「Xcode」が最初から付属しています。全くの初心者の頃から数万円出費してIDEを購入するよりは、まずそこから始めて「様子見」してみましょう。
注)MacOSXに付属している開発言語は、「無償」と言うよりは「最初から値段の内の数パーセントに含まれている」と言った方が良いかもしれませんね。ちなみに、XcodeはAppleのWebから無償でダウンロードする事が可能です。

 ここである人は「覚えるからには後々『ツブし』が効くプログラム言語を選択したい」と思うかも知れません。しかし「ツブし」が効く事を優先するあまり、最初から難易度の高い言語を選んでしまい、結局習得出来なかった‥‥という結果になっしまったら、それはもう「ツブしが効く以前の話」です。どんなプログラム言語を選択しても、それを使いこなせるレベルに上達していれば、他言語の習得や移行は案外柔軟におこなえるものです。これはプログラム言語各々の言葉や作法は違えど、基本的・根本的な構造はさほど変わらないからです。私はHyperCardとAppleScriptでプログラムを勉強し始めたのですが、初心者の頃にJavaやPerlのプログラム文を見てもまるでチンプンカンプンで「何て難解なんだろう」と怖じけづいてしまい、購入したPerl等の解説本も長らく放置していました。しかし数年後、自由にAppleScriptを使えるようになった頃に他言語のプログラム文を見たら、その言語を勉強した訳でも無いのにそれなりに読めて理解できるようになっていました。数年のうちに、私の中でプログラムを読解する「脳みそ」が発達した結果なのでしょう。

 初心者の頃は色々な情報に惑わされ、「あれが良い、これが優れている」と「耳年増」になりやすいですが、手の届く範囲から気楽に始めるのが、実は一番現実的で確実な選択ではないかと思います。‥‥これは、「あれもこれも」と迷って散財した私自身の感想でもあります。


私のオススメ言語

 ぶっちゃけた話、「手の届く範囲で自由に選択すれば良いんじゃない?」‥‥なのですが、それでは話を進めづらいので、私なりのオススメ言語を例にとって話を進めようと思います。

 私の個人的な意見・感想ですが、仕事の片手間に覚えるのならまず最初はJava、MacOSならAppleScript、シェルスクリプトあたりが手頃で良いと思います。私がプログラムに「馴染む」きっかけとなったのはAppleScriptでしたが、それは仕事の片手間に覚えるのにはピッタリな「とっつきやすい」言語だったからです。AppleScriptとは言語のディテール(外見)が違いますが、Javaも解りやすい言語のひとつだと思います。いきなり1行目から命令を始められるAppleScriptに比べて、明示的に「クラス」「メソッド」「インスタンス」等の「プログラムっぽい」ものを扱う点で多少敷居が高いですが、使っているうちに馴染んでくるものと思います。自身を「Javaにはをやるにはちょっと早い」と判断したのならば、シェルスクリプトが良いかも知れません。シェルスクリプトはコマンド文を組み合わせて作る方法に加えて、Webで公開・配布されている豊富な画像映像処理系ツールをコマンドから呼び出して組み合わせす方法があります。シェルスクリプトでも、画像映像処理機能を有した撮影・エフェクト作業用オリジナルツールを作成できます。

 JavaもAppleScriptもMacOSXではXcodeというIDEに組み込まれていて、GUI(グラフィカル・ユーザ・インターフェース)付きのソフトウェアを苦労せずに作成する事が可能です。WindowsではEclipse(JavaのIDE)を使うのも良いと思います。

 初心者にとって必要なのは、何と言っても「敷居の低さ」です。最初から洗練されたソースコード(プログラム文)を書ける訳も無いですから、「ベタベタな書き方でも、それなりに動いてくれる」プログラム言語が、仕事の片手間に習得するには適していると思います。先にも書きましたが、初心者の頃から「高望み」をすると、結局何も得られない結果になる事が多いのです。数行でプログラムが作成できる言語は、プログラムが上手く動作しない時に解決の糸口が見つかりやすく、限られた時間を用いて独学で習得する人々には、それだけで習得しやすい要素となります。初心者の頃は最初の1行でつまずく事すらある訳ですから、段取りに何行も必要とする言語よりは、まずAppleScriptなどの「入りやすい」言語から始めて見る事をお勧めします。

 AppleScriptについて簡単に説明しますと、AppleScriptは単体でゼロから作るというよりは、After EffectsやPhotoshopなど既存のソフトウェアを組み込んでソフトウェアを作る、一風変わった言語です。他の言語がPictureやGraphicsクラスで画像を扱うのに比べて、AppleScriptは自己の機能の他、Photoshopなどのグラフィックソフトの機能を「使わせてもらって」画像を扱う事が可能です。例えば、After Effectsでレンダリングした後にPhotoshopで定型処理を施し、TransmitでFTPサーバに接続してファイルを転送、処理結果をMail.appで関係者にメール送信、HTML化したログファイルをApacheでWeb公開、処理後のファイルはFinder(MacOSのシステム)のラベル機能で色を付ける‥‥と言う「複合技」「連携技」をアプリケーション化する事が可能です。UNIXのコマンドを送る事も可能ですので、豊富なUNIXアプリケーションをAppleScriptから制御する事も可能です。先ほど少し紹介したシェルスクリプトの「窓口」としても活用できます。

とりあえず、作ってみる

 では、私自身がプログラムを始めるきっかけとなったAppleScriptを用いて、「1行だけのアプリケーション」を作ってみます。定番の「Hello, World.」から始めたいところですが、当初の目的である「撮影・エフェクトのツール作り」に準じて、Quicktimeを用いたアプリケーションを説明しようと思います。まず最初に、AppleScriptのScript Editorを起動して、プログラム作成の準備をします。


注)書類名が名称未設定 4になっているのは、筆者の都合によるものです

 テキストエディタと同様、文章を書き込む欄があります。カーソルの「 | 」が表示されている部分です。下の段は、プログラムの情報が表示される部分で、プログラムを実行した結果などが表示されます。それでは、下記の1行プログラムを実際に書き込んでみます。

tell application "QuickTime Player" to if front movie exists then set dimensions of front movie to {"720", "540"}

注)ブラウザのウィンドウ幅によっては回り込んで2行になっているかもしれません
注)原稿執筆時点のQuickTime6.5では上記スクリプトは動作していましたが、7.0以降では正常に動作しない事が確認されています。QuickTime7を使う場合は、current matrixなどdimensions以外のプロパティを使う必要があります。
→7.0.2以降で正常に動作するようになりました。


注)2行に見えるのは文の回り込みによるものですので、実際は改行無しの1行で書き込んでください

 書き込んだ直後の文章は単色で表示されます。これは書き込んだプログラム文が一度も「内容チェック」を通過していない事を示しています。ウィンドウ上部の「トンカチ」アイコンをクリックし、コンパイル(構文チェック)します。コンパイルは「Enter」キー(「Return」ではない)をタイプしてもおこなえます。プログラム文に問題が無い場合は、以下のように文中の各要素が色分けされて再表示されます。

 もし以下のような警告ダイアログが表示された場合は、文中に不適切な表記がある事を示しています。

 スペルが間違っていないか、余計な改行はしていないか、余計なスペースや句読点を書いていないかなどをチェックしてみてください。間違っても、「文章が解りやすいように自分で変えた」‥‥なんて事はしないように。

 以上で「ムービーを720x540のサイズにリサイズする」アプリケーションのソースコード(プログラムの文章)を作り終えました。ソースコードを読むと、何をやっているかおぼろげながら解るのではないでしょうか。日本語で表現すると、「アプリケーション「Quicktime Player」に対し、もし手前のムービーが存在するならば、手前のムービーのディメンションを720,540にセットする」という内容です。


動かしてみる

 ではいよいよ、作ったプログラムを実際に動作させてみましょう。今回のプログラムは「ムービーを720x540のサイズにリサイズする」アプリケーションですから、まず最初にQuicktime Playerで何かムービーを表示しておきましょう。movやmpgの拡張子をもつファイルをQuicktime Playerで開いてください。準備ができたら、AppleScriptのウィンドウに戻って、左上にある「実行」ボタンを押して、動作テストをしてみましょう。


320x240のデジカメムービー


実行ボタンをクリック


プログラム実行で720x540に変更

 もしうまく動いたら、プログラムの動作テストは成功です。おめでとうございます。

 これをアプリケーションとして書き出してみましょう。リサイズのたびにAppleScriptのエディタでプログラム文を表示させて実行ボタンを押すよりは、アプリケーションとして成立させた方が手間がかかりません。スクリプトは他のアプリケーション同様「保存」メニューを用いて保存しますが、その際の保存形式にアプリケーション形式を選ぶ事で「単体アプリケーション」が作成できます。


適当に名前をつけて、お好きな保存場所を指定してください。


フォーマットを「アプリケーション」にセットしてください。「実行専用」にチェックを入れると、後々の変更が出来なくなってしまいますので、チェックは外してください。「初期画面」にチェックを入れると「アプリケーションを実行するが、本当に良いか?」の確認ウィンドウが最初に開きます。今回はワンクリックで動作させたいので外しておきます。「実行後、自動的に終了しない」は常駐アプリケーションを作る際にチェックを入れますので、今回は不要です。

 以上で、(単機能のかわいいプログラムですが)ムービーの表示をリサイズする立派なアプリケーションの出来上がりです。書き出したアプリケーションをダブルクリックすると、いつでも表示中のムービーの寸法をリサイズする事ができます。

 実際に作ってみると、「こんなに簡単にアプリケーションが作れるのか‥‥。」と実感される事でしょう。私自身の経験として申しますと、最初から敷居の高い言語から習得するよりは、AppleScriptのような手軽な言語で徐々にプログラムに馴染んでいって、必要に応じて他の言語へと進んでいくのが、「片手間でプログラムとつき合う」良い方法だと思っています。


改良してみる

 「とりあえず作ってみた」アプリケーションですが、いつも720x540にリサイズしたいとは限りません。もしかしたら640x480にリサイズしたい事だってあるかもしれません。そこで、ユーザ(アプリケーションを使う人)の数値入力をムービーの表示サイズに適用するアプリケーションを、前回のプログラム文から一部変更して作ってみます。以下はそのプログラム文です。

tell application "QuickTime Player" to if front movie exists then set dimensions of front movie to {(text returned of (display dialog "横幅を入力" default answer "")) as integer, (text returned of (display dialog "縦幅を入力" default answer "")) as integer}

 基本構造は前のプログラムと同じですが、前プログラム文の{720,540}の部分を、{(text returned of (display dialog "横幅を入力" default answer "")) as integer, (text returned of (display dialog "縦幅を入力" default answer "")) as integer} という内容に変更しました。変更部分のdisplay dialogという記述が対話式アプリケーションを実現しています。


ユーザの入力を待つ


ユーザがキーボードから数値を入力する

 プログラムの内容を変更したら、別名で保存します。保存の際の段取りは、前と同じです。

 さらに改良して、表示中のムービーの寸法を初期値として入力欄に表示する仕様にしてみましょう。これによりユーザは「現在のムービーの寸法」を知る事ができ、入力の際の参考とする事ができます。

tell application "QuickTime Player" to if front movie exists then set dimensions of front movie to {(text returned of (display dialog "横幅を入力" default answer ((item 1 of ((dimensions of front movie) as list)) as text)) as integer), (text returned of (display dialog "縦幅を入力" default answer ((item 2 of ((dimensions of front movie) as list)) as text)) as integer)}

 ‥‥無理矢理1行に詰め込んだ感も否めませんが、ムービーの変更前の縦横幅をダイアログ入力欄にあらかじめ表示しておく仕様に変更されました。

 参考に、無理矢理1行に詰め込まず、数行に分けて書く方法を紹介してみます。単に複数行化するのではなく、「try文」や「サブルーチン」と言う手法を使って「エラー対策」を強化していますが、動作内容は上記1行スクリプトと同じです。行数が多くなると大変そうに見えますが、一行ずつ読んでいけば理解出来ない事はありません。すぐに理解できなくても、日頃からプログラムと付かず離れずの距離で接していれば、解るようになってくるものです。

tell application "QuickTime Player"
if front movie exists then
set mDimensions to dimensions of front movie
try
set mWidth to my getAnswer("横幅を入力", (item 1 of mDimensions) as string)
set mHeight to my getAnswer("縦幅を入力", (item 2 of mDimensions) as string)
on error
return
end try
set dimensions of front movie to {mWidth, mHeight}
end if
end tell

to getAnswer(txt_, ans_)
tell application "QuickTime Player"
set res to text returned of (display dialog txt_ default answer ans_)
try
return res as integer
on error msg
beep
display dialog msg buttons "Cancel" default button 1 giving up after 5
error
end try
end tell
end getAnswer

 寸法を変更するアプリケーションを作ったのならば、寸法をもとに戻すアプリケーションも作っておきましょう。ムービーを保存しないで閉じて開き直せばもとの縦横幅に戻るんですが、それではあまりスマートでは無いので、ワンクリックでもとに戻すアプリケーションを作ってみます。

tell application "QuickTime Player" to if front movie exists then set dimensions of front movie to natural dimensions of front movie

 文中のnatural dimensionsという言葉が、ムービー初期状態の縦横幅を指しています。natural dimensionsを縦横幅にセットすれば、保存されている状態=もとの寸法に戻る‥‥という仕組みです。

 以上のように、自分の使い方や好みに合わせて、ツールをカスタマイズしていきます。


プログラム文を作る際の「辞書」

 初心の頃は、使い慣れている人たちのプログラム文を見て、「何でそんなに色々な用語を知っているの?」と不思議に感じるものですが、実はちゃんと「辞書」や「取り扱い説明書」が、プログラマーの為に用意されているのです。

 以下はAppleScriptの用語辞書の一覧です。一覧に登録されていないアプリケーションを追加する事も可能です。

 Quicktime Playerの用語辞書を開くと、プログラムに必要な情報が提示されます。今回の例ではムービーのプロパティ(要素)を変更してリサイズしましたが、resize命令でもリサイズが可能であることが記述されています。

 AppleScriptに限らず、プログラム言語には必ずこうした辞書・リファレンスが存在します。After Effectsのレンダーオートメーションやエクスプレッション、Photoshopのスクリプトなどもすべて辞書や解説書が用意されていますので、用語を忘れたり使用法が解らなくなったら、いつでも辞書を見て確認すれば良いのです。


まとめ

 以上、Quicktimeムービーを処理するプログラムを、AppleScriptという言語を用いて作ってみました。自作ツールは、自分のニーズや使い方に合わせたり、撮影・エフェクト作業工程の都合に合わせる事が可能であり、そこがまさに「自作ツールならではの醍醐味」と言えます。

 今回作ったアプリケーションは、単機能で複数ファイルへの連続処理もできず、ずいぶん「かわいい」内容のものです。しかしこれに改造を加えると「作品全カットの編集用ムービーファイルを生成する」アプリケーションを作る事も可能です。状況によっては、著しく有用なアプリケーションになる事もあり得るのです。

 ここで紹介した内容はほんのさわり程度でしたが、プログラムが必ずしも「呪文のような文章を、延々と羅列する」わけでは無いのがお解り頂けたのではないでしょうか。

 ‥‥とは言うものの、「適当に英文を書けば良い」訳ではありません。プログラム文中にはAppleScript独特の言い回し、つまり「tell aplication ...」や「if ... then」などの一定のお約束があります。それら「言い回し」についてお知りになりたい場合は、優れた解説サイトや解説本がありますので、そちらを参照してみてください。以下は私が日頃参考にさせて頂いているサイトです。




【1】< >【3】

INDEX


Google
Web integer9.ezqnet.com


IntegerQ INDEX
h.ezura / afx / ezqnet