ほしぞloveログ

天体観測始めました。

タグ:ffmpeg

2024年10月20日に撮影した3種のセットアップですが、



なかなか画像処理を進める時間がとれていません。彗星は時事ネタなので、本当はもっと早く仕上げたいのですが、まだ時間がかかりそうです。とりあえず処理が終わったものからブログ記事にしていくことにします。

今回、まずはタイムラプス映像を処理しました。


機材など

機材はシグマの50mmのレンズをF2.8で使いました。ISOは1600で固定、露光時間は最初1/4000秒、F11から始めて暗くなるごとにまずはF値を小さくしてF2.8まで行きます。今回使った画像はF3.5から2.8に至るまででした。F2.8になったところで、あとは露光時間を暗くなるごとに伸ばして、最後は2秒まで行って、この頃になると彗星もきちんと写っているので、あとは放置で撮影を続けました。連続撮影にはMagic Lanternを使っているので、PCなどは使っていません。画像はRAWのcr2フォーマットでSDカードに保存されます。保存された画像は492枚ありました。

画像処理は、今回は基本的にPixInsight (PI)を使いました。最後の動画を作るところでffmpegをPI内から呼び出して利用しています。


PIでの動画作成

実際に使った画像は452枚。RAW画像なので、PixInsightで開くとBayer配列でモノクロに見えます。まずは、PixInsightでまとめてDebayerをかけます。パラメータはデフォルトです。

次にBlinkで動画にします。Blinkでそれらのファイルを開きます。
blink0

Blinkを使って全ファイルにオートストレッチをかけます。オートストレッチは2種類あって、
  1. 真ん中の列の、一番上のボタンが個々の画像にあわせたオートストレッチパラメーターをするもので、画像ごとにそれぞれにパラメータが違うので時間がかかります。
  2. 真ん中の列の、上から2つ目のボタンが、ある画像でオートストレッチをして、そのパラメータを全画像に適用するもので、同じパラメータなので早く処理できます。
1の場合、明るさが揃うので一見綺麗に見えますが、夕方から夜にかけての明るさの「変化」は失われてしまいます。2の場合、空の明るさの変化を追うことができますが、今回の場合途中で露光時間を変えたりして、手作業でカメラで明るさ調整をしているので、その調整がうまく行っていないところが不自然な明るさ変化になってしまいます。両方見比べましたが、今回は明るさの変化を残したくなり、2を採用しました。2の場合ですが、ある程度暗くなったところを基準にオートストレッチパラメータを決めたので、最初の方の画像が明るすぎることがありますが、まあこれは仕方ないでしょう。

Blinkのオートストレッチボタンの列の、上から3つ目は、色バランスをリンクさせる(撮影時そのまま)か、リンク解除(ホワイトになるように整える)かが選べます。今回はリンクを外しましたが、後でここからさらに全画像にHistgramTransformをかけたので、どちらでも良かったかもしれません。

とりあえずこの時点で、右下の一番右端の撮影開始マークアイコンを押して、一旦動画にまでしてみました。この時点でもしffmpegがない場合は、別途インストールしてください。ffmpegがインストールされていても、実行ファイルをフルパスで入れないとうまく動画にできません。Macだと/usr/local/bin/ffmpegとかいうことです。

blink

ファイルサイズを大きくしないように、デフォルトのpngではなくjpgをはき出したいので、一番下のファイル形式を.jpgに変更します。ffmpegのオプションは秒20コマのmp4ファイルにしたかったので、

-y -r 20 -i Blink%05d.jpg Blink.mp4

としました。

出来上がった動画を見てみると、炙り出しがまだ不足気味なのと、背景がグレーになってしまいあまり面白くなかったので、もう少しそれぞれの画像段階での処理を進めます。


PIでの他数枚の画像ファイルの処理

多数の枚数の画像処理は、PixInsightの
  • ImageContainer
  • ProcessContainer
