DJI OSMO ACTION シリーズの HDR って BT.709 なの?

まずは、HDR の規格を確認。


👉 よくわかる、HDR徹底解説! ガンマカーブの違い | EIZO株式会社 hatena-bookmark

10bit なんだけども、どうやっても BT.709 しか撮れない!

以下、HDR モードで撮影した動画の mediainfo


Video
ID                                       : 1
Format                                   : HEVC
Format/Info                              : High Efficiency Video Coding
Format profile                           : Main 10@L5@High
Codec ID                                 : hvc1
Codec ID/Info                            : High Efficiency Video Coding
Duration                                 : 25 s 192 ms
Bit rate                                 : 55.0 Mb/s
Width                                    : 3 840 pixels
Height                                   : 2 160 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 29.970 (30000/1001) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 10 bits
Bits/(Pixel*Frame)                       : 0.221
Stream size                              : 165 MiB (95%)
Encoded date                             : 2024-08-23 08:24:56 UTC
Tagged date                              : 2024-08-23 08:24:56 UTC
Color range                              : Limited
Color primaries                          : BT.709
Transfer characteristics                 : BT.709
Matrix coefficients                      : BT.709
Codec configuration box                  : hvcC

まさか「HDR」というより「HDR モード」(のようなもの) では。。。。

You do not have HDR....is a pure commercial gimmick from producers, saying that they use a double exposure to gain more data...is not.
In fact, even that BT709 is cut, as is not Full but Limited RGB.
The 10bit is only for color, is not HLG or LOG true, but also a mambo-jumbo, as DR is not bigger but contrast is lowered, compressing the shadows and highlights (upper shadows, lower highs).
So...OA4 is not HDR, is not LOG, is not HLG. Is just BT709 with a possibility to get 10bit color profile and that is it.

Still, the good part (always is one, not only negative parts) is that this "LOG" (more like Neutral) profile will allow you to post edit better for scenes that have big contrast, like night footage with a lot of lights.

At this point you do not have a true HDR or LOG action camera on the market, GoPro is worst in dark and Insta ACE being 8bit.

Cheers.

HDR がないのは、プロデューサーが二重露光を使ってより多くのデータを得ると言っているだけの、純粋な商業的な仕掛けです...
実際は違います。BT709 もカットされており、Full ではなく Limited RGB です。10
ビットはカラー専用で、HLG や LOG ではありませんが、DR は大きくならずコントラストが下がり、シャドウとハイライト (上部シャドウ、下部高) が圧縮されるため、非常に複雑です。
つまり、OA4 は HDR でも LOG でも HLG でもありません。10 ビット カラー プロファイルを取得できる可能性のある BT709 であり、それだけです。

それでも、良い点 (常に 1 つあり、悪い点だけではありません) は、この "LOG" (ニュートラルに近い) プロファイルを使用すると、多くのライトがある夜の映像など、コントラストの大きいシーンを後から編集できる点です。

現時点では、市場には真の HDR または LOG アクション カメラはありません。GoPro は暗闇では最悪で、Insta ACE は 8 ビットです。

乾杯。

👉 10bit recording but not recorded in HDR? | DJI FORUM hatena-bookmark

Thank you for your feedback. The Osmo Action 3 does not use common standards such as HLG and HDR10, so some mobile devices and computer software do not recognize footage shot by the product as HDR footage. The product adopts HDR technology for camera sensors which supports shooting with a high dynamic range and 10-bit color depth, and can effectively restore highlight and shadow details. We appreciate your understanding.

ご意見ありがとうございます。Osmo Action 3はHLGやHDR10などの一般的な規格を使用していないため、一部のモバイルデバイスやコンピューターソフトウェアでは、製品で撮影した映像がHDR映像として認識されません。この製品は、カメラセンサーにHDRテクノロジーを採用しており、ハイダイナミックレンジと10ビットの色深度での撮影をサポートし、ハイライトとシャドウのディテールを効果的に復元できます。ご理解のほどよろしくお願いいたします。

It’s their own version of a high dynamic range. Not true HDR where you switch the monitor/tv (mine works in HLG and HDR10) to full brightness and contrast in order to take advantage of the extra range. The Action footage looks as though it flattens dynamic footage but that’s not HDR!

