2017年8月5日土曜日

FCPX勉強中 初心者には難しいタイムコードで撮影時刻表示に挑戦


 動画編集は少し前にGoProを購入してから始めた素人です。プロではありませんので、タイムコードについても時分秒+フレームを表すことができる数字列であることくらいしか理解していません。毎秒30フレーム(30fps)の動画であれば、30分の1秒ごとにフレームが切り替わって動く映像になっているということくらいまでは分かります。少し前に、このタイムコードを使用して編集時にストップウォッチ機能を実現する方法をご紹介しましたが、それ以外の活用方法は未だに発見できておりません。


VIRB Editのゲージを合成する際に時刻で同期させたい


 持っている三台のアクションカメラを同時に回して撮影した映像を使い、無謀にもマルチカム編集にチャレンジしたことがあります。1秒もかからずに終わってしまうバイクのクラッチやペダル操作をマルチアングルで見せるために、フレーム単位での位置合わせが必要で、大変苦労しました。プロの世界であれば各カメラのタイムコードを撮影時に専用の機械で同期させ、編集時にはタイムコードでぴったりと合わせられるそうですが、アマチュアには敷居が高すぎます。最近はGPS機器が収集したデータをVIRB Editを使ってアクションカメラの映像にオーバーレイ表示させて楽しんでいます。本来はVIRB Editで直接実写映像にゲージ類をオーバーレイするのですが、画質や編集機能などの点から、VIRB Editではグリーンバックの合成用ゲージ動画を作成し、Final Cut Pro X(FCPX)で最終的に合成と編集を行なっています。

VIRB Editでグリーンバックの合成用ゲージ動画を生成

出来上がったゲージ動画をFCPXに読み込ませて、クロマキー処理をすれば、あっという間に実写映像にゲージがオーバーレイ表示されるのですが、問題はゲージと実写映像の同期です。VIRB Edit単体での作業でも面倒臭さは同じで、曲がり角や信号待ちなどの地点をきっかけにしてコツコツと同期作業を繰り返していました。

FCPXでクロマキー処理をすれば簡単にゲージがオーバーレイできる

生成されたゲージ画像の元データはGPSのものです。GPSの時刻は大変正確なことで知られています。この正確な時刻が使えるのですから、実写映像にも撮影時刻が表示できれば、ゲージと実写映像の同期を取るのはたやすいはずです。家庭用のビデオカメラには撮影日時をオンスクリーン表示するための設定がありました。同じことを動画編集ソフトのFCPXで実現してみました。


「タイムコード」ジェネレータを試してみる


 まず、FCPXでストップウォッチ機能を実現する際に使用した「タイムコード」ジェネレータでできないか試してみました。ジェネレータですから対象となるクリップに接続された別クリップとして配置します。全てのパラメータは初期値のままで、表示されたタイムコードを確認すると、どうも編集プロジェクト内での絶対位置(先頭からの経過時間)を表示しているようです。

「タイムコード」ジェネレータを初期値のまま使用すると....

これでは用をなしませんので、オプションをいじくってみます。Timecode Baseというそれらしいものがあります。先ほどは「プロジェクト」になっていましたので、それを「ソース」に変えてみました。すると今度は、クリップ内の相対時間が表示されました。しかも最初の時間部分が01になっています。仕様なのかバグなのか不明ですが、これも撮影時刻とは何の関係もありませんので、今回の用途には使えません。

Timecode Baseを「ソース」に変更してみたが....

よくよく考えてみれば、時刻表示をさせたい対象クリップとは別に配置されたジェネレータクリップから得られるタイムコードですから、撮影時刻など出てくるわけがありません。しばらくこのことに気づきませんでした。


FCPXリリース10.3で追加になったエフェクトが使えそう


 諦めかけた頃に、最近追加になった新しいエフェクトの中に「Timecode」というものを見つけました。ジェネレータとは違い、エフェクトですから対象クリップに直接作用します。これは期待できそうです。これをGoPro HERO3+で撮影したクリップに適用してみると、結果はビンゴです!

最近追加になった「Timecode」エフェクトを試してみると、ビンゴ!

お昼前に自転車で走っていた場所の映像の上に11時過ぎの文字列が現れました。GPSのデータとも一致します。おまけに、クリップのファイル名まで表示されています。このファイル名が不要な場合は、チェックボタンを外せば消すことができました。この実写映像の撮影時刻と生成されたゲージの時刻を見ながら位置合わせすれば、簡単に同期作業を行えます。


