画面録画用にOBSの設定をいろいろ考えてみた

画面録画用にOBSの設定をいろいろ考えてみた
夏だね。大学の帰りに切ったシャッター

専業のYouTubeになるつもりなんてないのだが、それでもたまに画面を録画したいときってものがある。

定番だが、OBS Studioを使って録画している。

しかし、映像というものもなかなか進歩が速いうえに、謎の技術の詰め合わせでやたらと複雑で理解していてもすぐに忘れてしまうし、陳腐になってしまう。

一昔前まではFHDでいいと思っていたのに、いまやスマホでさえも4Kだ。実際に4Kのコンテンツを再生する場面があるかはさておき、FHD以上の解像度も検討しようかなと思ってくる。

OBS Studioの設定から、「出力」タブに移動し、「出力モード」を「詳細」に変更して、設定をいじくりまわしてみよう。

本稿の目的はこの「出力」タブの「録画」設定だけだから、他の一般的な設定は何にも触れないぞ!

ちなみに僕の使い方だが画面を録画して、あとで見直す用に使う感じだ。配信ではなく録画なうえ、ゲームなどを遊びながらという感じでもない。画質・音質重視で、ファイルサイズなんかは小さくしたいけれど互換性は大事にしたいなあという感じ。

とりあえず、録画設定から

「録画設定」をいじることから始めよう。

種別

そのまえに。

「種別」は「標準」でいいだろう。FFmpegを使ってもいいし、なんならOBS Studioは内部的にFFmpegを使っているのでニッチな設定をいじりたい人用の選択肢だ。別にオーソドックスな感じでいいので「標準」でいい。

録画設定

録画ファイルのパスは本当に適当でいいだろう。私はビデオフォルダーに保存してくれればいいので「 C:\\Users\\livec\\Videos 」としている。

  • スペースなしのファイル名を生成する

という任意の機能があるが、まあ別に好きにすればいいだろう。動画ファイルを処理するプログラムを書いたりする人は、ファイル名を二重引用符””で囲まなくていいというちょっとした楽ができるぐらいのメリットだろうか?あまりよくわからないが、たんに録画をするだけのユーザーからしたら正直どうでもいいだろう。

コマンドラインツールを使ったりする人なんかはチェックをしておけばいいだろう

録画フォーマット

Hybird MP4

  • Flash Video (.flv)
  • Matroska Video (.mkv)
  • MPEG-4 (mp4)
  • QuickTime (.mov)
  • Hybrid MP4 [ベータ版](.mp4)
  • Fragmented MP4 (.mp4)
  • Fragmented MOV (.mov)
  • MPEG-TS (.ts)
  • HLS (.m3u8 + .ts)

自分が再生できればそれでいい人は、自分の再生できるフォーマットを好きに選んでいい。

他の人も再生するし、自分も特殊なツールなしに、というか普通に使える動画ファイルが欲しいなって人はMP4を選択するのがいいと思う。問題はMP4にもいくつか種類があることだ。

途中でOBS Studioがクラッシュして数時間の録画ファイルがぶっ壊れることがある。

いままでのMP4なら録画ファイルがぶっ壊れてなにも再生できないわけだが、Fragmented MP4ならMP4のなかで細かく録画ファイルを分けてくれる。最後にクラッシュした録画データが壊れるだけで、それまでの録画データは再生できるというわけ。

「おー、すごい!」となるのだが、Fragmented MP4はあんまり普及していないので、再生できる方がレア。

ということで、Hybrid MP4が生まれた。

中身はFragmented MP4なのだが、外のハコは普通のMP4。普通のMP4扱いなので、互換性抜群。基本的にどこでも再生できるが、試験機能なので未知のエラーがあってもごめんという感じ。

まあ、Hybrid MP4でいいよね。

映像エンコーダ

NVIDIA HEVC

RTX 40シリーズGPUの場合はHardware (NVENC, AV1)を、そうでなければHardware (NVENC, HEVC)を選択でよし!

エンコード設定はCQVBRにして目標品質20でプリセットもP6: Slowerにして画質をよくしたいなあって。

チューニングも高画質にしてる。

