作品制作時は、大きく2つの面のバランスで成り立っています。運用と表現。
AppleScriptで運用面を強化すると、巡り巡って、映像表現にも差が表れます。表現に割ける時間が増えるからです。
しかし、どんなに運用面を強化して、快適で鉄壁な制作現場を構築しても、それはあくまで「作品表現が豊かになる『お膳立て』が出来た」に過ぎません。理想的なワークフローを築き上げても、面白い作品を作れるか否かは、無惨な言い方ですが「作り手の映像表現の才能」次第です。
でも、ワークフローがグチャグチャだと、どんなに才能豊かな人材を集めても、ロスが大きくて、作品表現に届く前に半減してしまいます。
要は、運用と表現の両面を、磨き続けるココロが必要なわけです。
まあ、往々にして、映像表現力に自信を持つ人は運用を軽んじ、作業を回す事を重視する人は映像表現に疎くなる傾向があります。どちらに偏り過ぎてもマズいのよね‥‥と、よく自己批判します。

今回のスクリプトは、QTの扱いの基礎です。
QuickTimeムービーファイルが、どのような仕組みなのかを、AppleScriptを使って探ってみます。
AppleScriptで簡単にQTの内容を調べるには、「QuickTime Player 7」を使います。「X」じゃダメです。
QuickTime Player 7で何か適当なQTファイルを開いて、そのファイルの様子を探ります。
探り方は、以下のようなスクリプトを書いて、調べます。
tell application "QuickTime Player 7"
properties of document 1
end tell
「document 1」とは、一番手前に表示されているムービーの事です。
すると、以下のような「ドキュメント」情報が返されます。
{video brightness adjustment:0.0, name:"f.mov", play all frames:false, current node:missing value, id:1, max time loaded:2640, resizable:normal, time:0, show detailed movie info window:false, natural dimensions:{1920, 1080}, color table:missing value, default node:missing value, show sound controls:false, show video controls:false, show movie info window:false, class:document, show hot spots:false, preferred audio balance track:missing value, fast start:false, output muted:false, poster frame time:0, href:"", pan range:{0.0, 0.0}, selection duration:0, video contrast adjustment:0.0, current chapter:missing value, sound balance:0, sound volume:256, auto quit when done:false, savable:true, pan angle:0.0, time scale:24, presentation mode:normal, bass gain:0, tilt range:{0.0, 0.0}, scale:half, treble gain:0, streaming status message:"", preferred audio gain track:missing value, playing:false, auto close when done:false, aperture:clean, auto play:false, video tint adjustment:0.0, controller type:«constant ****Quic», dimensions:{960, 540}, duration:2640, pan tilt speed:0.0, data size:389908742, field of view:0.0, play selection only:false, live stream:false, looping:false, current chapter track:{}, auto present:false, preferred rate:1.0, video color adjustment:1.0, path:"/Volumes/外付けのHDD/Render/f.mov", stored stream:false, index:1, modified:true, saveable:true, selection start:0, local playback:true, done:false, palindrome:false, current matrix:{{0.5, 0.0, 0.0}, {0.0, 0.5, 0.0}, {0.0, 0.0, 1.0}}, rate:0.0, tilt angle:0.0, language:"SystemDefault", preview:{0, 0}, streaming status code:0, presentation background color:{0, 0, 0}, selection:0, quit when done:false, close when done:false, data rate:3545923, original file:file "外付けのHDD:Render:f.mov", plugin settings:{}, display state:normal, field of view range:{0.0, 0.0}, zoom rate:0.0, load state:complete}
‥‥いっぱいありますネ。
例えば、「natural dimensions」のラベルの値を見てみると、{1920, 1080}になっています。ナチュラルディメンションとは、自然な寸法、つまりQTファイルの「素の状態の」ピクセル寸法が解るわけです。
一方、「dimensions」は、{960, 540}になっています。これはつまり、現在表示している状態のピクセル寸法です。私が1/2の大きさで表示してたので、この値になっているのですネ。
重要なのは、time scaleとdurationの項です。このドキュメントは、time scaleは「24」、durationは「2640」となっています。1秒をどのようなスケールで扱うかがtime scale、そのtime scaleに基づいてムービーの尺を表したのがdurationです。
つまり、このドキュメントの尺は「2640/24」で110秒です。今回流用したムービーファイルは、前にフリッカー参考例で出したファイルなのですが、確かに1分50秒です。After Effectsで、24.0fpsでレンダリングしたので、とても歯切れの良い簡単な数値「24」になってくれたのです。
fpsが23.976の場合は、ちょっと状況が変わってきます。「time scaleは23.976になるのでは?」と思うかも知れませんが、「time scaleは整数で扱う」事と決められているので、そうはなりません。私の手元のQTで調べたところ、
23.976fpsのtime scale → 24000‥‥でした。ちなみに、23.976fpsのQTの1フレームのデュレーションは
duration of frame 1 of track 1 of document 1 → 1001‥‥でした。つまり1フレームの長さが1001という設定なのです。これを計算してfpsを求めると、
「24000/1001」=23.976024‥‥です。まあ、たしかに。末尾の「024」という端数にそこはかとない不安が残りますが、概ね‥‥。
計算しやすいように、今度は1分ジャストの23.976fpsムービーを開いて調べてみます。
23.976fpsの1分のQTファイルのdurationは、
1441440でした。
これを慌てて、「
duration/time scale」なんていう計算をすると、めっちゃ誤差が出ます。
1441440/24000=60.06結果は「60.06秒」‥‥たしかに。でも現場ではあくまで60秒として扱わなければなりません。
ドロップフレームではなく、ノンドロップフレームの「ご都合」をちゃんと考慮して計算式を組み立てましょう。
こんな感じに。
duration/フレームのデュレーション/(round (time scale/フレームのデュレーション))「
round」とは四捨五入の事です。今回の場合は「23.976024を四捨五入」という事ですネ。
つまり、
1441440/1001/24=60.00で、正しいデュレーションが返ります。あくまで「ビデオ上の時間軸」の‥‥ですネ。
こんな感じで、QTから様々な情報を得て計算すると、映像制作の各場面で用いる事ができます。
しかしなあ‥‥、こういう計算をしていると、心が荒んでくるのよネ。30fpsが29.97になったいきさつ、そして、29.97のノンドロップが生まれた背景‥‥。そして、さらに23.976 (24p)や59.94 (60p)に拡大して‥‥。「29.97DF」「29.97NDF」「30.0」の3つが混在する状況って‥‥。
それらの経緯を踏まえて、今回のような「23.976と24.0の二枚舌」のスクリプトを作らなければなりません。仕方ない事とは言え‥‥ねえ。
96fpsも「どうせ」96.0fpsにはならんのでしょうね。
アソシエーションの偉いさんたち、どこかで一回、リセットしてくれませんかネ。‥‥ハードの互換性とか言ってたら、この先何百年もずっと呪いから逃れられないよ。アレな廃棄物と同じで「解決は未来の人間に任せばよい」ってか。
その場しのぎの結果オーライ。面倒な運用を延々と引きずる。‥‥プロの現場が理路整然としているのでは決して無い‥‥事の証ですネ。