全てのカメラで撮影時刻が表示されるわけではなかった


 喜び勇んで、過去の動画を引っ張り出して試してみました。GoPro Sessionで撮影した動画はHERO3+同様、撮影した時刻がちゃんと現れましたが、PanasonicのHX-A1Hで撮影したものや、CASIOのデジカメ(EXILIM)で撮影した動画からは撮影時刻表示は得られませんでした。さらに、GoProの動画をQuickTimeを使ってカット編集したものも、同様に撮影時刻が無くなっています。これらの動画のタイムコードは開始時点を00:00:00:00としたゼロスタートのタイムコードになっているようです。

QTでカット編集したものやPanasonic/CASIOの動画データからは時刻表示されず

カメラが撮影した動画ファイルの中にあるタイムコードが0からスタートするものと、実時間を記録していくものとがあるようです。これらを切り替える設定があればいいのですが、どの取扱説明書を見てもそんなものはありません。

 非常に長い録画ファイルをそのまま取り扱うのは効率が悪いため、QuickTimeでカット編集を行ってから本編集をしています。取り付けの自由度が高いPanasonicのHX-A1Hは画質はGoProに劣りますが、迫力のあるシーンを狙えるため、今やなくてはならないものになっています。

小型軽量そして円筒形のため取り付け場所のバリエーションが豊富なHX-A1H

ズームを利用した動画撮影のためにデジカメもなくてはならない撮影機材になっています。どの機器もまだまだ使い続けなければなりませんので、どんな場合にでも撮影時刻表示ができないか考えて見ました。

そもそもズームのできないGoProなどのアクションカメラを補完してくれるデジカメ


タイムコードをオフセットして撮影時刻にする


 タイムコード表示をしてくれるジェネレータやエフェクトのパラメータを見ると、Offsetという項目があり、実際のタイムコードを指定した値だけ進めて表示することができます。ここにマイナスの設定はできないようですが、00:00:00:00から始まる動画ではその撮影開始時刻をオフセット値として設定すれば、撮影時刻と同じことになるはずです。

タイムコードのオフセットを利用して実時間にしてしまう

では、撮影を開始した時刻はどこから持ってくるか? 動画ファイルの作成時刻は動画を撮影開始した時刻のようですが、何時何分までしかありません。さらにコピーなどを行うとその時刻に置き換わってしまいます。ファイルのメタ情報ではダメみたいです。思いついたのが、撮影開始時に正確な時刻を写しておくという原始的な方法です。

撮影開始時に正確な時刻を写しておき、それをオフセット値にする

スマホでできるだけ大きな文字のデジタル時計を表示し、それを撮影開始時の最初の画像として保存します。撮影時刻表示をしたい時は、オフセット値としてこの値をセットすれば、実際の撮影時刻とみなすことができます。ちょっと面倒な気もしますが、その後の作業が楽になると信じて習慣にしてしまうしかありません。

 これでどんな機材で撮影した動画でも撮影時刻が表示できるようになりました。最後の二桁は指定によりフレームもしくは100分の1秒を表示していて、ちょっとうるさい感じがします。不要な場合はマスクしてしまえば時分秒のみの一般的な時刻表示にすることができます。日付を入れたい場合は固定の文字列として入れてしまえばいいでしょう。撮影時刻表示をさせるだけでも結構大変だった、奥の深いタイムコードでした。下は当記事を動画にまとめたものですので、参考にしていただければ幸いです。




カメラの内蔵時計の誤差に注意


 早速、撮影開始時にスマホの時計で時刻を写して、その後の使い勝手を検証してみました。最も利用頻度の高いGoPro HERO3+でスマホの時刻を写し、その動画ファイルにFCPXのTimecodeエフェクトを適用して、記録されているタイムコードを表示したものが下の画像です。

結構誤差の大きいカメラの内蔵時計

スマホの時刻はネットで校正されている正確なものだと思います。それに比べるとGoPro内蔵の時計は結構誤差のあることがわかります。Panasonic HX-A1Hなどのタイムコードがゼロスタートの場合には、このスマホの時刻データを撮影開始時刻にしてしまうので問題ありません。GoProのタイムコードをそのまま撮影時刻にする場合は、マメに時刻合わせをしてやる必要がありそうです。

(2017年8月7日追記)


0 件のコメント:

コメントを投稿