選べる映像エンコーダーはこれ。

  • AMD HW H.264(AVC)
  • AMD HW H.265(HEVC)
  • AOM AV1
  • NVIDIA H.264
  • NVIDIA HEVC
  • SVT-AV1
  • x264

エンコーダーの解説

  • x264 スタンダードだけど、古いし、わかりやすく画質が悪い。選びたくない。
  • NVIDIA HEVC(H.265) Nvidia GPUに搭載されているNVEncエンコーダーです。NVIDIAは何世代にもわたってハードウェアエンコーダーを改良しており、RTXシリーズのエンコーダーは優秀。特にHEVCエンコーダーは、同世代のAMDよりも画質が良い(といううわさ)。
  • AMD HW H.265(HEVC) AMDのVCEエンコーダーです。My LaptopにはRyzen 7 5800Hが搭載されているけれども、CPUについてる統合GPU(Radeon Graphics)で使用可能。しかし、一般的にNVIDIAのエンコーダーの方が画質面で優秀とされているので、ナシかな。
  • AV1 AV1は比較的新しい映像コーデックで、H.265よりもさらに高い圧縮効率を持つ。同じ画質でファイルサイズを30-50%削減できる可能性がある(が、今のところ耐えられないほど遅い)。
    • AOM AV1 Alliance for Open Mediaが開発したリファレンス実装です。AOMは、Google、Netflix、Amazon、Appleなどが参加する業界団体の略称です。高画質だが、エンコード速度が非常に遅いのが特徴。画質は最高クラスだが、エンコード速度が遅すぎてリアルタイム録画には不向き。基本的には事後エンコード専用と考えてください。実際YouTubeなんかもトランスコードに使ってるし。
    • SVT-AV1 Intel(とNetflix)が開発したAV1エンコーダー。SVTは「Scalable Video Technology」の略。AOM AV1よりも高速でありながら、画質もそれなりに良いバランス型。AV1に興味があるなら、SVT-AV1を試してみる価値がありますね。ファイルサイズの削減効果は確実にある一方で、エンコード速度がリアルタイム録画に追いつくかは、実際に試してみないとわからない。それに、古い再生機器では再生できない可能性があることだけご注意。

音声エンコーダ

FFmpeg Opus

  • FFmpeg AAC
  • FFmpeg ALAC (24bit)
  • FFmpeg FLAC(16bit)
  • FFmpeg Opus
  • FFmpeg PCM(16bit)
  • FFmpeg PCM(24bit)
  • FFmpeg PCM(32bit float)

FFmpeg Opus一択。普通にブラウザで再生できるから互換性の問題はなし!

極端な低ビットレートにしないし、極限的な高音質を求めるわけではないつもりだが、それ抜きでも、FFmpeg Opusを選んだほうがいい。

避けるべき選択肢はPCMとFLAC系のデータ損失ゼロ系のやつ。非圧縮にする意味がないし、可逆圧縮でも過剰。1時間の録画で600MB以上の音声データになり、メリットに対してコストが高すぎる。そもそも可逆圧縮の恩恵を受けるためには、非常に高品質な録音環境と再生環境が必要で、一般的な録画用途では違いを実感することは困難。

最悪FFmpegでAACに変換すればオッケー。

エンコーダ設定

レート制御

目標品質による可変ビットレート(CQVBR)

Nvidiaによる推奨はCQR(Constant Quality Rate)かVBR(Variable Bitrate)だけれども、外質を重視しつつもファイル容量を気にしたいのでCQVBRを選びます。

目標品質

20

最大ビットレート

250000 Kbps

2K解像度で録画するので、こんなもん。その代わりフレームレートは23.976(つまり24フレームでドロップフレームあり)にして気休め程度にデータ量を抑えてます。

キーフレーム間隔

0 s

0 = 自動なので、キーフレームは自動でよろしくということ。

プリセット

PS5: Slow (高画質)

チューニング

高品質

マルチパスモード

2パス(1/4解像度)

  • 1パス
  • 2パス(1/4解像度)
  • 2パス(フル解像度)

ざっくりいえば、ビットレートの配分を決める方法の話。

1パスエンコーディングは、本を最初から最後まで一度だけ読みながら、その場その場で重要度を判断していく感じです。次に何が来るか分からないので、最適な判断ができない場合があります。 2パスエンコーディングは、まず本全体をざっと読んで全体の構造や重要な部分を把握してから、もう一度詳しく読み直す感じです。全体を知っているので、より適切にリソースを配分できます。

