Ubuntu Weekly Recipe

第343回 Ubuntuで天体写真を加工しよう

この記事を読むのに必要な時間:およそ 4 分

秋になり,夜空を撮影するのにも良い季節になってきましたね。今週のレシピでは,デジタルカメラでインターバル撮影した写真を加工して,タイムラプス動画やスタートレイル画像を作成する方法を紹介します。なお天体写真とタイトルにつけていますが,星空に限らず,雲,日没や日の出,街の人や車の流れ,船の往来,昆虫の羽化など,時間の経過とともに変化する,あらゆる写真に応用できます。

風の強い日に広角レンズで空を撮るだけでも面白い

インターバル撮影で素材を用意

まずは素材となる写真を用意しなくては話が始まりません。カメラを三脚などで固定し,インターバルタイマーを使って一定時間ごとにシャッターを切り続けましょう。インターバルタイマーとはその名の通り,設定した間隔ごとに,自動的にシャッターを切り続けることができる機能です。筆者はPENTAXのK-3という一眼レフカメラを使用していますが,このモデルは撮影間隔2秒間~24時間,繰り返し撮影回数2~2,000回の間で自由にタイマーを設定することができます。今回のサンプルは,すべてこのK-3で撮影しました。

本体内にインターバルタイマーを内蔵していない機種の場合,インターバルタイマー付きの外付けリモコンを使うという手もあります。リモコンが使えないコンパクトデジタルカメラなどの場合は,少々大変ですが,人力で一定時間ごとにシャッターボタンを押してください注1)⁠

注1)
これを専門家の間では「インターバルタイマーの人」と言います。

写真からタイムラプス動画を作成する

写真が撮影できたら,それをもとにタイムラプス動画を作成してみましょう。タイムラプス(微速度撮影)動画とは,一定の間隔を空けて撮影した写真をつなぎ合わせて作成された動画です。少ないコマをつなげるため,時間を圧縮して,長時間の動きを短時間で見せることができるのが特徴です。

動画の作成にはavconvコマンドを利用します注2)⁠avconvコマンドはlibav-toolsパッケージに含まれています。もしもインストールされていない場合,このパッケージをインストールしてください。

avconvはその名の通りオーディオ/ビデオのコンバーターですが,連続したファイル名を持つ複数の画像を動画ファイルに変換する機能があります。一般的にデジタルカメラで撮影した写真は「DSCxxxxx.JPG」のようなファイル名になっており,⁠xxxxx」の部分にはそのカメラのショット数が入ることが多いでしょう。しかしavconvの仕様として,最初のフレームとなるファイルは0から4の間の番号ではじまり,続くフレームはすべて連番である必要があります。このため,変換に先立ってファイル名のリネームを行っておきましょう。ここではフォルダー内のファイルすべてを,0からはじまる4桁の連番にリネームしました。

libav-toolsのインストール

$ sudo apt-get install libav-tools

フォルダ内のJPGファイルを連番にリネーム

i=0
for n in *.JPG
do
  mv $n $(printf %04d $i).jpg
  i=$(expr $i + 1)
done

avconvコマンドの使用例は次の通りです。⁠-r」オプションでフレームレート注3)⁠⁠-i」オプションでソースとなるファイル,⁠-b」オプションでビットレート,引数に出力先のファイル名を指定します。コンテナフォーマットはファイル名の拡張子から自動的に判断されます。

ソースとなるファイル名には「%d」「%0Nd」といった指定ができ,これで前述の連番ファイルを指定することができます。printfのフォーマットと同様に,⁠N」には0でパディングされている桁数を整数で指定します。

今回はソースとなる写真が99枚ありましたので,入力,出力ともにフレームレートは割り切れる値である9を指定しました。99枚の写真を9フレーム/秒として入力し,9フレーム/秒として出力するため,出力される動画は11秒になります。当然ですがフレームレートを大きくしたほうがなめらかな動画が得られます。

また入力と出力のフレームレートに異なる数値を指定した場合,入力フレームが過剰な場合は間引きされ,逆にフレームが不足する場合は自動的に入力フレームを重複させ,指定されたフレームレートに落とし込もうとします注4)⁠

連番のjpgファイルからogvの動画ファイルを作成

$ avconv -r 9 -i "%04d.jpg" -r 9 -b 15000k ../sky.ogv

自宅の屋上から15秒置きに撮影した空の写真99枚を,9フレーム/(99枚/9フレーム=11秒)の動画にしてみた例)

注2)
タイムラプス動作とavconvについては,本連載304回でも紹介していますので,参考にしてください。
注3)
-rオプションが2つありますが,1番目が入力,2番目が出力のフレームレートになります。
注4)
たとえば入力のフレームレートは9のまま,出力のフレームレートに10を指定したとします。1秒あたりの入力ソースとなる写真は9枚しかないため,10フレームを書き出そうとすると,1フレームが不足してしまいます。この場合avconvは,直前の1フレームを重複させて書き込むため,1秒ごとに1フレームぶん停止しているように見える動画が出来上がります。

著者プロフィール

水野源(みずのはじめ)

Ubuntu Japanese Teamメンバー。理想のフリーデスクトップ環境を求めて東へ西へ……のはずが,気がついたら北の大地で就職していたインフラ寄りのエンジニア。株式会社インフィニットループ所属。

コメント

コメントの記入