Open13

WebカメラのJPEG量子化テーブル

ピン留めされたアイテム
こーのいけこーのいけ

このスクラップについて

Webカメラ(に限らないけど)のMJPEGで使われてる量子化テーブルを表示し、参照画像を同じ量子化テーブルでJPEGエンコード→デコードして表示するサイトを作ったので、それを使って手持ちのWebカメラの量子化テーブルを列挙してみる。

サイトの使い方

gstreamerを使って取得。Winの場合の手順:

  1. gst-device-monitor-1.0.exe でdevice-pathを得る。実行すると gst-launch-1.0 mfvideosrc device-path="\\\\\?\\usb\#vid_1bcf\&pid_28c4\&mi_00\#8\&1da11eb4\&0\&0000\#\{e5323777-f976-4f5b-9b55-b94699c46e44\}\\global" ! ... みたいに表示されるとこがソレ。
  2. 上記はgst-launchのコマンドの始めの部分なので、以下を変更して実行する
    1. ! の前に num_buffers=1 を入れる(1枚だけ撮影する)
    2. ! の後に image/jpeg,width=1280,height=720 ! filesink location=output.jpg を入れる
  3. output.jpgにJPEGが保存されているはず(一部ロジクールカメラなどで壊れたファイルになる場合もある)

より詳細な情報の取得

WindowsであればJpegAnalyzer Plusで解析することで詳細な情報が得られる。このスクラップにもスクショを貼っておいた。

画像について

標準画像のBalloonを使った。この子の現在とかわかってるのかな? Lenaみたいなことにならないよね?

こーのいけこーのいけ

Logicool C525n
https://www.amazon.co.jp/gp/product/B07QSTMSLQ

JPEGの中にDHTセグメントが無いやんちゃなカメラUVC1.1のMJPEG Payloadの定義を見たらDHTはoptionalとあり、そのときはこのテーブルを使うよ、とちゃんと書いてあった(とはいえ、その仕様を根拠に外すのは割とやんちゃ)。量子化テーブルの割に画質はイマイチ。多分センサーの性能?

こーのいけこーのいけ

MacBookPro (14inch, 2021) の場合

Device found:

        name  : FaceTime HD Camera
        class : Video/Source
        caps  : video/x-raw(memory:GLMemory), width=1552, height=1552, format=UYVY, framerate=[ 1/1, 30/1 ], texture-target=rectangle
                video/x-raw(memory:GLMemory), width=1328, height=1760, format=UYVY, framerate=[ 1/1, 30/1 ], texture-target=rectangle
                video/x-raw(memory:GLMemory), width=640, height=480, format=UYVY, framerate=[ 1/1, 30/1 ], texture-target=rectangle
                video/x-raw(memory:GLMemory), width=1760, height=1328, format=UYVY, framerate=[ 1/1, 30/1 ], texture-target=rectangle
                video/x-raw(memory:GLMemory), width=1080, height=1920, format=UYVY, framerate=[ 1/1, 30/1 ], texture-target=rectangle
                video/x-raw(memory:GLMemory), width=1280, height=720, format=UYVY, framerate=[ 1/1, 30/1 ], texture-target=rectangle
                video/x-raw(memory:GLMemory), width=1920, height=1080, format=UYVY, framerate=[ 1/1, 30/1 ], texture-target=rectangle
                video/x-raw, width=1552, height=1552, format={ (string)UYVY, (string)YUY2, (string)NV12, (string)BGRA }, framerate=[ 1/1, 30/1 ]
                video/x-raw, width=1328, height=1760, format={ (string)UYVY, (string)YUY2, (string)NV12, (string)BGRA }, framerate=[ 1/1, 30/1 ]
                video/x-raw, width=640, height=480, format={ (string)UYVY, (string)YUY2, (string)NV12, (string)BGRA }, framerate=[ 1/1, 30/1 ]
                video/x-raw, width=1760, height=1328, format={ (string)UYVY, (string)YUY2, (string)NV12, (string)BGRA }, framerate=[ 1/1, 30/1 ]
                video/x-raw, width=1080, height=1920, format={ (string)UYVY, (string)YUY2, (string)NV12, (string)BGRA }, framerate=[ 1/1, 30/1 ]
                video/x-raw, width=1280, height=720, format={ (string)UYVY, (string)YUY2, (string)NV12, (string)BGRA }, framerate=[ 1/1, 30/1 ]
                video/x-raw, width=1920, height=1080, format={ (string)UYVY, (string)YUY2, (string)NV12, (string)BGRA }, framerate=[ 1/1, 30/1 ]

MJPEG圧縮はしない。常にRAW。これは2021のモデルに限らずMBP 2019 Laterでも同じだった記憶。MacBook Airとかになるとどうかは不明。