1/4解像度とフル解像度は分析に使う解像度の違い。

1/4はまず映像を4分の1の解像度(例:1920x1080 → 480x270)に縮小して高速で全体を分析する。フル解像度は文字通りフル解像度で詳細な分析を行うことで、最も正確な統計データが得られますが、処理時間が大幅に増加します。

ビットレートが画質を決定するので、フル解像度で2パスにするのが理想だけれども、読書だって何回もするのはめんどくさいし、時間が足りないこともある。

無難にデフォルトの2パス(1/4解像度)でいいかと。

リアルタイム配信ならまよわず1パスでOK。

プロファイル

main

  • main10
  • main

普通はmainでOK。HDRで録画したいならmain10で。そもそもRTX 40シリーズのGPUを使っているならAV1エンコーダを使っていると思うが、その場合そもそもmainしか選べないハズ。

  • Look-ahead(オン)
  • 適応量子化(オン)

いろいろなブログで書かれているが、このLook-aheadの説明が意味不明。

OBSのLook-ahead機能は本当にいらない子なのか?|ulosto123
ネットでOBSのオススメ設定を調べてみると、必ずと言っていいほど「Look-aheadはONにするな」と書いています。 その理由はと言いますと「動きの少ない場面ではいいけれど、動きの激しい場面では画質が下がる」とのこと。 それは本当なのでしょうか? 本当にそれほどにダメな機能なんでしょうか? ということで、実際にOBSでの説明を読んでいきます↓ 『動的Bフレームを有効にします。有効にした場合、GPU使用率の増加を犠牲にして最大数まで、必要な分だけ多くのBフレームを使用することで視覚的品質を向上させます。』 英語だとこう↓ ↑有効にすると、GPUの使用率が高くなる代わりに、
OBS StudioのLook-aheadに関する日本語の説明は間違っている - Photo Cafeteria
どうしても納得がいきません。 下はOBS studioのLook-aheadに関する説明なのですが、この記述は

いちおうNvidiaの説明もあるので、そっちを参考にしてみよう。

NVIDIA NVENC Obs Guide
Configure OBS to get the most quality out of your stream.

Look-aheadの記述がある部分を抜き出すとこう。

Look-ahead: Checked. This allows the encoder to dynamically select the number of B-Frames, between 0 and the number of B-Frames you specify. B-frames are great because they increase image quality, but they consume a lot of your available bitrate, so they reduce quality on high motion content. Look-ahead enables the best of both worlds. This feature is CUDA accelerated; toggle this off if your GPU utilization is high to ensure a smooth stream.
Max B-Frames: Set to 4. If you uncheck the Look-ahead option, reduce this to 2 B-Frames.

それぞれ訳してみるとこんな感じ。

Look-ahead(先読み): チェック済み。この機能により、エンコーダーは0から指定したBフレーム数の間で、Bフレームの数を動的に選択できます。Bフレームは画質を向上させる優れた機能ですが、利用可能なビットレートを多く消費するため、動きの激しいコンテンツでは逆に画質を低下させてしまいます。Look-ahead機能を使えば、両方の利点を活かすことができます。この機能はCUDAアクセラレーションに対応しています。GPUの使用率が高い場合は、スムーズな配信を確保するためにこの機能をオフにしてください。
最大Bフレーム数: 4に設定。Look-aheadオプションのチェックを外す場合は、これを2 Bフレームに減らしてください。

Bフレームの動作を簡単に図解すると、こんな感じ。

通常のフレーム順序

I → P → P → P → I
(Iフレーム:完全な画像、Pフレーム:前フレームからの差分)

Bフレームを使った場合

I → B → B → P → B → B → I
(Bフレーム:前後のフレームから予測して圧縮)

動きが激しい場面では効果がある感じですね。

  • Look-aheadがON → 自動的にBフレームを減らす
  • Look-aheadがOFF → 常に指定数のBフレームを使用(画質が落ちる可能性)

適応量子化についての説明もしておこう。

Nvidiaの説明はこんな感じ。

Psycho Visual Tuning: Checked. This enables the Rate Distortion Optimization in the encoder, which greatly optimizes the way you use bitrate, improving image quality on movement.

