AVFoundationでカメラ(ムービー)撮影するときの、transform設定の注意点

カメラの方向を自由に扱えるようにするためには、茨の道を乗り越えないといけないのです。
2
Hirohito Kato ⌘ @hkato193

@norio_nomura えーまじですか?!と思ってもう一度標準カメラの方を見てみたら、eeだとMatrix Structure項目が複数あって、そっちは仰るような内容に。ふむう…

2014-12-15 15:34:52
Hirohito Kato ⌘ @hkato193

@norio_nomura あー、コンテナ(?)ではなくトラックとしてのmatrixぽいですねこれ。

2014-12-15 15:36:28
Norio Nomura @norio_nomura

@hkato193 そそ。コンテナのAVAssetのpreferredTransformが-ee無しで表示されていたもので、-eeをつけるとAVAssetTrackのpreferredTransformが追加で表示されるです。

2014-12-15 15:36:57
Hirohito Kato ⌘ @hkato193

@norio_nomura なるほど…。AVCaptureConnectionのvideoOrientationが、AVAssetTrackのオリエンテーションじゃないかと勘づき始めました。

2014-12-15 15:40:26
Norio Nomura @norio_nomura

@hkato193 transformが2つあるということを知るのは重要です。

2014-12-15 15:42:10
Hirohito Kato ⌘ @hkato193

@norio_nomura 標準カメラ(120fps)で撮ったものから、謎の3つ目が出てきましたが、まあそれはともかくとして、トラックごとにtransformは必要ですものね。ありがとうございます。

2014-12-15 15:44:42
Norio Nomura @norio_nomura

@hkato193 まさかの3つめ!あああ、variable speedってビデオトラックを2つ持ってるのかな?

2014-12-15 15:46:49
Hirohito Kato ⌘ @hkato193

@norio_nomura やや、たぶんこれはExifTool側の問題で、オーディオトラックまでmatrixを出そうとしている感じです。トラックはビデオ・音声ともに1つずつです。

2014-12-15 15:50:45
Hirohito Kato ⌘ @hkato193

ExifToolは色々と表示してくれるけれど、情報がどのトラックorコンテナに属しているものかが分かりにくいな… -G とか -g とかで少しはましになるとはいえ。

2014-12-15 16:00:59
Hirohito Kato ⌘ @hkato193

@norio_nomura 全体をHigh fpsで撮影しておいて、「ここからここまでをスローモーションで再生」という範囲を決めるということですか?それとも、撮っている途中でフレームレート自体を変えるとか。

2014-12-15 16:03:05
Hirohito Kato ⌘ @hkato193

@norio_nomura やっぱり、音声フレームのmatrixを表示しようとしているみたいです。-XオプションでXML出力したら、トラック番号と関連付いた情報が得られました。

2014-12-15 16:07:49
Norio Nomura @norio_nomura

@hkato193 compositionでscaleTimeRangeするとFrame rate modeがVariableになり、videoCompositionでframeDurationを指定するとFrame rate modeがConstantになるです。

2014-12-15 16:22:19
Norio Nomura @norio_nomura

@hkato193 nominalFrameRateが同じでも、Variableなものの方がより高いフレームレートでライブラリへ保存可能になるという違いがあります。

2014-12-15 16:26:03
Hirohito Kato ⌘ @hkato193

@norio_nomura 混乱してきたので整理すると、まずAVMutableCompositionのscaleTimeRange→Variableレート、AVMutableVideoCompositionのframeDuration→Constantということですね。

2014-12-15 16:35:32
Hirohito Kato ⌘ @hkato193

@norio_nomura (よかったw。)で、マニュアルから想像すると、メタデータをいじるのがscaleTimeRangeで、frameDurationはレンダリングの設定のように見えますね。videoCompositionをあえて使う理由って何かあるですか?

2014-12-15 16:38:37
Norio Nomura @norio_nomura

@hkato193 scaleで長さを1/10にすると600fpsの動画になります!

2014-12-15 16:39:19
Hirohito Kato ⌘ @hkato193

@norio_nomura さっきの私の予想が正しいと、そうなりますですね。そうなると疑問なんですが、のむらさんがvideoCompositionにこだわった理由はなんでしょう。scaleTimeRangeでカバーできない理由があったりしたのですか?

2014-12-15 16:42:41
Norio Nomura @norio_nomura

@hkato193 600fpsの動画を正常に使えるシステムばかりではないです。フレームレートを落とさないといけません。落とすにしてもVariableにして、できるだけnominalFrameRateを高く保てないかな?と。

2014-12-15 16:45:07
Norio Nomura @norio_nomura

@hkato193 とりあえずVariableの事はいいです。忘れてください。ありがとうございます。

2014-12-15 16:51:35
Norio Nomura @norio_nomura

@hkato193 あ、ExifToolでFrame rate modeがVariableかどうかを表示する方法を探しましたが、見つけられませんでした。一応。

2014-12-15 16:53:20
Hirohito Kato ⌘ @hkato193

@norio_nomura うーん、すみません。とりあえず思いついたのは、frameDurationを再生可能な上限でレンダリングした中間ファイルを作って、そこからさらにscaleTimeRangeした最終ファイルを作るくらいでした。。。

2014-12-15 16:56:09
Norio Nomura @norio_nomura

@hkato193 おお、固定になったやつをscaleTimeRangeしたらVariableになった!これは!!

2014-12-15 17:02:19
Hirohito Kato ⌘ @hkato193

@norio_nomura おおっ(なかば当てずっぽうにエイヤッと振ったら)ヒットでしたか?!

2014-12-15 17:05:18
Norio Nomura @norio_nomura

@hkato193 しかし、めっちゃ面倒くさい!w

2014-12-15 17:06:46