が便利です。

  1. まずはImageContainerを開きます。そもそもImageContainerがどこにあるのか見つからないかもしれませんが、PIのメニューのProcessの一番下のところにポツンとあります。Process内に並ぶたくさんのグループの中には無いので注意です。
  2. 先ほどBlinkでストレッチまで済ませた多数のjpgファイルを、ImageContainerに登録します。
  3. さらに出力フォルダを設定します。その際、Outputl templatで出力ファイルのファイル名の指定を「&file name;&extension;」とします。そうするとファイル名がそのまま保持されるので、ffmpegで再度動画にするときに、そのまま同じコマンドが使えます。
  4. 次に、ImageContainerのインスタンスを作ります。左下の三角マークをマウスでクリックして、そのままマウそのボタンを離さずに、PI内の背景画面にドロップ (マウスを移動してマウスのボタンを離す) してください。

次はProcessContainerです。
  1. まずは、Blinkが出力したjpg画像のうち、適当な1枚をPixInsightで開きます。
  2. 今回はScreenTranserFunction(STF)を使いました。STFを立ち上げ、開いた画像を自分の好みの明るさとカラーバランスにします。
  3. 次にHistgramTransformation(HT)を開き、STFのインスタンス(左下の三角マーク)を、HTの下のバーに放り込みます。このように、バーに放り込むというのは、PixInsight独特の操作方法ですね。
  4. ProcessContainer(PC)を開き、今度は開いたPCの画面内に、先ほどのHTのインスタンスを投げ込みます。
  5. 最後に、ProcessContainerのインスタンスを、先ほど作ったImageContainerのインスタンスに投げ込みます。
PC

すると順次各ファイルの処理が進みます。

実はHTだけならProcessContainerは必要なく、直接ImageContainerにHTのインスタンスを投げ込むだけでできるのですが、Script処理などのさらに複雑な処理を多数枚の画像に適用しようとするとProcessContainerが必要になります。なので今回は略さずに説明しましたが、面倒な場合はProcessContainerをスキップしても構いません。

実際の画像処理にはもっと凝ったことをやってもいいかもしれませんが、タイムラプス動画なのでこれくらいに抑えておこうかと思います。もう少しやるとしたらですが、見る限りノイズが結構多いので、もう少し1コマあたりの露光時間を伸ばしてもいいかもしれません。ただ、単に露光時間を伸ばすだけだと星が流れるので(まあ動画なので多少流れてもいいのかもしれません)、1コマの時間にあたる20秒内でもっと枚数をかせいで、1コマごとに10枚くらいをスタックするとかでもいいのかもしれません。もしくは、20秒の前後の画像を何枚か合わせてスタックして一コマを作り、その前後のファイルを少しづつずらしつつ重ねてノイズを減らすとかも面白いかもしれません。ただし、これ以上撮影枚数を増やすとなると、メカニカルシャッターの回数制限のこともあるので、デジタル一眼レフカメラよりは、フルサイズのカラーCMOSカメラが欲しくなってきます。


タイムラプス映像

出来上がった動画を見てOKそうなら、最後に画像サイズを変更します。Macだとターミナルを開いて、出来上がった動画ファイルがあるフォルダに移動して、

ffmpeg -y -r 20 -i Blink%05d.jpg -vf scale=1920:-1 -b:v 20000k Blink.mp4

などとします。Blinkでこのコマンドを直接指定してやってもいいかもしれませんが、jpgファイルをまた出力することになるので時間がかかってしまいます。一旦jpgファイルが出力されて、もうjpgファイルレベルでの変更はないと思ったら、ffmpegを単独で走らせた方がいいでしょう。

もしjpg画像の最初の方を使いたくなくて、たとえばBlink00100.jpg以降のファイルのみ使いたい場合は

ffmpeg -y -r 20 -start_number 100 -i Blink%05d.jpg -vf scale=1920:-1 -b:v 20000k Blink.mp4

などとします。

今回は横幅を1920のHDMIサイズとし、ビットレートを20Mbpsとしています。最初453枚で作りましたが、上のコマンドで示したように初めの99枚を除いて処理したので、合計354枚の画像を使い、47.1MBの動画ファイルとなりました。できたmp4ファイルをYoutubeにアップロードしたものです。