Bフレーム

Bフレームの説明をするにはちょこっと前知識が必要。

  • Iフレーム(キーフレーム) 完全な画像情報を持つフレーム
  • Pフレーム 前のフレームとの差分情報のみを持つフレーム
  • Bフレーム 前後両方のフレームを参照して作られる双方向予測フレーム

ここの設定をいじることで、連続するBフレームの最大数を設定することができる。数値を上げる(3〜4程度)ことで得られるメリットはこんな感じ。

  • さらに高い圧縮効率
  • より滑らかな動きの表現

一方でデメリットはこんな感じ。

  • エンコード負荷の大幅増加
  • メモリ使用量の増大

再生するときに、カクカクしてしまう原因になってしまうので、まああんまりいじらない方がいい。

結論だが、デフォルトの2のままでいい。

Bフレームを参照

「Bフレームを参照」設定は、エンコード時にBフレーム同士が互いを参照できるかどうかを決める設定。

基本的な仕組みから

Bフレームの参照パターンを理解するために、まず典型的なフレーム構造からみてみよう。

I - B - B - P - B - B - P

Bフレームがある場合、BフレームがIフレームやPフレームだけでなく、ほかのBフレームも参照できるかどうかでBフレームの予測精度が上がるよねって話。

3つの設定の違い

  1. 無効 各Bフレームは、IフレームとPフレームのみを参照。Bフレーム同士は互いを参照ない。最もシンプルで負荷もない方式。メリットは処理負荷が最も軽く、互換性も高いこと。古いハードウェアでも確実に動作し、エンコード時間も最短。デメリットは圧縮効率が劣るので、同じ品質を得るためにはファイルサイズが大きくなってしまうことになる。配信メインで低遅延を重視する場合や、古いハードウェアでの録画で使う感じ。
  2. それぞれ 各Bフレームが、ほかのすべてのBフレームを自由に参照可能。最も柔軟で高効率な圧縮が可能だけれども、計算もむちゃくちゃ複雑になって負荷が爆増。メリットは圧縮効率が最高で、同じファイルサイズでより高品質な映像を得られる(言い方を変えれば小さなファイルサイズで高画質な映像が手に入ること)。特に動きの複雑なシーンや長時間の録画で効果を発揮。デメリットは処理負荷が最も重く、エンコード時間が長くなること。高品質な録画を重視し、十分なハードウェア性能を用意して使う項目。
  3. 中央のBフレームのみ いいとこどりというかわるいとこどりというか、間をとった項目。連続するBフレームのグループの中で、中央に位置するBフレームのみがほかのBフレームを参照できるという制限的なアプローチ。中立的に言えば、「それぞれ」と「無効」の中間的な性能を狙った設定。メリットは「無効」よりも高い圧縮効率を得ながら、「それぞれ」ほど負荷をかけずに済むこと。バランス型の設定とも言える。デメリットは中途半端になりがちで、明確な利点が見えにくいこと。品質と負荷のバランスを取りたい、悪く言えばあんまり使う意味のない設定かもです。

負荷について具体的に

負荷の違いは、プロセス占有率で言えば「無効」を100%とすると、「中央のBフレームのみ」が120-130%、「それぞれ」が150-200%程度の印象です。

古いパソコン、例えば5年以上前のCore i5やGTX 1050クラスだと「それぞれ」設定では録画中にフレームドロップが発生する可能性があります。しかし「軽微」というよりは「明確に重くなる」レベルの差はあります。

カスタムエンコーダオプション

空欄でOK!


これでおっけー、たぶん。

いやあ、動画系の設定って大変だし謎すぎる。少しでも「分かった!」が増えてくれると嬉しいな。おつかれさん

Read more

なぜ静止画に4:2:2は存在しないのか

なぜ静止画に4:2:2は存在しないのか