これは、ハイダイナミックレンジの独自のバージョンです。モニター/テレビ (私のモニター/テレビは HLG と HDR10 で動作します) を最大輝度とコントラストに設定して、追加のレンジを利用するという、真の HDR ではありません。アクション映像は、ダイナミックな映像を平坦化しているように見えますが、それは HDR ではありません。

👉 Osmo Action 3 HDR problem | DJI FORUM hatena-bookmark

👉 ffprobe vs mediainfo hatena-bookmark


【PowerPoint】スライドの透かしの追加と削除


👉 スライドの背景に "下書き" の透かしを追加する - Microsoft サポート hatena-bookmark


👉 スライドから透明な透かしを削除する - Microsoft サポート hatena-bookmark


【SwiftUI】 今日のなんでやねん - @ViewBuilder


@ViewBuilder

よく見かけますが、なんのために使うのか。

 

■ 公式ドキュメント - ViewBuilder

A custom parameter attribute that constructs views from closures.

クロージャから View を構築するカスタムパラメータ属性。

You typically use ViewBuilder as a parameter attribute for child view-producing closure parameters, allowing those closures to provide multiple child views.

通常、ViewBuilderを子 View 生成クロージャパラメータのパラメータ属性として使用し、それらのクロージャが複数の子 View を提供できるようにします。


func contextMenu<MenuItems: View>(
  @ViewBuilder menuItems: () -> MenuItems
) -> some View

myView.contextMenu {
  Text("Cut")
  Text("Copy")
  Text("Paste")
  if isSymbol {
    Text("Jump to Definition")
  }
}

👉 ViewBuilder | Apple Developer Documentation hatena-bookmark

並列のまま、持ち運びできて、

記述が一層不要になるってことか。

 

■ if も使えるようになる


// NG
var body: some View {
    if imageName.isEmpty {
        return Text("no image")
    } else {
        return Text(imageName)
    }
}

@ViewBuilder
var body: some View {
    if imageName.isEmpty {
        Text("no image")
    } else {
        Image(imageName)
    }
}

var body: some View {
    Group {
        if imageName.isEmpty {
            Text("no image")
        } else {
            Image(imageName)
        }
    }
}

👉 SwiftUIのViewで条件によってViewを出し分ける方法 - The Pragmatic Ball boy hatena-bookmark

そういえば、

公式ドキュメントのサンプルコードにも、

しれっと if が入っていた。

なるほど、

Group / VStack / HStack がなければ使えなかった if を使えるようにしてくれるのか。

便利そう !

 

■ やってみた

こういうのがあったとして、


VStack {
  Text("top")
  Text("bottom")
}
.font(.title)
.foregroundColor(.red)

こう書ける。


TitleTextFormatView1 {
  Text("top")
  Text("bottom")
}

struct TitleTextFormatView1<Content: View>: View {
  @ViewBuilder var content: Content

  var body: some View {
    content
      .font(.title)
      .foregroundColor(.red)
  }
}

続いて、@ViewBuilder を消してみます。


TitleTextFormatView2 {
  Text("top")
  Text("bottom")
}

struct TitleTextFormatView2<Content: View>: View {

  // Type '() -> ()' cannot conform to 'View'

  var content: Content // *

  var body: some View {
    content
      .font(.title)
      .foregroundColor(.red)
  }
}

しかし、これは NG ですね、分かります。

勉強しましたから !

続きましては、

渡す View を VStack を使って、1つにまとめます。

他は変更ありません。

結果は、OK なはずです。


TitleTextFormatView3 {
  VStack { // *
    Text("top")
    Text("bottom")
  }
}

struct TitleTextFormatView3<Content: View>: View {
  var content: Content

  var body: some View {
    content
      .font(.title)
      .foregroundColor(.red)
  }
}

...

なんでや !?

 

■ まとめ

私はこれまで、

まず VStack や HStack を常に書いていたので

@ViewBuilder の必要性を感じなかった

ことが分かりました。

しかし、今回の結果は残念です。

謎です。

以下の基本的なキーワード、


「TupleView」
「Content」
「some View」
「any View」
「View | Stack | Layout」

分かりづらくないですか。

直感的にふんわりしてません ?

長い説明が必要ですよね ?

あなたの感想ですよね ?