最後に雲が流れる時くらいに、左側に少し天の川が入ってきています。

もし出来上がった画像のファイルサイズが大きいなどの場合や、フォーマットを変えたい場合は、Handbreakが便利です。でもこちらも時間がかかるので、ビットレートを変えたいだけとかならffmpegを再度走らせた方が速いかもしれません。


まとめ

久しぶりの動画なので、メモがわりに作成方法を少し詳しく書いておきました。

まだ画像処理がたくさん残っています。次は何から手をつけようか?早めにやらないと時期も去ってしまいますが、焦っても仕方ないので、落ち着いて順次進めるようにします。


縞ノイズを時間的に見てみる

もしかしたら興味がある人もいるかと思い、縞ノイズを時間的に可視化してみました。先のバラ星雲の1日目のディザーなしで撮影した失敗画像約2時間ぶんの24枚を使っています。中心あたりの一部を拡大して見ています。といってもやったことは簡単で、ディザーなしで撮影した画像を、PixInsightで動画にしただけです。

Blink

これはガイドをしていても、たわみなどでガイド鏡と撮影鏡筒の相対的な視野が一方向にずれてしまうために起きます。それでももしノイズが完全にランダムなら、このように流れるようには見えないはずです。ノイズが流れて見えるということは、ノイズに時間的なコヒーレンスがあるということです。うーん、結構ありますね。あれだけの縞ノイズになるのもわかる気がします。

integration_DBE_PCC_AS_cut



縞ノイズ動画の作り方

さて、この動画の作り方です。今回縞ノイズを時間的にみる目的でしたが、このやり方覚えておくと色々応用が効きそうです。基本的に、PixInsightを使います。
  1. 普通にBatchPreprocessing 処理などで進めます。
  2. master以下のregsteredフォルダに入っている、位置合わせまで終わって、Integrationする寸前のファイルを使います。ここまでは普通にDebayerしてStarAlignmentでも構いません。
  3. Blinkでそれらのファイルを開きます。
  4. とりあえずは、デフォルト機能の再生ボタン(右三角)を押すと確認できますが、順に動画のようになるように見せるだけです。オートストレッチもできるのでみやすくなります。カラーバランスが悪い場合は、RGBのリンクをオン/オフする「鎖マーク」のアイコンを押してください。
  5. Previewで一部を切り取るとその部分だけ拡大して見えます。
  6. それをBlink画面の右下の一番右端の撮影開始マークアイコンで動画にします。
  7. ffmpegがない場合は別途インストールしてください。
  8. ffmpegがインストールされていても、実行ファイルをフルパスで入れないとダメでした。/usr/local/bin/ffmpegとかいうことです。
  9. オプションは秒20コマのgifファイルにしたかったので、 -y -r 20 -i Blink%05d.png Blink.gifとしました。
このように結構簡単に動画を作ることができます。


M42の場合

もう一つ例です。TSA-120でM42を撮影した時のものです。約30分くらいの撮影時間で、枚数は14枚です。これはディザーもそうですが、ガイドさえもしてないので赤道儀の極軸の精度が悪くてずれていってしまっているものです。上のバラ星雲のように画像の一部ではなくて、ほぼ全体像を示しています。解像度はこのブログにアップできるように(一画像当たり5MBが制限)落としてあります。

Blink

縞ノイズの原因となるクールノイズなどに混ざって、おそらくバイアスノイズに相当する縦線のように見えるノイズも流れていることがわかります。基本的にランダムでないノイズは、全て縞ノイズになり得るだろうことがわかります。

これを普通にスタックすると下のように縞ノイズが盛大に出てくるわけです。

integration



バラ星雲のもそうですが、時間的にこれだけ明らかに変化しているのがわかるのなら、なんとか分離してペラっと一枚皮を剥ぐようにこのノイズだけ取れないですかね?

このページのトップヘ