はじめに 動画のコーデックを扱う際、「4:2:2」や「4:2:0」といった表記を目にすることが多い。これらはクロマサブサンプリング(色差サブサンプリング)のパターンを示す記法である。しかし、静止画フォーマットであるJPEGにおいても同様のサブサンプリングが適用されていることは、意外と知られていない。 本稿では、クロマサブサンプリングの数理的基礎から、各画像フォーマットにおける実装まで、技術的に正確な理解を構築することを目的とする。特に、「なぜ写真の世界では4:2:2がほとんど存在しないのか」という問いに対して、技術的・歴史的観点から考察する。 色空間とサブサンプリングの分離 クロマサブサンプリングを理解するには、まず「なぜ色情報を間引いても画質劣化が少ないのか」という根本的な問いに答える必要がある。この答えは、人間の視覚系の生理学的特性に深く根ざしている。 RGB色空間の特性 RGB色空間は、赤(R)・緑(G)・青(B)の3つの加法混色成分によって色を表現する色空間である。これは、ヒトの網膜に存在する3種類の錐体細胞の分光感度特性に対応している。 * L錐体(長波長

By Sakashita Yasunobu
ブログで使うWeb用の画像のフォーマットについて検討する

ブログで使うWeb用の画像のフォーマットについて検討する

背景と目的 普段から写真撮影を行っていると、画像ファイルが占める容量は無視できない規模になる。現在はNASとAmazon Photosに保存しているため、容量的な制約は少ないものの、ファイルサイズが小さくできるのであれば小さくしておく方が合理的だ。特にWeb公開を前提とする場合、ファイルサイズはアップロード・ダウンロード、そしてページ表示時間に直結するため、可能な限り小さい方が望ましい。 これまでは現像ソフトからJPEG品質100で出力し、Web用途など容量削減が望ましいケースではWebPに変換してきた。RAWファイルは別途バックアップしてアーカイブとして保存している。目視で画質劣化が認められないのであれば、全てWebPで保存しても問題ないのではないかと考えたが、より優れたフォーマットが存在する可能性があるため、現在利用可能な画像フォーマットについて調査した。 主要な画像フォーマットの特徴 JPEG 最も広く普及している画像フォーマットで、互換性に関する信頼性は高い。しかし、規格自体が古く、現代的な圧縮技術と比較すると効率は劣る。 JPEGについて知っておくべきすべての

By Sakashita Yasunobu
WebpとAVIFをWindowsでローカルに使ってみる

WebpとAVIFをWindowsでローカルに使ってみる

ブラウザツールはいろいろあるのだが、ローカルでやるのがやはり便利なのでその方法を模索する。 sharpで画像を一括圧縮、WebP・AVIF変換する - Web production note画像変換ライブラリsharpを用いて、画像をまとめて圧縮や変換(Webp・AVIF・JPG・PNG)できる方法をまとめました。Web production note 非公式なコマンドラインツールなどもあるが、開発が最新のバージョンに追随していなかったりするので、おとなしく公式実装を使うのがよさそう。 PNGやJPEG画像をAVIFフォーマットへ変換してくれるコマンドラインツール「cavif」がリリース。PNGやJPEG画像をAVIFフォーマットへ変換してくれるコマンドラインツール「cavif」がリリースされています。詳細は以下から。AAPL Ch.AAPL Ch. Webp WebpはGoogleが作ったナウい画像形式。古臭いJPEGに比べて画質を保ったまま小さくできるのがウリ。 WebpのダウンロードはGoogle公式ページの「Windows版をダウンロード」から。 WebP のダ

By Sakashita Yasunobu
Webpの向き不向き

Webpの向き不向き

WebpにはLosslessとLossyの2つのオプションがある。常識的に考えて、Losslessはファイル容量がデカくなりがちで、ファイル容量を小さくしたければLossyを使えばいいと思うが、意外とそんなことないので、用途を考えて使い分けましょうという話。 ウェブ用の画像形式 | WebP | Google for Developersウェブ用により小さい画像を作成するこの画像形式の詳細や、G4 Converter のダウンロードやサポートのためのリンクを確認できます。Google for Developers 最近、ScanSnapのix1300で本をスキャンするようになった。白黒の最高解像度でスキャンをする場合、PDFで画像が出力される。PDFよりも汎用的な画像ファイルのほうが都合がいいので、pdfimagesで画像を抜き出している。 PDFから画像をTiffで抜き出す PDFが一個だけ $base = (Get-Item *.pdf).BaseName; pdfimages -tiff *.pdf temp; Get-ChildItem temp-*.tif | F

By Sakashita Yasunobu