ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
ビデオフォーマットを使ったハイクオリティな写真の撮影
AVCapture APIを使用すれば、iPhoneの強力なカメラシステムをAppで最大限に活用できます。写真のクオリティと配信速度のトレードオフのバランスを取りながら、ユースケースに最適な写真やビデオのフォーマットを選択する方法について確認します。また、Appでビデオフォーマットを使用する際に、写真のクオリティを大幅に向上させることができる強力な新しいアルゴリズムについても確認します。 AVCaptureの改良点については、「カメラキャプチャの新機能」のビデオも是非ご確認ください。
リソース
関連ビデオ
WWDC22
WWDC21
WWDC16
-
ダウンロード
♪ ♪ こんにちは 私はロイ カメラソフトウェアチームの エンジニアです 今日は 人気の動画フォーマットとともに 加えた写真の画質改善における エキサイティングな成果に加え それを活用し ユーザー体験を 向上させる方法を ご紹介します iPhoneはカメラとしても 世界一の利用者数を誇り App開発者も 優秀なカメラを採用し プロ仕様の撮影App ストリーミングなど 型にはまらない一流の経験を 提供してきました 状況によって 必要な画質も 変わってくるもので 静止画専門のAppなら 可能な限り高い画質を カメラに必要としますが ソーシャルAppの場合は フェイスエフェクトを ストリーミング中に 加えることもあり カスタムレンダリングでは 演算コストがかさむ場合があり FPSの維持のため フレームごとに処理する画素が少ない 低画質フレームを 使用する場合もあります 用途は他にも多くあり それに対応して 画質 パフォーマンスを 調整する作業に 簡便性が求められます 画質について 深入りする前に iOSでの 写真撮影について さっと復習しましょう AVCaptureSession オブジェクト 周囲に オブジェクトグラフを据え 静止画を撮りたいので カメラが AVCaptureDeviceとなります AVCaptureDeviceInputが デバイスを基に インスタンス化され セッションに 入力データを提供します 次にグラフに追加されるのが AVCapturePhotoOutputで これが写真を受け取ります
最後に AVCaptureConnectionで この全要素を 繋げ合わせます セッション開始後は AVCapturePhotoOutputにて capturePhotoを 呼び出し写真を取り込みます AVCapturePhotoOutputを使い さらなるカスタムも可能で capturePhotoメソッドに パスされ 取込んだ写真は AVCapturePhoto オブジェクトとして 表現され デリゲートメソッドで 受け取ります 2016年の 「Advances in iOS Photography」で このAPIについて 非常に詳しく述べているので もしまだの場合は 是非ご覧ください iOSの写真撮影について 復習したら 高画質撮影の本題に 本腰を入れます 歴史的には最高画質の写真を 求めるには AVCapturePhotoSettingsの isAutoStillImage StabilizationEnabled プロパティをtrueと していたかと思います 画像安定化が 高画質撮影の要だったため このような手順を 使っていました しかし 我々は年々 画質改善の アルゴリズムの 進化を進めてきたため 画像安定化だけでなく 多画像融合技術や Smart HDR Deep Fushionなど リッチなテクニックを 備えています 高画質の代名詞が isAutoStabilizationEnabled その時代は 終焉を迎えました iOS 13で 解決策として導入したのが AVCapturePhotoOutput .QualityPrioritizationで AVCapturePhotoOutputに 写真キャプチャの 画質優先度を伝達します 以前のWWDCでは この重要なAPIを 取り扱うことが できていないので 仕組みを 見ていきましょう 画質優先度には 三段階あり それは スピード バランス クオリティ スピードを選択した場合は 画質を犠牲にしてでも キャプチャの速度を 優先するよう フレームワークに伝達 画質とスピードが 相応必要な場合は バランスを 選択します クオリティはスピードの逆で 画質が一番大切 キャプチャー過程で 多少の遅延が 生じても構わない その際の 設定です ただ 画質優先度は AVCapturePhotoOutput にとってヒントにすぎず アルゴリズムの 指定は行いません AVCapturePhotoOutputは 様々な要件を考慮し 各状況下で最適の アルゴリズムを指定します 例えば 光の少ない環境と 多い環境では 設定が変わるでしょう ただ キャプチャ所要時間から ユーザー体験を 調整する こうした願望は 受け止めています
なので いくつかの AVCapturePhotoOutputDelegate メソッドに渡される AVCaptureResolvedPhotoSettings オブジェクトに photoProcessingTimeRange と呼ばれるプロパティを与え デリゲートへの写真の 配信にどれぐらいかかるかを示します キャプチャに時間がかかると 示されたら スピナーを出す策などができます コードを 確認しましょう AVCapturePhotoOutputを 設定する際 キャプチャセッションで 求められる 最大の画質優先度を 決められます 未設定の場合は バランスとなります 設定は一度限りでOKで これが大事なのは 設定により キャプチャパイプラインの 様式が変わってくるためです 例えば スピード設定の場合は バランス設定の場合より メモリ・電力消費を 抑えた キャプチャパイプラインに なります 設定の際はよく お考えの上 必要に応じて行ってください capturePhotoメソッドを 呼び出す前に AVCatpruePhotoSettings オブジェクトの photoQualityPrioritization プロパティを設定し キャプチャの画質優先度を 指定できます デフォルトは バランスです 見てお分かりの通り 状況に応じて レベルは異なります
キャプチャごとの 画質優先度は AVCapturePhotoOutputの 最大画質優先度以上にはなれず 超えたら 例外が発生します 三段階設定の 具体的な内容は アルゴリズムによって 決定され フォーマットにより マッピングも異なりますが この写真 動画間の 違いについては もう少しで説明します 写真の場合 スピード設定は WYSIWYG つまり出力が 画面通りで 低加工 ノイズ除去も限られた 写真となります バランスの場合 システムは WYSISYGより 高い画質を 多少 遅いキャプチャレートで提供する ファストフュージョン アルゴリズムを選択します クオリティは デバイス 照度により Deep Fusionなど 重加工を使用し 最高画質の 写真を提供します なので 写真は映えますが 代償は必ずあり 時間を以って 払います 反面 動画のフォーマットは 写真を早く届けるため 全段階において 低加工となります 写真や動画の フォーマットが 主題なので 双方間の違いに 着目していきましょう 写真フォーマットを 使用することは 写真に適した 設定を優先することで 写真に AVCaptureVideoDataOutputを 利用している場合 サンプルバッファは プレビュー解像度のものと なりますが それは 写真を優先しているため 動画撮影でなく プレビューに フレームを使うと 予測するからです 写真フォーマットを 選択するのは Live PhotoやProRAWなど 写真ベースの機能が 写真フォーマット限定だからで それらを使いたい場合 写真フォーマットが 正しいでしょう 写真フォーマットは 最高画質が可能ですが フレーム速度は 30毎秒止まりです
写真フォーマットの選択は セッションプリセットをphoto または isHighestPhotoQualitySupported がtrueのものを選びます 動画フォーマットの場合は 動画を中心とした機能と 連動します 録画・ストリーミングに 適した解像度が 可能になり 60fpsなど 高いフレームレートが可能です 写真フォーマットで ないものは 動画フォーマットとなるので セッションプリセットで 写真以外を選択するか isHightestPhotoQualitySupported がfalseのものを選択します なぜ動画フォーマットには パワフルなアルゴリズムを 使用しないのか それは怠慢ではなく 理由があり 行っています Appにはカスタムの 重加工を行うために 動画形式を 選ぶものがあります 実際動画フォーマットは 負荷が少なく そのようなAppに 最適です しかし前述の 解像度向上の テクニックを使うと ユーザー体験が 劣化する可能性があります 例えば AR Appで 周囲の環境の 3D写真を撮る場合 既成のフュージョンアルゴリズムでは Appのカメラ機能の FPSが降下し 機能に障害が及ぶ 可能性もあります なので我々は 画質・パフォーマンスの 繊細なバランスに注意し 困難な条件下でも 動画が反応するよう 注意を払ってきました しかしiOS15で この難題は解決されました 一番人気の 動画フォーマットで 大きな進歩を遂げたのです 改良アルゴリズムにより Appの機能を保ちながら 画質の向上が 可能になります この新機能により 最高の映像を提供しつつ 高難度のカスタム演算を 提供することが 可能になったのです
どれくらい 画質が向上するのでしょうか ビフォー アフターを見ると
大幅な進歩だと 感じられるでしょう 右の男の子の顔では ノイズが減少し 自然な見た目になりました 髪の毛に反射する 光もよく見えます
目に映る キャッチライトも いきいきとしています
外で 光が少ない場合も 顔 衣服のノイズが うまく除去されていて 背景も見栄えが よくなっています いすの皮の触感が 伝わってきますね
興味をお持ちいただけたら アルゴリズムマッピングを 見ていきましょう
スピードモードの場合は 依然 WYSIWYGです 今でも最速の 取り込み法なので スピードを重視する場合に 最適です なのでここは 無変更です 録画の際の FPSの急減や プレビューフィードの障害は ありません でも バランスは 以前と大違い 画質が大幅に向上した一方 処理時間は 少し上がるだけ
スピードモードと同様 FPSの減少もありません 美しい写真の撮影 処理中も 処理フィードに障害が 及ぶことはありません 最後にクオリティ コストの高いアルゴリズムを使い 前以上の画質を実現しました ただ 機種により FPSの減少 フィードの障害を 来たす場合も 全てのiPhoneで 使用可となり XS以後の機種は サポートします 動画フォーマットの改良は 一番人気の高いものに施し 1280x720の 30及び60 fps
1920x1080も然り
1920x1440は30 fpsのみ 30 fpsなら 4Kまでサポートします
コードに合うフォーマットを 使っているかの 確認は? これも簡便になりました iOS 15では 新プロパティを導入 画面に映っています これは AVCaptureDevice.Format のタイプで 新仕様を備えている場合は プロパティがtrueとなります このプロパティがtrueの場合は 絶対に動画フォーマットで フォーマットを 誤る心配はありません
この種のフォーマットが 必要な場合は AVCaptureDeviceの インスタンスで表示し 紫のプロパティが trueとなっているのを 選択します サンプルコードのAVCamでも 使用可能としたので 実例を見たい方は 是非お使いください 新プロパティの冒頭の Highは Highestで始まる 既成プロパティと 混同しやすいですが Highestはフォーマットが 写真形式をサポートするか Highは動画フォーマットが 新仕様をサポートするかです では この新仕様を 使うのに 労力は必要でしょうか 実は 場合によります AVCapturePhotoOutputや .balancedを 使用中なら iOS15インストール後は すぐ良質な写真を 撮れるように!
スピードモードを 利用中の場合は バランス設定に 替えることで FPSの減少もなく 高画質撮影が 可能になります
非推奨の AVCapture StillImageOutputを まだ使っている方は 切り替えの好機です クオリティモードは依然 FPS減少を 来す可能性があり デベロッパの 承認なしでの 適用はありません なので リンク時チェックを加え あなたのAppが クオリティ設定で iOS 15以前の 動画フォーマットの場合 アップデート時 バランス設定に変更します 最高の画質が 必要な場合はすこし iOS 15 SDKでAppを 再コンパイルしましょう 注意点がいくつかあります
現在新仕様は AVCaptureSessionのみで MultiCamSessionは 未対応です
非推奨のStillImageOutputも サポートをしていません また.balanced または.quality設定の場合 使用するアルゴリズムが ダイナミックレンジ向上のため 露出の異なる画像を融合し 解像度は劇的に向上するが 収録中の動画とは 雰囲気が異なる 場合があります 動画と写真の 一致を求める場合 .speedを お使いください では最後に まとめをしましょう
Appの 機能設計の際は 画質と処理速度の トレードオフに 注意しましょう 適切な解像度を 定めたら それに合った 設定をして 実用化しましょう 驚きの写真や動画を 少しの労力 さらにはアップデートのみで 手に入れましょう ありがとうございます! [リズミカルな音楽]
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。