✒️2019-04-07 🔄2021-06-28

OBSに画質を求めるのは間違っているだろうか

OBS

TL;DR #

この記事はOSSのOpen Broadcaster Software(OBS Studio)のチュートリアルです。

OBSは配信の品質向上、処理の軽量化に最適なアプリケーションです。たとえ録画用途であってもBandicamやShadowPlay等の他のアプリケーションを選ぶ余地はありません。
日本語の情報が少なく、OBS関連では辿り着けない情報も含めて解説するので、何かに躓いている方や更に配信・録画品質を上げたい方は必見です。
目次・Ctrl-F を活用してね!

更新履歴 #

日時 内容
2019-04-16
  • 推奨されるハードウェアのスペックについて
  • レンダリング遅延と映像の遅延 (非同期)について
  • Chromeのハードウェアアクセラレーションを無効化せずにキャプチャする方法について
  • OBS単体でBGMを流す具体例
  • FFmpegカスタム出力のx264、utvideoの解説
  • YouTubeの劣悪なエンコード事情とその対処方法について
  • 2019-04-24
  • 曲名表示BGMスクリプトの項を、OBSだけでBGMを再生・曲名を表示する方法に変更
  • YouTubeのVP9と疑似4Kについて
  • 2019-04-28
  • OBSのログ、クラッシュレポートの見方について
  • メディアソースの記述を修正
  • OBSだけでBGMを再生する為の生成スクリプトに、曲名を表示しないオプションを追加、解説を修正
  • 2019-05-10
  • はみ出ている要素を修正
  • ソースの右クリックメニュー"変換"の説明を追記
  • 統計の解説の追記
  • ビットレートに関する項目を更新
  • ANGLEの説明を修正
  • 詳細設定の説明、リンクの不具合の修正
  • アプリケーション毎に音声を分けて録音する解説を更新
  • OBSで動画編集する方法
  • AudioMediaSource.ps1とその説明を更新
  • よくある質問に対応したトラブルシューティングの項を追加
  • 2019-06-21
  • トラブルシューティングに項目を追加
  • タイムラプスの倍率の表記の誤りを修正
  • ソースの右クリックメニュー"変換"についての記述を詳しく
  • 色空間についての記述を詳しく
  • YouTubeの新しい配信UIの解説
  • Discordオーバーレイのフォントを変えるCSS
  • カラーバーやタイマーを表示する方法
  • 疑似4Kライブ配信の方法
  • 正しい同時配信の方法
  • 2019-07-09
  • Discord StreamKit Overlay、YouTubeLiveコメント用CSSの4K対応
  • ソースの変換による滲まないスケーリングに関する記述を修正
  • NVEncセッション数を専有する条件について追記
  • MPEG-2、HEVC拡張機能のリンク
  • 対YouTube最強エンコード疑似DCI風8K60fps
  • 2019-10-20
  • (記事内容とは無関係)画像やフォーマットの調整と統一
  • 2019-11-18
  • トラブルシューティング項目の追加
    • ChromeやVSCodeのハードウェアアクセラレーションを切らずにOBSに映す方法をより詳細に
    • マイクの音が左からしか聞こえない場合の対処法
    • 画面が映らない諸々の理由について
  • OBS 24.0~ ブラウザソースの音声ソースの設定を追記
  • Discord Overlayの解説を詳細に、CSSの追加
  • NVIDIA GPUにおけるTuring NVEncの最低要件をGTX 1660から1650 Superへ変更
  • hevc_nvenc vbr_hqにも関わらずmaxrate指定が抜けていたのを修正
  • FFmpegカスタム出力 映像エンコーダ設定の区切り記号に誤りがあり、正しく動作しないものであったのを修正(コメントありがとうございます)
  • (記事内容とは無関係)リストのフォーマットの統一
  • 公式ドキュメントPDFのリンクを追加
  • 記事が肥大したため、早見表を追加
  • 執筆途中のまま公開になっていたハードウェア構成の項目を修正
  • 2019-11-19
  • 各項のビットレートの見直し・確認
  • 同時配信の解説に追記
  • 箇条書きが崩れていたのを修正
  • 2019-11-28
  • 一部のリンクが機能していなかったのを修正
  • ロスレス録音の方法を追記
  • YouTubeへのアップロードに適した音声形式・処理について言及
  • アプリケーション毎に音声を分ける方法についての解説を整理
  • 不要な「こと」「という」「もの」を削除した(今後も気づいたら削除していく)cf.
  • 2020-02-12
  • OBS 24.0.3~GPU優先度修正テストに関する内容を追記
  • 見出しの階層を見直し
    • プロファイル・シーンコレクションに含まれるものを明示
    • ソースの右クリックメニュー・フィルタに関する項目の位置調整
  • リンクのない参照を修正
  • ウィンドウキャプチャの説明を追記
  • コピー、貼り付け(参照)、貼り付け(複製)を詳しく
  • 変換の設定を詳しく
  • OBS用LUTの作成方法
  • ブラウザソースでスクロールできない問題を解決する設定
  • FFmpegカスタム出力 DNxHDの設定
  • NVEncのpresetをslowからmediumに修正
  • Twitch・Mixer FTL向けの留意点
  • imgのlazy-loadingに対応
  • Babyface ProからBabyface Pro FSへ修正
  • 崩れた表記を修正
  • 2020-02-17
  • リンクの不具合の修正
  • 2020-03-03
  • リンクの不具合の修正
  • 2020-03-11
  • VSTについて追記
  • (記事内容とは無関係)試験的な見出しのリンク機能
  • 2020-05-03
  • ソースの右クリックメニューの"ミキサーを非表示"、"インターレース解除"について追記
  • OBS 25.0で追加されたVulkan・Chrome・UWPの新しいキャプチャー方法、3D LUT対応、変換の挙動変更への対応
  • RTX Voiceの設定
  • 2020-06-07
  • 見出しリンクの修正
  • 表示の崩れを修正
  • トラブルシューティングの各項をそれぞれの設定項目に分類した
  • 2020-07-31
  • AMD GPUのハードウェアエンコーダAMFの設定を追加
  • 2020-09-13
  • スケールフィルタの選び方を追記(ポイント、バイキュービック、ランチョス、エリア)
  • 中間コーデックDNxHDの設定を修正
  • エンコード1000本ノックで爆誕したNVEncさいつよ録画設定を追加・得た知見を配信設定に追記
  • ネットワーク設定の解説に追記
  • 最新のFFmpegを組み込んだOBSのビルド方法
  • 2020-09-14
  • CEFを組み込んだOBSのビルド方法(ブラウザソースを有効にする)
  • 2020-12-09
  • ワンオペ配信に必須な自動シーンスイッチャー
  • キャンバス解像度が変わってもレイアウトが崩れない相対的なソースをつくる
  • OBSのビルド手順に追記
  • 2020-12-10
  • 負荷ゼロで配信と同時に録画する
  • リプレイバッファの解説・配信中にリプレイを流す
  • HLSを使ってHEVCでYouTubeに配信する
  • OBSが使用するスレッド数を制限する
  • 2020-12-15
  • OBS Studio 26.1.0リリースに伴いOBSのビルド手順を修正
  • 2020-12-17
  • ゲームキャプチャでFXAAの効果がキャプチャに反映されない場合の設定
  • 配信開始時に警告したり、リプレイバッファを自動開始する設定
  • 録画時のビットレートやレート制御の設定を見直した
  • YouTube HLS配信時の設定を修正
  • 2021-05-01
  • クラッシュしても動画ファイルが破損しない録画設定録画の最多重化
  • IPv6環境ではRTMPではなくHLSを使う
  • 配信の通信を暗号化するRTMPS
  • iTunesが入っている環境では配信の音質が向上する
  • 音声フィルタの詳細な解説
  • OBS 27.0で対応したNVIDIA Broadcastによるノイズ抑制フィルタの設定
  • 新しいQtでOBSをビルドする
  • 2021-06-28
  • 回線の問題で配信が安定しないときに気を付けるべきポイントを統計 - ドロップフレーム(ネットワーク)に追記
  • RTMP(S)をIPv6で配信する設定を配信設定 -> 詳細設定 -> ネットワーク -> IP選択に追記
  • 936p60の罠
  • ダウンロードとインストール #

    OBSは開発が盛んなOSSなので、更新はチェックしておくと良い。
    StreamlabsやN Airの場合、バージョンが古かったり録画機能が削除されているので、本家がオススメ。
    下記の公式サイトにインストーラとポータブル版(Zip)のURLがある。
    Open Broadcaster Software | OBS

    ポータブル版をProgram Files以外のディレクトリにインストールする場合、bin・data・obs-pluginsが含まれるOBS Studioディレクトリのセキュリティ権限にALL APPLICATION PACKAGESというオブジェクト名を追加して、アクセス許可する必要がある。この権限がないと、特定の機能(UWPアプリのゲームキャプチャ)が正しく機能しない場合がある。
    OBS 26.0で追加されたVirtual Camera機能を使用するにはインストーラ版を選択する。

    因みに"GitHubで見る"をクリックすれば、正式リリース前のRelease Candidate版(リリース候補版)等をいち早く試すこともできる。
    勿論ここからソースコードを入手し、自前ビルドすることも可能。

    非公式ドキュメント(頻繁に更新されています)
    Open Broadcaster Software Studio Multiplatform Help Guide [PDF] | OBS Forums

    初回起動と画面構成 #

    OBSを管理者として実行すると、GPU高負荷時に統計 -> レンダリングラグが原因で逃したフレームが低減し、配信のカクつきがを最小限にできる可能性があります(OBS 24.0.3~)。
    OBS Studio 24.0.3 GPU Priority Fix Testing | OBS Forums

    自動構成ウィザードは、実行中のマシンに合わせて適切に設定してくれる。
    らしいが、何れにせよ設定し直す必要があるので勉強も兼ねて"いいえ"を選択。

    OBS

    メニューバー #

    ファイル #

    項目 説明
    録画を表示
  • 設定 -> 出力 -> 録画 -> 録画ファイルパスで設定されたディレクトリが開かれる。
  • 録画の再多重化
  • 再エンコードせずmp4コンテナへ変換する機能。
  • 規格外や非対応のフォーマット変換では録画が最多重化されましたが、ファイルが未完成の可能性がありますと表示され失敗する。
  • 設定
    設定フォルダーを表示
  • シーンやプロファイル等のデータ、ログ等が保存される場所。
  • ここだけバックアップしてあれば設定内容を復元できる。
  • プロファイルフォルダーを表示
  • 現在選択中のプロファイルに該当するディレクトリを表示する。
  • 常に手前に表示
  • ウィンドウがアクティブでなくても最前面に表示する。
  • 終了
  • OBSを終了
  • 編集 #

    項目 説明
    全画面インターフェイス
  • フルスクリーン表示。F11で切り替えられる。
  • ドック
  • UIのリセットで配置を初期設定に、UIのロックで配置を固定する。
  • GUIの下部に表示されている項目の有効/無効がここで切り替えられる。
  • 配信や録画の問題解決に必須なので統計に必ずチェックを入れる。OBS23.0~の機能なので、古いバージョンの人はアップデートしよう。
  • ツールバー
  • リストボックス: 右クリックメニューの項目をGUIにも追加する。
  • ステータスバー
  • 配信、録画時間や安定性の簡易的な表示。
  • マルチビュー(全画面)
  • 放送用のお洒落な管理画面をフルスクリーンで表示する。
  • マルチビュー(ウィンドウ)
  • 放送用のお洒落な管理画面をウィンドウで表示する。
  • プロファイル #

    プロファイルを分けることで、異なる配信先やキャンバスサイズ・フレームレート、エンコード設定を切り替えられる。
    プロファイルには設定 -> 一般 設定 -> 音声 -> グローバル音声デバイス以外の設定が含まれる。
    配信・録画中に切り替えることはできない。

    シーンコレクション​ #

    シーンコレクションを分けることで、用途別に複数シーンを一括で切り替え、不必要なシーンを読み込まない状態にできるので、軽量化・安定化に役立つ。
    シーンコレクションにはシーンやそれに含まれるソース音声ミキサーが含まれる。

    ツール #

    項目 説明
    自動構成ウィザード
  • 初回起動時にキャンセルしても、ここから実行できる。何も設定しないよりは実行したほうが良い。
  • Decklink Output
  • Blackmagic Designのキャプチャボードと連携できる機能。
  • 字幕 (実験的)
  • 埋め込み(CEA-608/708)字幕。OBSの映像ソースとしては使えず、ストリーミングサービス側で対応していないと表示されない。
  • 自動シーンスイッチャー
  • アクティブウィンドウのタイトルを取得し、それに合わせて自動でシーンを切り替える機能の設定。
  • 出力タイマー
  • 配信、録画の開始/停止タイマー機能の設定が可能。
  • スクリプト
  • バンドルされたLuaJITまたはシステムのPython環境を通してLuaとPythonスクリプトを実行できる。
    https://obsproject.com/docs/scripting.html
  • ヘルプ #

    項目 説明
    ヘルプポータル https://obsproject.com/help
    ウェブサイト https://obsproject.com/
    Discordサーバーに参加 https://discordapp.com/invite/obsproject
    ログファイル
  • ログファイルやクラッシュレポートのディレクトリを表示したり、OBSサーバにアップロードすることができます。
  • OBS Log AnalyzerOBS公式Discord #help-and-supportでURLを入力するとエラー内容等を整形して表示してくれる。
  • クラッシュレポート
    更新を確認
  • ここからアップデート出来る。
  • OBS Studioについて
  • クレジット
  • 自動シーンスイッチャー #

    OBS 自動シーンスイッチャー

    ワンオペやシングルディスプレイ環境でのオペレーションを求められる配信では、この自動シーンスイッチャーが大活躍する。
    ウィンドウタイトルに一致する文字列や正規表現を書き、それに対応したシーンを選択すると、そのウィンドウがアクティブになった時に任意のシーンに自動で切り替えてくれる。
    オーバーレイやコメント欄、ゲーム、その他ウィンドウ、背景など用途別にシーンが適切に分けられていることが前提。

    項目 説明
    ウィンドウタイトル シーン名 ^RME TotalMix FX.*$
  • RME TotalMix FX: Babyface Pro (1) - 48.0kのような、文頭がRME TotalMix FXなウィンドウに一致する例(前方一致)
  • ^.*Visual (Studio Code|...)$
  • ファイル名 - ワークスペース名 - Visual Studio Codeファイル名 - ワークスペース名 - Visual ...に一致する例(OR)
  • ^(?!.*Launcher)Minecraft.*$
  • Minecraft 1.16.3には一致するが、Minecraft Launcherに一致しない例(否定先読み)
  • ^(?!.*Discord).*VoiceChat$
  • Discordのボイスチャンネル名"VoiceChat"でのGo Liveポップアップウィンドウに一致する
  • どのウィンドウにも一致しない場合 切り替える: Default
  • 待機画面等のデフォルトのシーンを作成し、それを指定する。配信中に映すものが無くなっても真っ黒にならないようにする。
  • アクティブウィンドウタイトルを確認する間隔 1000-2500ms
  • ウィンドウを頻繫に切り替えてそれに追従させたくない時は間隔を大きくする
  • シーンスイッチャーは アクティブ(停止ボタン)
  • OBSのシーンを弄る時など、勝手に切り替わっては迷惑な時に停止するとよい
  • シーンコレクション #

    シーンコレクションには、映像・音声ソースを含んだシーン、音声デバイスを扱うミキサーが含まれる。
    これを切り替えることで、キャプチャ内容を用途別に切り替えられる。

    シーン #

    ソースを纏めたものを、切り替えられる。
    +で追加、-で削除。

    ソース #

    選択したシーン内に映像・音声・テキスト等のソースを追加(+ボタン)する。
    また、既に追加したソースの表示・非表示をここで切り替える。

    OBS
    項目 説明
    ウィンドウキャプチャ
  • 特定のウィンドウ、ボーダーレスウィンドウを安定してキャプチャする。
  • フルスクリーンモードのゲームをキャプチャするには、ゲームキャプチャを使用する。
  • 仮想デスクトップ上のウィンドウもキャプチャ可能。
  • ゲームキャプチャ
  • DirectX、OpenGLゲームのウィンドウをキャプチャする。
  • フルスクリーンモードのゲームに対応。
  • シーン
  • シーンを切り替えずにシーンをソースとしてインポートする。
  • ワンオペ配信に欠かせない自動シーンスイッチャーと組み合わせると存在意義を発揮する。
  • テキスト(GDI+)
  • テキストを直接またはテキストファイルを指定して、映像に合成する。
  • ブラウザ
  • OBS組み込みブラウザでURL先の内容を表示する。
  • リソースを多く消費するため、メディアソース等で代替可能なものにわざわざ使わない。
  • メディアソース
  • 映像、音声ファイルを指定し、再生する。
  • 対応する拡張子のファイルがD&Dされたとき、自動で追加される。
  • 複数の映像、音声ファイルを連続して再生することも可能。
  • 映像キャプチャデバイス
  • キャプチャボードやWebカメラの映像を取得する。
  • 画像
  • 画像を指定し、表示する。
  • 対応する拡張子のファイルがD&Dされたとき、自動で追加される。
  • 画像スライドショー
  • 複数の画像または画像の入ったディレクトリを指定し、スライドショーとして表示する。
  • 画面キャプチャ
  • 個別のウィンドウではなく、デスクトップ全体のキャプチャを行う。
  • 複数のアプリケーションに跨がるなど画面全体を録画する必要がある時のみ使用する。
  • 仮想デスクトップは非対応(ウィンドウキャプチャ等を使用)。
  • 色ソース
  • パレットまたはHTMLカラーコードで単色の背景ソースを追加する。
  • 音声入力キャプチャ
  • Windows上での"録音デバイス"、ミキサー(設定 -> 音声)の"マイク音声デバイス"に該当する音声デバイスをキャプチャする。
  • 音声出力キャプチャ
  • Windows上での"再生デバイス"、ミキサー(設定 -> 音声)の"デスクトップ音声デバイス"に該当する音声デバイスをキャプチャする。
  • RME TotalMixやVoiceMeeter Bananaのようなソフトを使ってループバックする必要がない。
  • グループ化
  • ソースを束ねて一括でレイアウトを移動したり、フィルタを適用したり、纏めて表示/非表示を切り替える。
  • ウィンドウキャプチャ #

    項目 説明
    ウィンドウ 任意
  • キャプチャしたいアプリケーションを起動した状態で、該当するものを選択。
  • フルスクリーンゲーム等の画面をフックする必要がある場合はゲームキャプチャを使用する。
  • キャプチャ方法 自動
  • 特に必要がなければ自動を選択する。
  • BitBit(Windows 7 以降)
  • 古くから伝わるBitBit APIを用いたキャプチャ。
  • Windows Graphics Capture(Windows 10 バージョン 1903 以降)
  • 最近出た新しいWGC APIを用いた、UWP、Chromium系ブラウザ(Edge、Chrome、VSCode、Discord...)に対応するキャプチャ方法。
  • 仕様上DPIスケーリングが適用され、マウスカーソルは常に表示される。
  • ゴニョゴニョは程々に。
  • ウィンドウの一致優先順位 ウィンドウのタイトルに一致する必要があります
  • Window title must match
  • ウィンドウタイトルに完全一致。
  • ウィンドウタイトルが変わらないアプリケーションにのみ有効。
  • 同じ名前のウィンドウを個別に認識させる
  • タイトルに一致、そうでなければ同じ種類のウィンドウを見つけます
  • Match title, otherwise find window of same type
  • ウィンドウタイトルに一致するか、ウィンドウクラス名に一致。
  • 異なる実行ファイル名でも、同じウィンドウクラスなら一致してくれる。例えば、cmdとpowershellはConsoleWindowClassを使っているので、設定を変えずにキャプチャできる。
  • 基本的に"同じ実行可能ファイル"の方を使ったほうが分かりやすい。
  • タイトルに一致、そうでなければ同じ実行可能ファイルのウィンドウを見つけます
  • Match title, otherwise find window of same executeble
  • ウィンドウのタイトルに一致するか、実行ファイル名に一致。
  • カーソルをキャプチャ 任意
  • マウスポインタを映像に含める場合はチェック、含めたくない場合はチェックを外す。
  • マルチアダプターの互換性 無効
  • VRAM<-->RAM間のフレームコピーが行われ、パフォーマンスに影響するため基本的に無効。
  • ビデオカードが2枚以上(SLI等)の環境で正常にキャプチャされず真っ暗の場合に有効にする。
  • 最小化したウィンドウが映らない #
    • ウィンドウは最小化すると動作せず、静止画がキャプチャされる。
      キャプチャしたいウィンドウは最小化せず、開いたままにしておきましょう。
    フルスクリーンウィンドウが映らない #
    • ゲームキャプチャを使う
    • そもそもフルスクリーンウィンドウはアクティブでないと動作しない
    • UWPアプリの場合、ダウンロードとインストールでインストーラ版を選ぶか、手動インストール向けの設定を行う
    • Vulkanベースのゲームの場合は、OBS 25.0~を使用する
    フルスクリーンでプレイすると他のウィンドウが映らない #
    Chrome系ブラウザ・VSCodeなどが映らない #

    Chrome系のソフトウェアはレンダリングにANGLEを使用しているため、従来のキャプチャ方法ではウィンドウの内容を取得できず、真っ暗でマウスポインタのみ映る、という残念な状態になっていたが、
    ウィンドウキャプチャがデフォルトで対応したので、Windows 10 1903以降に更新して、OBS 25.0以降に更新すればよい。

    映らないからといってブラウザのハードウェアアクセラレーションを無効化するのはやめよう。

    Chrome #
    1. Choose ANGLE graphics backend chrome://flags#use-angleOpenGLに設定する。
    2. ウィンドウキャプチャでChromeのウィンドウを選択する。
    VSCode #

    起動時に使用するタスクバーやデスクトップのショートカットのリンク先に、--use-angle=glを加える。
    これはChrome系のソフトウェアなら基本的に動作する。

    "C:\Users\ユーザ名\AppData\Local\Programs\Microsoft VS Code\Code.exe" --use-angle=gl
    

    タスクバーで右クリック操作を繰り返すことでショートカットのプロパティにアクセスできるよ

    ゲームキャプチャ #

    項目 説明
    モード フルスクリーンアプリケーションをキャプチャ
  • フルスクリーンのアプリケーションを検出してキャプチャする。
  • 複数のフルスクリーンウィンドウを区別するには、"特定のウィンドウ"または"ホットキー"を使用する。
  • 特定のウィンドウをキャプチャ
  • ウィンドウタイトルや実行ファイルを参照してキャプチャするウィンドウを選択する。
  • ホットキーで前面のウィンドウをキャプチャ
  • 設定->ホットキー->ゲームキャプチャ(ソース名)->全面のウィンドウをキャプチャ/キャプチャを無効化に設定されたキーを押下してウィンドウを選択する。
  • ウィンドウ
  • ウィンドウキャプチャを参照
  • OBS 25.0~ Vulkanベースのゲームに対応
  • ウィンドウの一致優先順位
    SLI/Crossfire キャプチャモード(遅い) 無効
  • VRAM<-->RAM間のフレームコピーが行われ、パフォーマンスに影響するため基本的に無効。
  • ビデオカードが2枚以上(SLI等)の環境で正常にキャプチャされず真っ暗の場合に有効にする。
  • 強制的にスケーリングする 任意
  • ここでスケーリングしても、スケールフィルタ等を使用してもGPUが使用されるようです[要出典]。使いやすい方を選んでください。
  • 既にドットバイドットで、リスケールする必要が無い場合は無効にするべきでしょう。恐らく1920x1080に1920x1080のスケールフィルタを適用すると少しぼやけます。
  • 透過を許可 任意
  • 有効時はアルファチャンネルを使用できます。
  • キャプチャのフレームレートを制限する 任意
  • ゲーム側のfps設定が無制限や垂直同期(高速)でCPUの過負荷が発生する場合、キャプチャのfpsのみ制限します。
  • カーソルをキャプチャ 任意
  • マウスポインタを映像に含める場合はチェック、含めたくない場合はチェックを外す。
  • アンチチート互換性フックを使用する 有効
  • デフォルトで有効。特定のゲームでフックエラーが発生した場合有効。
  • (steamなどの)サードパーティの製のオーバーレイをキャプチャする 任意
  • 文字通りオーバーレイを含めたいときは有効にする。
  • ゲームに対しNVIDIAコントロールパネル等でFXAAを掛けている場合、有効にしないとキャプチャに反映されない。
  • フック速度 通常
  • 新しいウィンドウを見つけてフックしようとする間隔
  • 低速:~4s、通常:~2s、高速:~1s、最速:~0.2s
  • 通常が推奨され、早く設定することは推奨されません。
  • フルスクリーン使用時に別のウィンドウをキャプチャする #

    フルスクリーン下に隠れたウィンドウや最小化されたウィンドウの表示内容はOBSに反映されない。
    フルスクリーンを使用していない別のモニタ上またはWindows10の仮想デスクトップ上にウィンドウを置く。

    Ctrl + Win + D 新規仮想デスクトップを追加
    Ctrl + Win + <- -> 仮想デスクトップ間を移動
    Ctrl + Win + F4 仮想デスクトップを削除
    同じ名前のウィンドウを個別に認識させる #

    同じアプリケーション・ゲームをウィンドウまたはゲームキャプチャする際、ウィンドウタイトルや実行可能ファイルが同じため、任意のウィンドウをキャプチャすることが難しい、または録画中に任意のウィンドウから勝手に切り替わってしまうという問題がある。

    方法1 ホットキーで選択 #

    OBSの"ゲームキャプチャ"ソースの機能に"ホットキーで全面のウィンドウをキャプチャ"という機能がある。
    この方法を取るのが一般的である。

    1. ソースウィンドウに"ゲームキャプチャ"を追加
    2. モード"ホットキーで全面のウィンドウをキャプチャ"を選択
    3. 設定->ホットキー->ゲームキャプチャ(ソース名)->全面のウィンドウをキャプチャ/キャプチャを無効化にキーを設定

    ただし、この方法ではゲームキャプチャ1つ1つに別のキーを割り当てる必要があり、配信・録画開始時にそれらを行うのが非常に面倒である。

    方法2 MainWindowTitleを変更する #

    ホットキーで選択するのではなく、プログラムでウィンドウタイトルを連番等に変えてしまうという方法。
    Minecraftでシュルカー無限をする際に、複数アカウントからの視点を撮りたいというニッチな需要に応えるため、PowerShellでちょちょっと書いた。
    どちらもjavawプロセスのうち、指定した実行ファイルパスの場合のみウィンドウタイトルを変更する仕様。

    ゲームキャプチャ
    項目
    モード 特定のウィンドウをキャプチャ
    ウィンドウ (例) [javaw.exe]: Minecraft 1.13.2_1
    ウィンドウの一致優先順位 ウィンドウのタイトルに一致する必要があります
    #190106
    <#
    仕様:
    ・Minecraftバージョンの表記の保持に対応
    ・連番(同時起動数の想定)はの1桁(1-9)まで
    ・連番は起動時刻順
    2つ同時起動した後に連番を振り、2番目を終了して、新たに1つ起動した場合の例:
    Exist: Minecraft 1.13.2_1
    Rename: Minecraft 1.12.2_3
    #>
    
    #Minecraft用のjavaw.exeのパスを設定
    $JavawPath = "C:\openjdk-11.0.2\bin\javaw.exe"
    #SetWindowTextを使用
    $settxt = add-type -name settxt -passThru -memberDefinition @'
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern bool SetWindowText(IntPtr hwnd, String lpString);
    '@
    #カウントリセット
    $WindowCount = 0
    #javawをStartTime順でソート
    $JavawProcess = Get-Process javaw | Sort-Object StartTime
    #ForEach-Object
    $JavawProcess | %{
        #Pathが$JavawPathと一致する場合のみ実行
        if ($_.Path -eq $JavawPath)
        {
            #"MainWindowTitle_連番"にする為の条件分岐など
            #正規表現
            if ($_.MainWindowTitle -match "Minecraft.*_\d{1}$")
            {
                #前回実行時に番号が振られたウィンドウの場合は番号を変数に格納
                [int]$WindowCount = ($_.MainWindowTitle -split "_")[1]
                Write-Output "Exist: $($_.MainWindowTitle)"
            } else
            {
                #前回実行時に番号が振られたウィンドウの番号から連番を始めなければならない場合
                #連番を初めて振る場合
                #カウントアップ
                $WindowCount++
                #setWindowTextでMainWindowHandleに対し文字列を設定($nullへリダイレクト)
                $settxt::setWindowText($_.MainWindowHandle, "$($_.MainWindowTitle)_$WindowCount") >$null
                Write-Output "Rename: $($_.MainWindowTitle)_$WindowCount"
            }
        }
    }
    

    テキスト(GDI+) #

    設定項目が説明そのもので言及することが特にないので端折る。
    因みに、テキストファイルの文字コードはUTF-8の必要がある。メモ帳等で作成したShift-JIS(ANSI)は文字化けするので注意。

    ブラウザ #

    項目 説明
    ローカルファイル 任意
  • インターネットを利用するか、ローカルコピーのパスを指定する。
  • URL
    カスタムフレームレートを使用 無効
  • 有効時、映像とは別のフレームレートでレンダリングを行う。
  • OBSに音声を再ルーティングする 任意
  • 有効時、ブラウザソースで音声も取り込むことができ、OBS内のミキサーに仮想オーディオデバイスが追加されます。(OBS 24.0~
  • )
    カスタムCSS 任意
  • 追加のスタイルシートを適用できる。YouTubeのコメント等の装飾は主にこれが使用されている。
  • ソースの右クリックメニュー -> 対話でブラウザ内を操作できる。
  • スクロールができない場合は下記のように変更する。
    body { background-color: rgba(0, 0, 0, 0); margin: 0px auto; overflow: hidden; }
    
    body { background-color: rgba(0, 0, 0, 0); margin: 0px auto; }
    
  • Discordのオーバーレイを表示する
  • YouTubeのコメントを表示する
  • 配信に友人視点の映像を載せる
  • 表示されていないときにソースをシャットダウン 有効
  • ブラウザソースはリソース喰らいなので、出来れば有効。
  • シーンがアクティブになったときブラウザの表示を更新 任意
  • ソースを非表示から表示に戻した時にリロードする。
  • 現在のページを再読込
  • %APPDATA%\obs-studio\plugin_config\obs-browser\Cache の現在のページのキャッシュをフラッシュする。
  • Discordのオーバーレイを表示する #
    OBS

    https://www.youtube.com/watch?v=fuqmGOfiMNg&t=11147s

    Discordのデスクトップアプリケーションにはゲーム内にオーバーレイを表示する機能がある。
    しかし、それが表示されない環境であったり、表示したくないが配信に載せたい場合に役立つAPIをDiscordが用意してくれている。

    OBS
    1. デスクトップ版Discordを起動
    2. Discord StreamKit Overlayにアクセス
      ※アプリケーションが認識されない場合、"CAN'T CONNECT TO THE DISCORD CLIENT"と表示されます。
    3. Install for OBSをクリック
    4. 必要なウィジェットを選択します。ボイスチャットの様子を表示するには"VOICE WIDGET"を選択。
    5. Server、Voice Channelを選択します。テキストや色をカスタマイズすることもできます。
    6. OBSで#ブラウザソースを追加します。
    7. URLを貼り付けて、width、heightを合わせます。
    8. 必要であれば、下記のようなカスタムCSSで装飾します。
    • デスクトップ版Discordを起動中にOBSを起動すると、このソースが有効でなくても勝手にボイスチャンネルに接続してしまう仕様。
      録画と配信でシーンコレクションを分けるか、#ブラウザソースで"表示されていないときにソースをシャットダウン"を選択しておけば、勝手にボイスチャットへ接続してしまうのを防げる。

    • URLの後方は設定内容を表すので、それを流用すれば容易に複数ボイスチャンネルを同じ見た目にすることができる。

    https://streamkit.discordapp.com/overlay/voice/XXXXXXXXXX/XXXXXXXXXX?icon=true&online=true&logo=white&text_color=%23ffffff&text_size=14&text_outline_color=%23000000&text_outline_size=0&text_shadow_color=%23000000&text_shadow_size=0&bg_color=%231e2124&bg_opacity=0.95&bg_shadow_color=%23000000&bg_shadow_size=0&invite_code=zy5hZyW&limit_speaking=false&small_avatars=false&hide_names=false&fade_chat=0
    • 画像のようなデザインにしたい場合は、5.のカスタマイズを行っていないURLに対し、以下のCSSを使用します。
      どちらも4K用に作ってあるので、4KでもFHDでも無理矢理拡大する必要がないため、より綺麗に表示されます。

    ボイスチャンネル用

    @import url("https://fonts.googleapis.com/css?family=Noto+Sans+JP");
    .voice-state {
    background-image: linear-gradient(to left, rgba(204,204,204,0.01), rgba(204,204,204,0.3));
    padding: 16px 0 32px 16px;
    }
    .voice-container .voice-states .voice-state {
    height: 64px;
    }
    .voice-container .voice-states .voice-state .avatar {
    height: 64px;
    width: 64px;
    border: 6px solid transparent;
    }
    .voice-container .voice-states .voice-state .avatar.speaking {
    border-color: #43b581;
    }
    .voice-container .voice-states .voice-state .user .name {
    background-color: transparent !important;
    font-family: "Noto Sans JP" !important;
    font-weight: 1;
    font-size: 32px !important;
    line-height: 40px !important;
    color: #fff !important;
    border-radius: 0px;
    }

    ボイスチャンネル用(インジケータのデザイン変更版)

    @import url("https://fonts.googleapis.com/css?family=Noto+Sans+JP");
    .voice-container .voice-states .voice-state {
    height: 64px;
    background-image: linear-gradient(to left, rgba(204,204,204,0), rgba(204,204,204,0.5));
    padding-bottom: 12px;
    overflow: hidden;
    }
    .voice-container .voice-states .voice-state .avatar {
    height: 64px;
    object-fit: none;
    width: 2000px;
    border: none;
    border-left: 8px solid #7289da;
    border-radius: 0%;
    float: left;
    padding-bottom: 12px;
    }
    .voice-container .voice-states .voice-state .avatar.speaking {
    border-color: #43b581;
    background-image: linear-gradient(to left, rgba(67,181,129,0), rgba(67,181,129,0.3));
    }
    .voice-container .voice-states .voice-state .user {
    position: absolute;
    padding-left: 1em;
    }
    .voice-container .voice-states .voice-state .user .name {
    background-color: transparent !important;
    font-family: "Noto Sans JP" !important;
    font-weight: 1;
    font-size: 36px !important;
    line-height: 36px !important;
    color: #fff !important;
    }

    テキストチャンネル用

    /* チャット欄自体を大きく */
    .chat-container {
    font-family: "Noto Sans JP"!important;
    border-radius: none!important;
    height: 1000px!important;
    width: 1900px!important;
    overflow: hidden;
    }
    .chat-container .messages {
    height: 100%!important;
    }
    /* Discordチャンネル名を非表示 */
    .channel-name {
    display: none;
    }
    /* 背景透過 */
    .messages {
    background: transparent!important;
    }
    /* メッセージカードのデザイン */
    .chat-container .messages .message {
    max-height: none!important;
    display: block;
    background-image: linear-gradient(to right, rgba(204,204,204,0.1), rgba(204,204,204,0.4));
    margin: 3em;
    padding: 2em 4em;
    }
    /* 日時を消す */
    .chat-container .messages .message .timestamp {
    display: none;
    }
    /* 名前、投稿内容の文字の大きさ */
    .chat-container .messages .message .message-text,
    .chat-container .messages .message .username {
    display: block!important;
    font-size: 56px!important;
    line-height: 100px!important;
    font-weight: 600!important;
    }
    /* 投稿内容の色 */
    .chat-container .messages .message .message-text {
    color: #ddd!important;
    }
    YouTubeのコメントを表示する #

    YouTube Liveの仕様で、映像と一緒にコメントが表示されるのはモバイルのみ。
    デスクトップユーザはフルスクリーン状態ではコメントが表示されない。
    また、華を添える意味合いで装飾したコメントを映像に被せたい方も居るだろう。

    YouTubeのコメントはライブダッシュボードのチャット->チャットをポップアウトで表示されたウィンドウのURLを、OBSのブラウザソースに追加し、CSSを適用することで好みの見た目にカスタマイズして映像に合成できる。
    一からCSSを書けというのは酷だが、chatv2という有志によるGUIでYouTubeLiveのコメント用CSSを生成できるウェブツールがある。

    https://chatv2.septapus.com/

    画像のようなデザインにしたい場合は、以下のCSSを使用します(chatv2のみでは対応できない部分の修正も含まれます)。

    @import url("https://fonts.googleapis.com/css?family=Noto+Sans+JP");
    /* Background colors*/
    body {
    overflow: hidden;
    background-color: rgba(0,0,0,0);
    }
    /* Transparent background.*/
    yt-live-chat-renderer {
    background-color: transparent !important;
    /* padding: 24px 24px !important;*/
    }
    yt-live-chat-text-message-renderer {
    background-image: linear-gradient(to right, rgba(204,204,204,0.05), rgba(204,204,204,0.3));
    margin: 16px 24px !important;
    }
    yt-live-chat-author-chip #author-name {
    background-color: transparent !important;
    }
    /* Outlines */
    yt-live-chat-renderer * {
    font-family: "Noto Sans JP";
    font-size: 20px !important;
    line-height: 20px !important;
    }
    yt-live-chat-text-message-renderer #content,
    yt-live-chat-legacy-paid-message-renderer #content {
    overflow: initial !important;
    }
    /* Hide scrollbar. */
    yt-live-chat-item-list-renderer #items{
    overflow: hidden !important;
    }
    yt-live-chat-item-list-renderer #item-scroller{
    overflow: hidden !important;
    }
    /* Hide header and input. */
    yt-live-chat-header-renderer,
    yt-live-chat-message-input-renderer {
    display: none !important;
    }
    /* Reduce side padding. */
    yt-live-chat-text-message-renderer,
    yt-live-chat-legacy-paid-message-renderer {
    padding: 16px 24px !important;
    }
    yt-live-chat-paid-message-renderer #header {
    padding: 16px 24px !important;
    }
    /* Avatars. */
    yt-live-chat-text-message-renderer #author-photo,
    /*yt-live-chat-paid-message-renderer #author-photo,*/
    yt-live-chat-legacy-paid-message-renderer #author-photo {
    width: 48px !important;
    height: 48px !important;
    border-radius: 48px !important;
    margin-right: 24px !important;
    }
    /* アイコン画像自体も引き伸ばす */
    yt-live-chat-text-message-renderer #author-photo img.style-scope.yt-img-shadow {
    zoom: 2.0;
    }
    yt-live-chat-paid-message-renderer #author-photo img.style-scope.yt-img-shadow {
    zoom: 2.0;
    }
    /* Hide badges. */
    yt-live-chat-text-message-renderer #author-badges {
    display: none !important;
    vertical-align: text-top !important;
    }
    /* Badges. */
    yt-live-chat-text-message-renderer #author-name[type="owner"],
    yt-live-chat-text-message-renderer yt-live-chat-author-badge-renderer[type="owner"] {
    color: #ffd600 !important;
    zoom: 1.5;
    }
    yt-live-chat-text-message-renderer #author-name[type="moderator"],
    yt-live-chat-text-message-renderer yt-live-chat-author-badge-renderer[type="moderator"] {
    display: block;
    color: #5e84f1 !important;
    zoom: 1.5;
    }
    yt-live-chat-text-message-renderer #author-name[type="member"],
    yt-live-chat-text-message-renderer yt-live-chat-author-badge-renderer[type="member"] {
    color: #0f9d58 !important;
    zoom: 1.5;
    }
    /* Channel names. */
    yt-live-chat-text-message-renderer #author-name {
    color: #eeeeee !important;
    font-family: "Noto Sans JP";
    font-size: 28px !important;
    line-height: 48px !important;
    }
    /*モデレータの色*/
    yt-live-chat-text-message-renderer #author-name.moderator.style-scope.yt-live-chat-author-chip {
    color: #5e84f1 !important;
    }
    /* Messages. */
    yt-live-chat-text-message-renderer #message,
    yt-live-chat-text-message-renderer #message * {
    color: #cccccc !important;
    font-family: "Noto Sans JP";
    font-size: 36px !important;
    line-height: 48px !important;
    display: block; /*Messages Appear Under Author Name Instead Of Beside It*/
    /*padding: 12px 2px !important;*/
    }
    /* SuperChat/Fan Funding Messages. */
    yt-live-chat-paid-message-renderer #author-name,
    yt-live-chat-paid-message-renderer #author-name *,
    yt-live-chat-legacy-paid-message-renderer #event-text,
    yt-live-chat-legacy-paid-message-renderer #event-text * {
    color: #ffffff !important;
    font-family: "Noto Sans JP";
    font-size: 32px !important;
    line-height: 36px !important;
    }
    yt-live-chat-paid-message-renderer #purchase-amount,
    yt-live-chat-paid-message-renderer #purchase-amount *,
    yt-live-chat-legacy-paid-message-renderer #detail-text,
    yt-live-chat-legacy-paid-message-renderer #detail-text * {
    color: #ffffff !important;
    font-family: "Noto Sans JP";
    font-size: 28px !important;
    line-height: 32px !important;
    }
    yt-live-chat-paid-message-renderer #content,
    yt-live-chat-paid-message-renderer #content * {
    color: #ffffff !important;
    font-family: "Noto Sans JP";
    font-size: 28px !important;
    line-height: 32px !important;
    }
    yt-live-chat-paid-message-renderer {
    margin: 8px 0 !important;
    }
    yt-live-chat-legacy-paid-message-renderer {
    background-color: #0f9d58 !important;
    margin: 8px 0 !important;
    }
    yt-live-chat-text-message-renderer a,
    yt-live-chat-legacy-paid-message-renderer a {
    text-decoration: none !important;
    }
    yt-live-chat-text-message-renderer[is-deleted],
    yt-live-chat-legacy-paid-message-renderer[is-deleted] {
    display: none !important;
    }
    yt-live-chat-ticker-renderer {
    background-color: transparent !important;
    box-shadow: none !important;
    }
    yt-live-chat-ticker-renderer {
    display: none !important;
    }
    yt-live-chat-ticker-paid-message-item-renderer,
    yt-live-chat-ticker-paid-message-item-renderer *,
    yt-live-chat-ticker-sponsor-item-renderer,
    yt-live-chat-ticker-sponsor-item-renderer * {
    color: #ffffff !important;
    font-family: "Noto Sans JP";
    }
    yt-live-chat-mode-change-message-renderer,
    yt-live-chat-viewer-engagement-message-renderer,
    yt-live-chat-restricted-participation-renderer {
    display: none !important;
    }
    @keyframes anim {
    0% { opacity: 0; }
    0.6578947368421052% { opacity: 1; transform: none;}
    99.3421052631579% { opacity: 1; transform: none;}
    100% { opacity: 0; }
    }
    yt-live-chat-text-message-renderer,
    yt-live-chat-legacy-paid-message-renderer {
    animation: anim 41600ms;
    animation-fill-mode: both;
    }
    配信に友人視点の映像を載せる #

    友人に限定公開または公開でライブ配信して貰い、そのURLを"ブラウザ"ソースに取り込めば良い。
    ただし、許可なく他人の動画を使用する権利はないことだけ要注意だ。垢BANチキンレースをしたい方はどうぞ。

    1. 以下のURLの末尾の英数字の羅列を友人の配信URLのものに置き換える。
      https://www.youtube.com/embed/zF92Ok4GQaE?autoplay=1
      

      再生ページで実行すると勝手に置き換えてくれるブックマークレット

      javascript:var title = window.location.href;if (title.indexOf('https://www.youtube.com/watch') == 0) { (function(){ window.open(title.replace('watch?v=','embed/')+'?autoplay=1'); })(); }
      
    2. "ブラウザ"ソースを追加する。
    3. URLを入力し、幅と高さをキャンバス解像度に合わせる。

    ブラウザ内の操作は ソースの右クリックメニュー->対話 で行えます。

    メディアソース #

    項目 説明
    ローカルファイル 有効
  • 基本的に有効。ローカルファイルのみ対応。
  • mp4, ts, mov, flv, mkv, avi, mp3, ogg, aac, wav, gif, webmに対応。
  • # 同じコーデックのファイルであれば、txtに記述された複数のメディアをffmpegのconcatで連続して再生できる。
    # txtはメディアと同じディレクトリに配置
    
    ffconcat version 1.0
    file 'A_Quiet_Thought.mp3'
    file 'Absention.mp3'
    file 'Acoustic_Circles.mp3'
    file 'All_Hail_the_Queen.mp3'
    file 'Angelic_Forest.mp3
    
    無効
  • (高度なオプション)無効時、ffmpeg demuxerを使用可能。
    現在利用可能なフォーマット(ビルドに依存)(空欄で自動選択):
    aa, applehttp, apng, asf, concat, flv(RTMP), gif, image2, mov, mp4, 3gp, QuickTime, mpegts, mpjpeg...
  • 繰り返し 任意
  • 有効時、無限にループ再生する。
  • ソースがアクティブになったとき再生を再開する 任意
  • 有効時、ソースを再表示すると最初から再生される。
  • 無効時はミュートのような挙動になる。
  • 可能な場合ハードウェアデコードを使用 有効
  • ffmpeg同梱のffplayと同様、全ての動画がハードウェアデコードに対応している訳ではない模様(ALL-I等)。
  • 再生終了時にソースを非表示にする 任意
  • 有効時、再生が終わったら動画を非表示にします。
  • 無効時、再生後は最後のフレームの静止画になります。
  • アクティブでないときにファイルを閉じる 有効
  • 有効時、ソースが非表示状態であればファイルを編集可能。ただし、再表示に若干のタイムラグが生じる場合があります。
  • 速度(パーセント) 任意
  • 100で等倍速。
  • YUV色範囲 自動
  • 正しくないcolor rangeを指定すると変な色になります(Limited RangeをFull Rangeとして扱うと明るく白っぽく、FullをLimitedで扱うと暗く黒っぽくなる)。
  • OBSだけでBGMを再生・曲名を表示 #

    メディアソースにはffmpegのconcatが組み込まれていることは解説したが、それを利用して、曲名が書かれた映像を流せば、BGMは勿論、工夫すれば曲名もOBS単体で流せる。

    OBS単体でBGMを流すことには理由がある。
    メディアソースはOBS内の仮想音声デバイスとして機能するため、自分が聴きたくない場合、編集時にデスクトップ音声と一緒になっていては困る場合等に有効だ。

    曲名とBGMのaviを一括生成し、OBSのメディアソースに対応したinput.txtを出力するPowerShellスクリプトを書いた。

    1. ffmpegをインストール
    2. 下記スクリプトを拡張子.ps1で保存。
      日本語環境において、Windows PowerShellの場合はShift-JIS(ANSI)、PowerShell Coreの場合はUTF-8で保存。
      #190508
      #ユーザ設定
      $Settings =
      @{
      #Input,Output指定: Output\input.txt Inputのみ指定: Input\input.txt
      #BGM素材入力ディレクトリ
      Input = "C:\Users\sbn\Music\audiolibrary"
      #Input = "C:\Users\sbn\Music\minecraft\sounds\music"
      #Input = "C:\Rec\audiolibrary"
      #avi出力ディレクトリ
      Output = "C:\Rec\audiolibrary"
      #Output = "C:\Rec\minecraft"
      #解像度
      Resolution = "640x40"
      #フォントサイズ
      FontSize = 32
      #フォントファイル
      FontFile = 'C\://Users/sbn/Documents/fonts/minecraft_font_by_pwnage_block_d37t6nb.ttf'
      }
      function Out-ConcatTxt
      {
      param
      (
      [string]$Dir
      )
      Write-Output "$Dir\input.txt"
      #ファイルリストをシャッフルし、OBSのメディアソース(ffmpeg concat)で使用できるフォーマットでtxtに出力
      "ffconcat version 1.0`r`nfile '$(((Get-ChildItem "$Dir/*.*" -Recurse).Name | Get-Random -Count ([int]::MaxValue)) -join "'`r`nfile '")'" | Out-File "$Dir\input.txt" -Encoding UTF8
      }
      #出力ディレクトリがなければ作成
      if (!(Test-Path $Settings.Output))
      {
      $null = New-Item -Path $Settings.Output -ItemType Directory -Force
      }
      if ($Settings.Output)
      {
      #ソースディレクトリ下の全てのファイルに対し、その曲名が表示されるRGBA動画を作成
      foreach ($AudioFile in Get-ChildItem "$($Settings.Input)/*.*" -Recurse)
      {
      $AudioFile.Name
      #既に存在する場合は上書きしない
      ffmpeg -n -v quiet -i "$($AudioFile.FullName)" -f lavfi -i "color=c=0x00000000:s=$($Settings.Resolution):r=1,format=pix_fmts=rgba" -vf "drawtext=fontsize=$($Settings.FontSize):fontcolor=0xe0e0e0:fontfile='$($Settings.FontFile)':text='$($AudioFile.BaseName)'" -c:a copy -c:v utvideo -pred median -shortest -pix_fmt rgba "$($Settings.Output)\$($AudioFile.BaseName).avi"
      }
      Out-ConcatTxt -Dir $Settings.Output
      } else
      {
      Out-ConcatTxt -Dir $Settings.Input
      }
    3. 設定を行う
      • Input: BGM素材が詰まってるディレクトリ(フォルダ)を指定します。
      • Output: Audio:BGM、Video:BGMのファイル名なaviファイルの出力先を指定します。
      • Input、Output両方とも指定した場合: Outputの中にOBSに登録するinput.txtが出力されます。
      • Inputのみ指定した場合: Inputの中にinput.txtが出力されます。
      • input.txt内に記述されるBGMの再生順は、このスクリプトを実行する度にランダムです。aviの並びを再度シャッフルしたい場合は、InputにOutputのパス(aviディレクトリ)を書き、Outputを例にならって#コメントして下さい。
      • Resolution、FontSize、FontFileは任意に設定して下さい。
      • FontFileのパスのフォーマットは、通常のWindowsの表記と異なるため注意して下さい。
      $Settings =
      @{
          #Input,Output指定: Output\input.txt Inputのみ指定: Input\input.txt
          #BGM素材入力ディレクトリ
          Input = "C:\Users\sbn\Music\audiolibrary"
          #Input = "C:\Users\sbn\Music\minecraft\sounds\music"
          #Input = "C:\Rec\audiolibrary"
      
          #avi出力ディレクトリ
          Output = "C:\Rec\audiolibrary"
          #Output = "C:\Rec\minecraft"
      
          #解像度
          Resolution = "640x40"
      
          #フォントサイズ
          FontSize = 32
      
          #フォントファイル
          FontFile = 'C\://WINDOWS/Fonts/consola.ttf'
      }
      
    4. powershell(5.1、6.1.1で動作確認)でスクリプトを実行
      Win - R -> powershellでWindows PowerShellを起動。
      #絶対パスの場合
      C:\DTV\pwsh\AudioMediaSource.ps1
      
      #相対パスの場合
      .\AudioMediaSource.ps1
      
      #外部から実行する場合
      powershell .\AudioMediaSource.ps1
      pwsh .\AudioMediaSource.ps1
      
    OBSで動画編集する #

    こいつ何言ってるんだ、と思うかもしれないが先日も私はFFmpegで動画編集したし、
    一つ上の項を実践された方はもう既にOBS、FFmpegで動画編集している(???)。

    メディアソースにはffmpegのconcatが組み込まれていると言ったが、これにはもう少し機能が含まれている。

    以下のようなテキストファイルを動画ファイルと同じディレクトリに置いて、それをメディアソースに追加すると動画編集(カット・連結)が始まる。
    同じコーデック・解像度・フレームレート・色空間でないと正しく動作しない(FFmpegで再エンコードなしで動画編集出来る条件と同じ)。

    #これ忘れない
    ffconcat version 1.0
    
    #コメントは
    file 'VNSG1857.MOV'
    
    file 'OTWL2920.MOV'
    inpoint 5
    
    file 'TWZZ6601.MOV'
    outpoint 9
    
    #なんかいい感じのシーン
    file 'TWZZ6601.MOV'
    inpoint 20
    outpoint 29
    
    file 'VVFG0977.MOV'
    
    file 'GNFC3758.MOV'
    
    #みたいに使えるよ
    

    イメージ

    file 'TWZZ6601.MOV'
    inpoint 20
    outpoint 29
    
                              |<--- Play --->|
    +-'TWZZ6601.MOV'----------+--------------+-------
    0                    inpoint 20    outpoint 29
    

    ソースが条件に合わなかったり、更に凝ったことをしたい人はffmpegのfilter_complexで頑張ってください。
    複数解像度の動画に、それぞれのソースによってフィルタ処理を変えられるので、編集ソフトの簡易的な部分ならffmpegだけで出来るよ。
    例によってGUIが無いので、史上最も軽い動画編集ソフトだよ![要出典]

    カラーバー・カウンターを表示する #

    OBSのメディアソースはほぼFFmpegですが、ffmpegには元々SMPTEカラーバーやテストソースを表示する機能があるので、それをメディアソースで指定すればそのまま使えました。

    項目 説明
    メディアソース
    ローカルファイル 無効
  • ffmpeg demuxerを使用可能
  • 入力 smptehdbars OBS
    testsrc OBS
    testsrc2 OBS
    color=Green 使用可能な値はドキュメントOBS
    フォーマット lavfi Libavfilter
    全画面に綺麗に拡大する
    ソースの右クリックメニュー -> フィルタ -> スケーリング/アスペクト比
  • ニアレストネイバー補間で一切滲ませることなく拡大する。
  • 解像度が分かっていれば、1920x1080等を指定しても良い。
    OBS
  • スケールフィルタ ポイント
    解像度 基本(キャンバス)解像度
    testsrcからカウンターをつくる
    ソースの右クリックメニュー -> フィルタ -> クロップ/パッド
  • 不要な部分をクロップで取り除き、カラーキーで背景を抜く。
  • フィルタのプレビューウィンドウでは綺麗に処理されていないように見えるが、スケールフィルタが"無効化"であれば問題ない。
    OBS
  • 相対的 有効
    128
    94
    36
    94
    ソースの右クリックメニュー -> フィルタ -> カラーキー
    色キーの種類
    ソースの右クリックメニュー -> フィルタ -> カラーキー
    色キーの種類
    ソースの右クリックメニュー -> フィルタ -> カラーキー
    色キーの種類 カスタム
    キーの色 #ffff00(#ffffff00)
    ソースの右クリックメニュー -> フィルタ -> カラーキー
    色キーの種類
    ソースの右クリックメニュー -> フィルタ -> カラーキー
    色キーの種類 カスタム
    キーの色 #000000(#ff000000)

    映像キャプチャデバイス #

    項目 説明
    デバイス 任意
  • DirectShowデバイス入力に対応します。
  • Webカメラやキャプチャボードのドライバや、仮想キャプチャデバイスがインストールされていれば、ここにデバイス名(FaceRig、AVerMedia、Elgato、Blackmagic等)が表示されます。
  • OBS使用時はキャプボ付属のアプリケーションを使用しない。
  • 表示中でない場合非アクティブ化する 有効
  • チェックすると、表示していないときにデバイスはオフになります。
  • 映像だけでなく音声も同様です。
  • 解像度/FPSタイプ カスタム
  • カスタムに設定すると、下の項目がアクティブになります。
  • 解像度 任意
  • キャプチャデバイス側の解像度に合わせる。
  • キャンバス解像度と合わない場合、OBS側のフィルタ等で対応する。
  • FPS 出力FPSに合わせる
    YUV色空間 自動
  • 正しくないcolor rangeを指定すると変な色になります(Limited RangeをFull Rangeとして扱うと明るく白っぽく、FullをLimitedで扱うと暗く黒っぽくなる)。
  • YUV色範囲 自動
    音声出力モード 音声のみをキャプチャ
  • これ以外に設定されている場合、音声は一般的なデスクトップ音声デバイスからキャプチャされる可能性があります。
  • BlackMagick DeckLinkはOBS、FFmpegと親和性が高いので個人的にオススメなキャプチャボード。

    画像 #

    項目 説明
    表示中でない画像は読み込まない 有効
  • チェックしておくと、非表示時にメモリを開放します。
  • ソースの右クリックメニュー #

    ソースやプレビューウィンドウを選択し右クリックすると表示されるメニューです。

    OBS
    項目 説明
    選択したアイテムのグループ化
  • ソースを束ねて一括でレイアウトを移動したり、フィルタを適用したり、纏めて表示/非表示を切り替えられる。
  • ショートカット操作は普段お使いのエクスプローラと同様です。
  • キャンバス解像度が変わってもレイアウトが崩れない相対的なソースをつくる
  • コピー
  • ソースをコピーします。
  • 貼り付け(参照)
  • コピーしたソースを貼り付けます。
  • プロパティやフィルタの内容はコピー元と連動します。
  • 変換やスケールフィルタは連動しません。
  • 貼り付け(複製)
  • コピーしたソースを貼り付けます。
  • プロパティやフィルタの内容がコピー元と連動せず、コピー元とは別のソースとして機能します。
  • ゲームキャプチャはその性質上、参照しか使えません(手動での複製も非推奨)。
  • フィルタをコピーする/貼り付ける
  • フィルタのみ別のソースに適用できます。
  • 色の設定
  • ソースやグループの項目を任意の色で色分けできます。
  • 名前を変更
  • ソース名を変更します。
  • 削除
  • ソースを削除します。
  • 順序
  • ソースレイヤーの表示順を変更できます。
  • 上のソースほど優先的に前面に表示され、下のソースを隠します。
  • 変換
  • ソースの正確な位置調整を行います。
  • ミキサーを非表示
  • 音声ミキサーから隠しますが、オーディオの詳細プロパティには存在します。
  • 映像キャプチャデバイスメディアソースで有効。
  • インターレース解除
  • ソースの正確な位置調整を行います。
  • 一部のビデオカメラの映像や、インターレースな(縞々の)映像ソースを、現在一般的なプログレッシブに補間します。
  • 60iの場合、yadifでは30p、yadif 2xでは60pになります。
  • 出力サイズ変更(ソースサイズ)
  • 選択されたソースが基本(キャンバス)解像度、出力(スケーリング)解像度でない場合に項目がアクティブになります。
  • 自分が何をしているのか分からない場合は押すべきではありません。
  • スケールフィルタ
  • スケールアルゴリズムを選択できます。
  • "無効化"を選択した場合、文字通り無効化されることはなく、設定 -> 映像恐らく有無を言わさずバイリニアフィルタが適用されます。
  • 文字通りの無効化、ドット絵などを全く滲ませることなく拡大したい場合はポイントを選択します。
  • 小さなソースを大きく拡大する場合はバイキュービック又はランチョスを選択します。
  • 大きなソースを小さく縮小する場合はエリアを選択します。
  • 全画面プロジェクター
  • 選択したソースを全画面でプレビューします。
  • Escまたは右クリックメニューから"閉じる"を選択して終了します。
  • メインのプレビュー、番組ウィンドウでも同じ機能が使えます。
  • 遅延は比較的小さいので、OBSに表示された画面でプレイしつつ、オーバーレイのように表示されたコメントを見て配信、という方法も一応可能です。
  • ウィンドウプロジェクター
  • 選択したソースをウィンドウでプレビューします。
  • メインのプレビュー、番組ウィンドウでも同じ機能が使えます。
  • 対話
  • ブラウザソースで使用できる対話的インターフェイスです。
  • 文字を打ち込んだり、クリックを発生させることができます。
  • フィルタ
  • 映像や音声を調整します。
  • プロパティ
  • ソース毎の各項目を参照
  • 変換 #

    ソースの拡大/縮小、位置合わせをピクセル単位で行います。

    プレビューウィンドウ上で赤い枠を操作し同様の操作を直感的に行えますが、思い通りの位置にならなかったり、適切でないスケーリングによってぼやける場合があるため、こちらを使用することを推奨します。

    ぼやけたり滲まないよう、拡大/縮小を行う場合は縦横が2xや1/2になるようにしましょう。スケールフィルタが"ポイント"の場合のみ、一切滲むことなく変換できます。

    慣れればスタジオモードを使用しなくても、ソースの位置調整の様子が配信に映らないよう操作できます。

    ※OBS 25.0から、ソースのロック(鍵マーク)を解除しないと"変換"の大半の操作ができなくなっています。

    変換をリセット #

    ソースの拡大/縮小、回転や位置合わせの内容全てをリセットし、左上に元の大きさで戻します。
    変換の設定を弄る前に、必ず実行しておくと良いでしょう。

    変換の編集 #
    シーン アイテム 変換
    項目 説明
    位置 "位置揃え"の角の座標
    回転 "位置"を中心に回転
    大きさ ソースの大きさ
    位置揃え "位置"・"回転"の起点を赤枠の点 から選択

    既定の状態

    OBS

    左上を起点に"位置"で横軸64px・縦軸48pxの余白を設け、"大きさ"で2xした例。
    スケールフィルタを"ポイント"に設定し、1/2や2倍の値に拡大縮小すると、滲みを軽減できます。
    例: 640x360 -> 1280x720

    OBS
    シーン アイテム 変換
    項目 説明
    バウンディングボックスの種類 境界なし バウンディングボックスがない既定の状態
    境界まで引き伸ばす ソースの縦横比を無視して、指定した大きさに引き伸ばす
    境界の内側に合わせる ソースの縦横比を維持して、幅・高さのいずれも指定した大きさからはみ出さないように拡大縮小する
    境界の外側に合わせる ソースの縦横比を維持して、幅・高さの片方だけは指定した大きさからはみ出さないように拡大縮小する
    境界の幅に合わせる ソースの縦横比を維持して、幅が常に指定した値に合うように拡大縮小する
    境界の高さに合わせる ソースの縦横比を維持して、高さが常に指定した値に合うように拡大縮小する
    最大サイズのみ "大きさ"の値を維持して、余白の大きさを指定する
    バウンディングボックスの配置
    バウンディングボックスのサイズ

    右下に配置したいので、"位置揃え"を右下、"位置"はキャンバスサイズに合わせて1920,1080。
    ※右上なら1920,0、左下なら0,1080

    1280x720のソースに対し、1440x810のバウンディングボックスで余白をつくる。

    OBS

    4K2K 3:2のソースの縦横比を維持して、左右に黒帯を追加する例。
    画面に合わせると同じ。

    OBS

    4K2K 3:2のソースの縦横比を維持して、上下をクロップする例。

    OBS
    シーン アイテム 変換
    項目 説明
    クロップ ソースの余計な部分を上下左右から相対位置で切り取る

    バウンディングボックスで余白を作っている場合、サイズの調整が必要になる。

    OBS
    画面に合わせる #

    画面の大きさに合わせて拡大/縮小します。
    拡大/縮小のアルゴリズムは下記の"スケールフィルタ"に従います。
    後述の"スケールフィルタ"が"ポイント"の場合のみ、一切滲むことなく変換できます。

    OBS
    画面中央に置く #

    ソースの縦横比・大きさを保持して、キャンバスの中央に配置します。

    OBS

    フィルタ #

    OBSには豊富なフィルタが用意されています。23.0~多くのフィルタが追加されました。
    複数のフィルタを重ね掛けすることもできます。

    エフェクトフィルタ #
    項目 説明
    LUTを適用
  • ルックアップテーブルを適用し、カラーグレーディング等を行える。
  • イメージ マスク/ブレンド
  • ソースを切り抜き用の画像と合成します。
  • 画像ファイル自体にアルファマスクを使用するためにはアルファマスク(アルファチャンネル)を使用します。
  • カラーキー
  • クロマキーと同様、映像の背景を抜きます。
  • 精度が悪いと感じる場合はクロマキーを使用します。
  • クロップ/パッド
  • 映像ソースの不要な部分を上下左右からカットします。
  • 16:9を21:9にクロップする時など、非常に便利です。位置合わせはソースの右クリックメニュー -> 変換で行うとズレなくぼやけたりせずに調整できます。
  • クロマキー
  • 映像の背景を抜きます。
  • より良い結果を得るために、明るい色の背景色を使用してください。
  • シャープ
  • 映像をわずかにシャープにします。
  • 特に配信時の低ビットレート下では品質が大きく低下する場合があります。使用するとしてもダウンスケール時に少しシャープにする程度でしょう。
  • スクロール
  • 映像を連続してスクロールします。
  • 流れる文字やカラーバーに適用するとダサくて面白いでしょう。
  • スケーリング/アスペクト比
  • 選択されたソースに対し、デフォルトのスケーリングフィルタを上書きします。
  • レンダリング遅延
  • 少しだけ映像を遅らせることができる
  • 音ズレ(音が遅れる)する場合の調整に役立ちます。
  • 色補正
  • カラーコレクションを行います。
  • ガンマ、コントラスト、輝度、彩度、位相、透明度等を弄れます。
  • 間違った色空間(color space)や色範囲(color range)の設定を無理矢理補正する為のものではありません。
  • LUTを適用 #

    Davinci Resolve等から出力できる3D LUT.cubeが25.0で対応した。

    OBS OBS

    PhotoshopやGIMPを駆使してOBS用のLUTを作成するレガシーな手順。

    OBSのルートディレクトリ内の\data\obs-plugins\obs-filters\LUTs\original.png

    OBS

    LUTを適用したいシーンのスクリーンショットと合成

    OBS

    GIMPやDavinci Resolveでカラーグレーディング

    OBS

    合成したLUTの部分のみを切り出し、OBSのApply LUTフィルタに登録

    OBS
    スケーリング/アスペクト比 #
    スケールフィルタ
  • スケールアルゴリズムを選択します。
  • ドット絵や図など滲んではいけないもの、YouTubeでの配信映像の再エンコード品質の改善を行いたい場合は"ポイント"を使用します。
  • 小さなソースを大きく拡大する場合はバイキュービック又はランチョスを選択します。
  • DSRでオーバーサンプリングされたゲームなど、キャンバス解像度より大きなソースを小さく縮小する場合はエリアを選択します。
  • 解像度
  • "基本(キャンバス)解像度"を使用すると、異なるキャンバスサイズを持ったプロファイルで同じシーンを共有できます。
  • ソースがキャンバスの縦横比(16:9)でなく伸びてしまう場合、ソースの右クリックメニュー -> 変換を使います。
  • 音声フィルタ #
    推奨フィルタ (適用順)
    項目 説明
    ノイズゲート
    Noise Gate
  • 音量が閾値を超えた場合ゲートを開放することで、環境音やノイズフロアが常に録音される状態を防ぐ。Discordの入力感度のようなもの。
  • ただし、閾値を超えている時(喋っている間など)は環境音含め全ての音が入る。
  • エキスパンダーのゲートに比べて確実にノイズをカットできる。
  • オーディオインターフェイスに機能がない場合、環境音が不必要なマイク入力に対して使用する。
  • 閉鎖閾値
    Close Threshold
  • 開放閾値を最大0.00 dBに、閉鎖閾値を最小-96.00 dBにし、開放閾値を適切に声が入るまで小さくしてから、閉鎖閾値を大きくする。
  • 開放閾値は語頭とノイズの区別、閉鎖閾値は語尾とノイズの区別を目的に調整する。
  • 音声ミキサーのレベルメーターやオーディオの詳細プロパティのモニター機能を使って調整するとよい。
  • SNRが小さい(ノイズに対して信号が小さい/信号に対してノイズが大きい)とノイズゲートだけではどうしようもない場合がある(例: 青軸キーボードの近くにマイクがあり、口から遠い)。改善方法は以下の通り。
    1. 静音キーボードの導入など、ノイズ源を消す
    2. ノイズ源からマイクの距離を離す
    3. 口を近づける(近接効果に注意)
    4. 裏側の音を拾いにくい指向性マイクを導入する
    5. ノイズ抑制を使う(音質劣化に注意)
    開放閾値
    Open Threshold
    動作開始時間
    Attack Time
  • 開放前のフェードインの時間
  • デフォルトの25 msでは、開放閾値に余裕がなく語頭にアクセントがないと子音が掠れてしまう場合がある。5 msがオススメだが、実際に聞いてブチブチ言わないか確認が必要。
  • 保持時間
    Hold Time
  • 閉鎖閾値に達し、且つ保持時間を超えた場合に閉鎖される。デフォルト値200 msで問題ない。
  • 語尾が切れるからと保持時間を大きくするより、閉鎖閾値を適切に設定した方がよい。
  • 解除時間
    Release Time
  • 閉鎖後のフェードアウトの時間
  • デフォルトの150 msでは語尾が不自然に切れる場合があるので、SNRが大きい環境なら1000 ms(1秒)に設定するとよい。
  • ノイズ抑制
    Noise Suppression
  • 音声を加工してノイズを目立たなくする。
  • ノイズにも声にも同じ周波数が含まれているため、音は劣化する。できる限り使わないに越したことはない。
  • SNRが小さい(ノイズに対して信号が小さい)マイク入力を誤魔化して使う場合のみ使用する。
  • 方式
  • Speex
    libspeexに基づくノイズ抑制アルゴリズム。低品質で低負荷。
  • RNNoise
    AIベースのノイズ抑制アルゴリズム。高品質で高負荷。
  • NVIDIA Noise Removal
    RTX Voiceと異なり、RTX GPUでのみ使用できる。高品質。
    NVIDIA Display Driver 456.38以降とAudio Effects SDKが必要。Studio Driver 462.31でも動作した。

  • Suppression Level
  • ノイズ抑制が掛かる低い入力レベルの閾値。

  • Suppression Intensity
  • ノイズ抑制の強度。
  • リミッター
    Limiter
  • 大きな音を強く抑制し、叫び声などの過大入力のレベルオーバーをできる限り防ぐ。
  • オーディオインターフェイスにこの機能がない場合使用する。
  • 閾値
    Threshold
  • リミッターが掛かる閾値。
  • Attack
  • 設定項目はなく1msにハードコードされているため、Attackを調整したいならコンプレッサーを使う。
  • リリースタイム
    Release
  • リミッターが解除されてから元の音量にフェードアウトするまでの時間
  • 項目 説明
    VST 2.x プラグイン VST 2.x Plug-in
  • DAWやオーディオインターフェースのVST 2.x プラグインが対応していれば使用できる。
  • 拡張子*.vst, *.dll, *.so, *.oが以下のディレクトリで探索され、見つかったものが選択できる。インストーラのないVSTもこの中に配置されていれば使用できる。
    • MacOS
      /Library/Audio/Plug-Ins/VST/
      ~/Library/Audio/Plug-ins/VST/
      
    • Windows
      C:\Program Files\Steinberg\VstPlugins\
      C:\Program Files\Common Files\Steinberg\Shared Components\
      C:\Program Files\Common Files\VST2
      C:\Program Files\Common Files\VSTPlugins\
      C:\Program Files\VSTPlugins\
      
    • Windows (obs32.exe且つVSTが32-bitのとき)
      C:\Program Files (x86)\Steinberg\VstPlugins\
      C:\Program Files (x86)\Common Files\Steinberg\Shared Components\
      C:\Program Files (x86)\Common Files\VST2
      C:\Program Files (x86)\Common Files\VSTPlugins\
      C:\Program Files (x86)\VSTPlugins\
      
    • Linux
      VST_PATH
      /usr/lib/vst/
      /usr/lib/lxvst/
      /usr/lib/linux_vst/
      /usr/lib64/vst/
      /usr/lib64/lxvst/
      /usr/lib64/linux_vst/
      /usr/local/lib/vst/
      /usr/local/lib/lxvst/
      /usr/local/lib/linux_vst/
      /usr/local/lib64/vst/
      /usr/local/lib64/lxvst/
      /usr/local/lib64/linux_vst/
      ~/.vst/
      ~/.lxvst/
      
    コンプレッサー
    Compressor

    エキスパンダー
    Expander
  • コンプレッサー: 閾値より大きい音声を減衰してダイナミックレンジを小さくし、マイク入力などを聞き取りやすくする。
  • エキスパンダー: 閾値より小さい音声を減衰してダイナミックレンジを大きくする。それを利用して、ノイズゲートのような役割を持たせることもできる。
  • エキスパンダーのゲートは、ノイズゲートフィルタに比べ不完全だが自然な効果を適用できる。
  • オーディオインターフェイスにこの機能がない場合使用する。
  • プリセット
    Presets
  • Expander: 通常のプリセット。
  • Gate: Thresholdを下回るレベルに大きなRatioを適用することで、ノイズゲートと同様の効果を得るプリセット。
  • 比率
    Ratio
  • Thresholdを超えた音を圧縮する比率。
  • コンプのデフォルトでは10.00:1、つまりThresholdより大きい音はAttackを経て1/10に減衰される。
  • エキスパンダーではThresholdより小さい音はAttackを経てRatio分減衰される。
  • 閾値
    Threshold
  • Ratioが適用される閾値レベル。
  • Thresholdを超えない限り音の劣化は発生しない。
  • アタックタイム
    Attack
  • Thresholdを超えてからAttackを経てRatioの減衰が完全に適用される。Thresholdに戻ってからReleaseを経てレベルが元に戻る。
  • コンプはAttackを遅くReleaseを早くすると弱く、Attackを短くReleaseを長くすると強く掛かる。
  • エキスパンダーをゲートとして利用する場合、ノイズゲートと同様Releaseを1000ms程度にすると語尾が切れなくてよいかもしれない。
  • 用途に適したコンプの解説は検索エンジン上のDTMできるマンに丸投げする。
  • リリースタイム
    Release
    出力ゲイン
    Output Gain
  • フィルタ後の出力ゲイン
  • サイドチェーン/ダッキングソース
    Sidechain/Ducking Source
  • フィルタを掛けるトラックではなく、別の音声トラックで圧縮率を決める。
  • 選択した別の音声トラックがThresholdを超えると、Ratio~Output Gainがこの音声トラックに適用される。
  • ゲーム音声やBGMにコンプを適用し、サイドチェーンにマイク入力などを適用する、というような用途。
  • Detection
  • RMS: RMS値を参照して適用される。最大10msの遅延がある。
  • Peak: 音声のピークレベルを感知して瞬時に適用される。
  • ゲイン
    Gain
  • 音量を単純に大きくする。
  • 基本的にOSの設定、マイクやオーディオインターフェース側で適切な音量になるように調整するべき。
  • 使用するときはピークレベルがオーバーしないようリミッターやコンプレッサーを掛けることを推奨する。
  • 映像の遅延 (非同期)
    Video Delay (Async)
  • 映像と音声の両方を含むソースで映像と音声の同期を解除し、映像のみを遅延させる。
  • 主に映像キャプチャデバイスソースで音ズレの修正のために使用する。
  • 極性を反転する
    Invert Polarity
  • 音の位相を反転する。
  • オーディオインターフェイスにこの機能がない場合使用する。
  • Compressor | Groove Agent SE | steinberg.help

    キャンバス解像度が変わってもレイアウトが崩れない相対的なソースをつくる #

    プロファイル -> 設定 -> 映像 で指定したキャンバス解像度がプロファイルの切り替えによって変更されると、折角つくったレイアウトも崩れてしまう。
    ここに書かれているように、基本(キャンバス)解像度と出力(スケーリング)解像度は同じが好ましい。
    よって、共通のシーンコレクションを異なる解像度のプロファイルで使用し、配信と録画を異なる解像度で行いつつ同じシーンコレクションを使用することを諦めている方も多いはず。
    しかし、実はソースに対して変換グループ化スケールフィルタの組み合わせによって相対レイアウトを実現できる。勿論、ソースはキャンバス解像度と同じ縦横比(16:9等)でなくても動作する。

    OBS キャンバス解像度が変わってもレイアウトが崩れない相対的なソースをつくる
    1. 変換のバウンディングボックスでキャンバス解像度の縦横比に合わせる
    OBS キャンバス解像度が異なるプロファイルでシーンコレクションを共有してもレイアウトが崩れない相対的なソースをつくる
    項目 解説
    バウンディングボックスの種類 境界の内側に合わせる
  • ソースを常にバウンディングボックスに内接させる。
  • キャンバスより横長になっても縦長になっても、ソースが変形することはなく、キャンバスからはみ出ることもない。
  • 最大サイズのみ
  • "境界の内側に合わせる"同様ソースがキャンバスからはみ出ることはないが、ソースがキャンバスより小さい場合内接せずに余白が生まれる。
  • 敢えて余白をつくりたい場合に有効。ソースが小さすぎる場合は大きさを2x 4xするとよい。
  • バウンディングボックスの配置 中央
  • 黒帯は上下左右に均等に配置される。
  • バウンディングボックスのサイズ 1280x720
    1920x1080
    2560x1440
    3840x2160
  • ソースの縦横比に関わらず、必ずキャンバスの縦横比に合わせる。
  • スケーリングを最小限に留めるため、可能であれば変換では余白を追加するだけで拡大縮小しない。
    • 例: フルスクリーン(1920x1080)とウィンドウモード(1920x1016)で縦横比が変わってしまうゲーム -> 1920x1080
    • 例: スマートフォンで撮影した4016x3008(約4:3)の写真 -> 5348x3008
    • 余白を追加するだけでスケーリングが発生しない場合、ソースの右クリックメニュー -> スケールフィルタはポイント。3.と配信プラットフォームでのみスケーリングが発生する。
  • 2.にあるように、同じグループのソースに合わせる。
  • スケーリングが発生する場合、ソースの右クリックメニュー -> スケールフィルタを参考に適切なアルゴリズムを選択する。
    • 例: フルスクリーン(3840x2160), ウィンドウ(1920x1016) -> 3840x2160 (等倍or拡大)
    • 例: ウィンドウ(1920x1016), ウィンドウ(1024x768) -> 1920x1080 (等倍or拡大)
  • 抽象化すると何言ってるか分からん。俺も分からん。とにかくスケーリングを減らしてできる限り高品質でプロファイル切り替えても崩れなけりゃおk。
    • 画面端に表示するコメント欄等のオーバーレイ表示

    前述のように、オーバーレイそれぞれが16:9になるようにバウンディングボックスで管理してもよいが、オーバーレイものは解像度がまちまちなので直観的ではない。
    ダミーの16:9の色ソースを置いて(非表示にし)、2.や3.を行ってからグループ内のソースの位置を調整するとよい。

    OBS キャンバス解像度が異なるプロファイルでシーンコレクションを共有してもレイアウトが崩れない相対的なソースをつくる
    1. 1つあるいは複数のソースを選択し、グループ化する
      このとき、それぞれのソースの最終的なサイズ(バウンディングボックスのサイズ)が同じでないと、一番大きなソースに合わせてレイアウトが崩れてしまう。
      グループを分けるか、1.の時点でリサイズを行って解像度を揃える。

    2. グループ全体にスケールフィルタでキャンバス解像度を適用する

    キャンバス解像度の異なるプロファイルを切り替えてみましょう。あら不思議、全くレイアウトが変わりません。

    音声ミキサー #

    OBS

    設定->音声で設定したオーディオソースが表示される。
    歯車又は右クリックでオーディオルーティング等の各種設定項目が表示される。

    項目 説明
    すべて再表示/非表示 音声ソースの表示/非表示を切り替える
    名前を変更 表示名を変更できる
    フィルタをコピーする/貼り付ける "フィルタ"で設定した項目をコピー&ペースト出来る
    垂直レイアウト 既定では横だが、縦のレベルメータ表示に変えることができる。多くの音声デバイスを使用する人にオススメ。
    フィルタ オーディオフィルタを使用できる。下記参照。
    プロパティ ここでもデバイスの選択を行える。
    オーディオの詳細プロパティ オーディオルーティングやパンの設定が出来る。下記参照。

    フィルタ #

    #音声フィルタを参照。

    オーディオの詳細プロパティ #

    項目 説明
    名称
  • 表示名。デフォルトでは###音声が表示される。
  • 音量(%)
  • 音量を調節する。
  • モノラルにダウンミックス
  • オーディオインターフェイスに接続したLチャンネルのみのマイクの音声等をモノラルとして扱うことで、片方からしか聞こえない状態を回避できる。
  • オーディオインターフェイスにこの機能がない場合使用してください。
  • バランス
  • 左右の音量バランスを調整する。パン。
  • 同期オフセット
  • 音声の遅延を設定する。
  • キャプチャデバイス等で音ズレを起こす場合に有効。
  • 音声モニタリング
  • 設定->詳細設定で設定した音声モニタリングデバイスへ音を返す設定。
  • あくまでもOBS上で適用したフィルタの確認用であり、配信や録画時に使用すべきものではない。
  • これは遅延がある為、自分の声をヘッドホン等からモニターしたい場合は、オーディオインターフェースの機能を利用する。
  • トラック
  • 配信時は1トラックのみを使用するため、マイク音声、デスクトップ音声含め使用するデバイス全て1のみチェックする。
  • 録画時はマイク音声とデスクトップ音声を1と2に分けるなど、柔軟に設定可能。###出力でチェックしたトラック数分ストリーム数が確保されていることが前提。もし足りなければそのトラックは録音されない。
  • 統計 #

    OBS

    ここでは何が原因で配信がカクついているのかの原因の特定を行える。
    OBSが重い、配信がカクつく、それらは全てここの値に現れる。統計を表示しパフォーマンスをモニターすることが、快適な配信への近道なので、表示 -> ドックで必ず追加しておきましょう(OBS 23.0~)。

    レンダリングラグが原因で逃したフレーム #

    • シーン切り替え等で一瞬増える程度は問題ない。
    • この値が増えていく場合、ソースのレンダリングが間に合ってない。そのPCで行っている処理内容全体に対して、PCのスペックが不足している。
    • 原因となっているソースを削除するか、ソースを減らす。
    • ゲームなら設定を妥協する。
    • OBSを管理者として実行すると改善する場合がある

    エンコードのラグが原因で逃したフレーム #

    • 設定->出力->配信を見て、x264ではなくハードウェアエンコーダを選択したり、プリセットを軽量なものに変更する。GPUのドライバやOSが古いと、ハードウェアが対応しているのに選択できない場合がある。
    • それでも間に合わない場合はマシンスペックが不足している。全体的にマシンスペック不足している場合と、使用しているエンコーダがCPUやGPUの性能に対して厳しい場合がある。

    ドロップフレーム(ネットワーク) #

    ネットワークが原因のドロップは、金を積めばいいというものではなく、知識と手間と心労と手間と面倒臭さがピカイチなので、お使いのインターネッツ環境が良いことを願う。

    • この値が増えるとき、上り回線の速度にビットレートが収まっていないので、各プラットフォームの推奨値や設定 -> 出力 -> 配信を参照し、環境に見合った値にする。
      1. まずYouTubeのせいにしない

      2. 回線速度計測は下記を使用するとよい。

        • サービス情報サイト(NTT東日本) -> フレッツ光 通信速度測定
        • サービス情報サイト(NTT西日本) -> 同上
          これはインターネットではなく、NGN閉域網の速度計測を行う。フレッツ系の回線でサービス情報サイトへの接続設定がないと使用できない。
        • iNoniusスピードテスト
          おすすめ
        • Speedtest
          サーバ/地域によっては参考にならない
        • fast.com -> 詳細を表示
          値は不正確だが、fast.comと打つだけなので人に紹介しやすい
      3. 例えば、上りが安定して50Mbps出るなら、30Mbps(OBSのビットレート設定なら30000kbps)まで使えると推測できる。

        • 1桁MbpsやKbpsは厳しい。いやKbpsはインターネッツが厳しいはずなのでISPに殴りこむべき
        • 2桁Mbpsが安定して出るならおk。50MbpsもあればYouTubeで4K配信が可能。エンコードラグの領域になってくる。
        • 3桁Mbps前半出ていれば十分。
        • ただし、スピードテスト結果が何Mbpsだろうが正直どうでもよく、単位がmsのRTT(通称レイテンシ, ping)が重要。
        • RTTが悪いと理論上どう足掻いてもスループット(速度)は出ず、輻輳(混雑してパケットドロップが発生している状態)しRTTが変動する残念な回線状況の場合は、スピードテスト結果から多めにマージンをとってもネットワークドロップが避けられない
          要するにスピードテストは参考にすらならない場合も多く、その性質上、例え有線より速くてもWi-Fiは配信ではNG
          cf. News & Views コラム:オンラインゲームとインターネットの遅延 – JPNIC Blog
      4. 早朝や昼間は速度が出るが、夕方から夜間のゴールデンタイムにかけて著しく遅くなる場合、

        • 電力系やCATV、NURO、集合住宅共有インターネットの場合、結局のところ自前のルータでNAPTできない場合が多いので、もし遅いなら乗り換えるしかやれることないかも。
        • フレッツ光の通信設備を使うISPを契約している場合、IPv6 IPoEを使うと回線速度が改善する場合が多い
          これはIPv6自体が速いのではなく、フレッツのIPv4 PPPoEの設計上輻輳しやすく、結果的に遅いから。
          • 回線事業者 - ISP - HGW/ルータ - PCまでIPv6接続環境が整っている場合、タスクマネージャのパフォーマンスタブ -> イーサネットにIPv6アドレス: 2001:db8:b0ba:10ee...のようなグローバルIPv6アドレスが表示される。
            ローカルIPv4アドレスと違い、グローバルIPv6アドレスは絶対に配信で映してはいけない。それを求めてくる視聴者や友人が居るなら縁を切ること。
            ローカルIPv4アドレスも、よく分からなければ見せないほうが良い。
          • リンクローカルアドレスfe80...の場合は、IPv6インターネット環境がない。
          • フレッツ光のIPv6 IPoEを使用したv6プラスやtransix(IPv4 over IPv6トンネルでIPv4も一緒に速くする凄いやつ)が使えるかはISP次第なので、ISPの契約を確認する。
          • 現在契約中のプランが対応していない場合、対応したプランに変更して、工事してもらう。
          • ISPが対応していないなら、解約して別のISPと契約する。
          • ISPとの契約上IPv6 IPoEが既に可能なら、
            • ONUと自前ルータの構成の場合、ルータの設定でIPv6 IPoEの項目がないか探して、あれば設定する。PPPoEのように認証設定は不要。
              なければ、ISPまたはフレッツに問い合わせてHGWをレンタルするか、対応したルータを購入する。コンシューマ向けならAtermかBuffalo辺りだろうか。因みにHGWはNECなどが製造している。
              HGW一覧: Product Finder Results | Wi-Fi Alliance
              Wi-Fi APではなくルータとして購入する場合、日本のフレッツのIPv6 IPoEやRDNSSオプションに対応したものを選ぶとよい。
              国内メーカ初!【IPv6 RA RDNSSオプション通知】に対応:IPv6通信ならAtermで決まり!ネット高速化 虎の巻 | ルータ活用コンテンツ | AtermStation
            • ONUとHGWまたは一体型HGWの場合は、ひかり電話ありの可能性が高い。
              • HGWにフレッツ・ジョイントによってIPv4 over IPv6 IPoE機能が降ってきていないか確認する。
              • HGWにも新旧や当たり外れがあるので、交換工事をNTTに依頼することもできる。
            • IPv6 IPoEやIPv4 over IPv6 IPoEトンネルには以前にも増して処理能力やセキュリティ面が要求される。HGWやルータが対応していても処理能力が不足したり、利用可能ポートが少ないことで安定しない場合もある。
              ルータへの費用対効果は甘く見られがちだが、周辺機器というよりは、1台のPCと同じ扱いで予算を組むべき。家の鍵であり、インフラだから。
              家族またはサーバ公開によって同時接続台数が多いなど、HGWやコンシューマ向けWi-FiルータのNAPT性能では足りない場合、高性能なルータとしてYAMAHA RTXやUNIVERGE IXを導入する手もある。HGWでポート開放するには、IPv4 over IPv6トンネル機能とトレードオフなので、そういった場合にも効果的だ。
              ただし、ひかり電話を使っているなら、ここで言うルータは安易に買うべきでない。収容方法を考慮する必要がある。
              コンシューマ向けWi-Fiルータを適当に買ってきても、Wi-Fi APとしてしか使えないので注意。
              cf. フレッツ光 ひかり電話を使いながら、IPoEのIPv6を自前ルータで直収する方法 - notokenの覚書
          • 集合住宅で電話線を使ったVDSL配線方式なら、理論上100Mbpsを超えることはなく、RTTも大きい。メタルは落雷にも弱い。
            • 保守コストからNTTには光配線方式に変えるインセンティブがあるので、提供エリアを調べる。確認が必要と言われたら、ISPやフレッツに電話で詳しく問い合わせる。今時FTTHになってないところはダメかも。
              賃貸を選ぶ場合は、予めフレッツのサイトで下見しておくとよい。
              cf. https://flets.com/
              私に質問するときは速度は伏せてRTTだけ教えてほしい。辛くなるので
            • VDSL終端装置の交換で回線速度が改善する場合がある。焦げていたり型番が古かったら問い合わせて交換して貰おう。私は上下最大70/30が95/100Mbpsになったので、似たような状況の方は試す価値あり。
            • 問い合わせ先はフレッツとの直接契約ならフレッツに、コラボ光ならISP。後者でも最終的にはNTTに引き継がれるが、交渉事はISPにインセンティブがなく対応が悪い場合があるので、言葉巧みに親切なサポートを引っ張り出すか、コラボ光をやめる。
              インターネッツにはコラボ光を勧めるアフィ記事が乱立しているが、要するにそういうこと。値段はサポート対応の良し悪しに直結する。コンシューマ向けのベストエフォート回線な時点で既に安い。
      5. しばしばLANケーブルが現在契約中の回線品質を下回っている環境がある。

        • 断線疑惑があるのはダメ。また、Cat5, 5eモドキで、4つしか結線されていないものは100Mbpsリンクなので新聞を縛るのに使って捨てよう。
        • Cat5e-Cat6Aの、できればきしめんではないUTPケーブルを購入しよう。
        • 家電量販店が 情jy 逸般向けに 販売しているCat7~を謳うケーブルがあるが、Cat7以上はRJ45(8P8C, LANケーブルの端子)と互換性がなく、STPは一般家庭でも逸般家庭でも施工が難しい機能用接地(家にあるアースとは目的が異なる)が義務付けられている(ANSI/TIA/EIA-568-B.1-2)。
          正しい施工がない状態で使えば、お金をドブに捨てるだけでなく、速度の悪化や機器の不具合に繋がるので私はお勧めしない。

        RJ45プラグ付の「Cat.7」と表記された製品について

        Q3
        RJ45プラグ付の「Cat.7」と表記されたパッチコードが販売されておりますが、これについて教えてください。
        これは、Cat.7の性能はあるのでしょうか。

        A3
        RJ45プラグではCat.7性能を満足することはできません。よって、これは不適切な表現であり「誤表記」と考えられます。
        Cat.7性能を満足するプラグは、一般的にTERA、GG45、ARJ45コネクタであり、よって、「Cat.7」と表記されたRJ45プラグ付コードは、Cat.7の性能を満足しておりません。

        JEITA 情報配線システム標準化専門委員会 「LAN配線の疑問にお答えします」(2018年)

        cf. TSUKO 通信興業株式会社 配線規格概要 ANSI/TIA/EIA-568-B.*-* 商用ビル通信配線規格 Addendum(追補) (NL20号 LAN関連規格より)
        cf. TSUKO 通信興業株式会社 配線工事関連 LANケーブルのノイズ対策のために接地について教えてください(NL22号 Q&Aより)
        cf. TSUKO 通信興業株式会社 LANケーブリング入門 ケーブリングの規格と要求されている電気特性

        • そもそもLANケーブルはツイストペア構造により、通信品質は十分に保たれている。
        • LANケーブルへ、あるいはLANケーブルからのノイズを気にするなら、ノイズ源との距離を離せば大きく軽減される。~~最大のノイズ源である照明を外し、スマートフォンを窓から投げ捨ててから、~~XLRやデジタル伝送、誤家庭内ファイバー化を考えよう。
        • JEITAとは少々矛盾する日本製線による見解もある。RJ45で10GbEという規格的に無理をした需要がある中で、STPは巷で言われているほど無用の長物ではなく、機能用設置がなくとも効果があるらしい。UTPが混在すると意味がないことから、一般家庭で効果的に導入するには住宅自体の配線からネットワーク機器まで見直す必要があり、家電量販店で品質の怪しいCat7モドキを買ってきてポン付けで解決!とはならないようだ。
          結局、STPはダメなの? UTPでいいの? LANケーブルの専門家に聞く【イニシャルB】 - INTERNET Watch
          #Mac Cat6Aケーブルを使用した10GBASE-T伝送検証【日本製線株式会社 公式】 - YouTube
      6. YouTubeにIPv6で配信するにはOBS側でも設定が必要

    • ネットワーク設定の最適化も有効な場合もある。
    • 映像品質をできるだけ落とさずビットレートを下げるとき、ソース解像度の変更は負荷と品質の観点から推奨できない。
      ゲームの描画とエンコードの品質を上げ、フレームレートを60から30fpsに落とす方が効率が良い。

    シーントランジション #

    OBS

    シーン切り替え時に様々なトランジションを適用できる。

    コントロール #

    OBS
    項目 説明
    配信開始
  • 設定 -> 出力 -> 配信の設定でエンコードを開始します。
  • 録画開始
  • 設定 -> 出力 -> 録画の設定でエンコードを開始します。
  • 録画停止ボタンで停止し、処理が完了するまで必ず待ってください。Xボタンや終了ボタンで強制終了すると、基本的に録画ファイルが破損します。
  • スタジオモード
  • デフォルトではレイアウトの変更、ソースの追加等の作業の様子が配信に映ってしまいます。このモードが有効の場合、内容を決めてから実際の配信映像に適用することができます。
  • 誤爆防止にも有効です。
  • リプレイバッファ開始
    Virtual Camera
    設定
    終了
  • OBSを終了
  • 設定 #

    ファイル -> 設定

    一般 #

    項目 説明
    一般 言語 日本語
  • 基本的に通常、高は非推奨。
  • 出力 配信を開始するときに確認ダイアログを表示する 有効
  • 誤爆防止に有効。
  • 配信を停止するときに確認ダイアログを表示する 有効
    録画を停止するときに確認ダイアログを表示する 有効
    配信時に自動的に録画 任意
  • 負荷ゼロで配信と同時に録画する
  • 配信時に自動的にリプレイバッファを開始 任意
  • リプレイバッファ
  • 配信中にリプレイを流す
  • プロジェクター 終了時にプロジェクターを保存する 有効
  • ウィンドウ・全画面プロジェクターを開いたままOBSを終了すると、次回も自動的に開く。
  • スタジオモード ダブルクリックしたときにシーンに遷移 有効
  • 便利
  • 縦長/垂直レイアウトを有効にする 任意
  • お好みで
  • プレビュー/番組ラベルを表示する 無効
  • 分かってれば邪魔
  • 配信 #

    配信プラットフォームを選択する。

    項目 説明
    サービス YouTube - RTMPS
  • YouTubeのライブダッシュボードで作成したストリーミングキーを使用する。
  • 通信内容がSSL/TLSで暗号化される。
    RTMPS を使用して配信を暗号化する - YouTube ヘルプ
  • 基本的にIPv4が優先される。
  • RTMPSとIPv6で配信するようネットワーク設定を行っていて、安定しない場合、カスタム設定でRTMPを設定したり、HLSを使う。
  • YouTube - HLS
  • YouTubeのライブダッシュボードで作成したストリーミングキーを使用する。
  • 特にフレッツ東西の設備を使うISPでは、IPv4 PPPoEが遅い事情から、IPv4/IPv6デュアルスタック環境でIPv6 IPoEが使われるように設定するのが望ましい。
  • IPv6で配信するためには、HLSを選ぶか、RTMPなら設定 -> 詳細設定 -> ネットワーク -> IP選択で既定からIPv6アドレスが付与されたネットワークインターフェースに変更する。これは重要なので、何を言っているか分からない場合/詳しくは統計 - ドロップフレーム(ネットワーク)の項を参照。
  • YAMAHA RTX830 の WebGUI で IPv4/IPv6 デュアルスタック環境における RTMPS と HLS を比較
    カスタム
  • YouTube - RTMP:
    rtmp://a.rtmp.youtube.com/live2
  • YouTube - RTMPS:
    rtmps://a.rtmps.youtube.com/live2
    RTMPS を使用して配信を暗号化する - YouTube ヘルプ
  • HLSを使ってHEVCでYouTubeに配信する
  • サーバー Primary YouTube ingest server
  • 調子が悪い時はBackupに切り替えると安定する場合もあるかもしれないが、まず疑うべきは自分の環境。視聴者の中には、この分野に造詣が深いエンジニアが紛れ込んでいる可能性があり、腹痛の原因となるのでやめていただきたい。
  • ストリームキー(リンク)
  • ストリーム名/キーを貼り付ける。
  • 配信サービスの推奨設定事項を無視する 無効
  • 配信プラットフォームの推奨値を守らない設定を行いたい場合は無効。
  • 出力 #

    項目 説明
    出力モード 詳細
  • ここの設定が、配信や録画の品質やパフォーマンスに最も影響する為、高度な設定項目が使用できるモードにします。
  • 音声トラック (配信用プロファイルの場合) 1
  • 配信は基本的に映像1つ、音声1つまでです。
  • 配信時は複数の映像や音声をMixすることになります。
  • (録画用プロファイルの場合) 1~任意
  • 録画時は音声ストリーム数を増やすことができるので、マイク音声とデスクトップ音声を分ける事ができます。
  • それらのルーティングはオーディオの詳細プロパティで設定します。
  • 動画ファイルに1つの映像ストリームと複数の音声ストリームが含まれた状態で出力されます。
  • 配信 #

    "配信開始"押下で選ばれるエンコード設定です。

    品質、パフォーマンスの観点から上から順に使えるものを選択して下さい。
    Macの場合は"アップル VT H264 ハードウェア~"、Linuxの場合はOBS 23.0から公式対応した"VAAPI"等を選ぶと良いでしょう。

    x264 #

    デフォルトではソフトウェアエンコードのx264になっています。
    ソフトウェアエンコーダはハードウェアエンコーダに比べ設定項目が豊富ですが、配信や録画のようなリアルタイム処理においてハードウェアエンコードに負荷・品質共に勝ることは基本的に無いので、特殊な用途でない限り選ぶ必要はありません。

    参考: 同程度の品質になるようエンコードした場合、x264で実時間の5倍かかるところ、h264_nvencでは1/5未満で終わります。

    NVIDIA NVENC H.264 (new) #

    ハードウェアエンコードの現状最適解、対応したNVIDIA製GPUで使用できるNVEnc。

    項目 説明
    エンコーダ NVIDIA NVENC H.264 (new)
  • OBS 23.0からの最適化が含まれているnewを選択する。
  • レート制御 CBR
  • 安定性重視ではCBR推奨だが、私個人としてはVBRを推したい。CQPはビットレート変動が非常に大きくライブストリーミングには不向き。
  • サービス終了しちゃったぴえん~~Mixer FTLの場合は必ずCBR~~
  • ビットレート
  • YouTube 1080p:
    8000-12000 Kbps
  • YouTube 1440p:
    12000-18000 Kbps
  • YouTube 4K:
    24000-34000 Kbps
  • Twitch, Mixer:
    7000 Kbps
  • 解像度、フレームレート毎に異なるため、YouTubeの推奨値を参考に調節するとよいが、NVEnc H.264 VBRで試した結果、このビットレートが適切(VMAFスコア96-97)だった。解像度別の適切なビットレート設定
  • ゲーム配信等で動きが多い場合は値を大きく、逆に動きの少ない静止画や絵描き配信等は値が小さくても良い。
  • ビットレートが回線のキャパを超えると統計の"ドロップフレーム(ネットワーク)"の値が増える。
  • 最大ビットレート ビットレート+2000~4000Kbps
  • VBRの場合有効。4Mbps以上大きくしてもあまり効果がない上にビットレートが予測できなくなるのでこの程度に留めておこう。
  • キーフレーム間隔(秒) 2
  • ライブストリーミングの場合、キーフレーム(完全な画像のフレーム)をある程度の頻度で含ませる必要がある。
  • NVEnc H.264に限って言えば実は4秒が効率が良いので、画質を攻める人にオススメ。
  • プリセット Quality
    Low-Latency Quality
    Low-Latency
  • ビデオカードのスペックに余剰があれども、Max Qualityはリアルタイム処理に難があり、配信を不安定にするため、必ずQuality(medium)を選択する。特にMixer FTL等のレイテンシにシビアの場合は配信すらできなくなる。
  • もし処理が間に合わず統計の"エンコードのラグが原因で逃したフレーム"の値が増えるようであれば、Quality同様に品質・負荷・ビットレートの効率が良いLow-Latency Quality(llhq)かLow-Latency(ll)を選ぶ。解像度別の適切なビットレート設定
  • Profile high
  • 対応していない機能があるため、baselineやmainは不可。ビットレート当たりの品質も確実に低下する。
  • Look-ahead 無効
  • "最大Bフレーム"の範囲内で先読みしてBフレーム数を可変的に決める。
  • 無効時は常に"最大Bフレーム"。
  • 動きの少ないコンテンツに効果的。動きが激しい場合はビットレートを無駄遣いする為、品質が低下する。
  • 負荷が大きくドロップする場合はオフ。
  • 心理視覚チューニング 有効
  • 有効時は、ビットレートの使用方法が大幅に最適化され、特に動きの激しいシーンで視覚品質が向上する。
  • GPU 0
  • GPUを複数挿している場合、それを選択できる。ただし、別GPUにフレームをコピーする過程でメリットが失われる為、NVIDIA曰く非推奨。
  • 最大Bフレーム 2
  • ビットレートが限られる環境下では、キーフレームの差分の更に差分であるBフレームは品質保持に有効。
  • 動きが少なく、ブロックノイズや纏わりつくようなアーティファクトが出なければ3に増やしても良いが、NVEnc H.264では2が最も効率がよく、04は非効率。
  • YouTube Liveの低遅延や超低遅延、Mixer FTLでは0にすると安定する。
  • 上記の設定を行った際の映像品質(参考):

    (GTX1650無印を除く)Turing世代では、Pascal世代と比べ品質が向上しているため、配信や録画用途の方は型落ちを選ぶべきではありません。

    NVEnc対応リスト
    Video Encode and Decode GPU Support Matrix [NEW] | NVIDIA Developer

    OBS 23.0からNVIDIAと共同で開発された最適化されたNVEncが利用できます。
    Turing以降だけでなく、Pascal以前にも有効とのことなので、既存ユーザは今すぐアップデートしましょう。

    OBS公式TwitterやNVIDIAによると、配信専用に別GPUを使用してもメリットが無いため推奨されないとのこと。
    遊びたいゲームがある程度余裕を持ってプレイできるスペックを選ぶと良いでしょう。

    NVEncが選べない #

    廉価GPU・古い世代の場合、使えない・一部機能が制限されている可能性があるため、
    以下のNVIDIA公式ドキュメントの対応表を確認する。
    Video Encode and Decode GPU Support Matrix [NEW] | NVIDIA Developer

    • 古いGPUに関してはFor a complete list, click on the buttons below to open the complete tablesから見る。

    • Max # of concurrent sessionsにNVIDIAのセッション数(同時エンコード可能な数)が書いてある。
      3本以上を同時に処理する特殊な用途ならQuadroが欲しくなってくる。
      同時配信では、3つ以上の解像度が必要なければ、#正しい同時配信の方法で十分。

    • HEVC B Frame supportは動画品質に効いてくるので、もしGPUを新調する場合はこれが使えるものを選んでおくと良い。

    • GeForce GTX 1650Turing GPU with Volta NVENCと注釈が入ってるように新しいNVEncが使用できないため、これを選ぶならPascal世代を選んだ方がお得。

    配信用にグラボを選ぶなら1650 Super~ということがわかる。

    Windows 8や10の古いバージョンを使っていて、要件を満たしておらず選べない場合もある。

    NVEncで配信録画開始時に失敗する #

    配信開始しようとすると、以下のような素っ気ないエラーが返ってくる。

    配信開始に失敗しました
    出力開始に失敗しました。詳細はログを確認してください。

    注:NVENCまたはAMDエンコーダを使用している場合は、ビデオドライバが最新であるかを確認して下さい。

    FFmpegカスタム出力の場合は録画中に不明なエラーが発生しましたしか表示されないかもしれない。

    この原因として、文字通りの場合もあるが、
    NVEncセッション数制限がNVIDIA GeForceには設けられているため、同時にエンコード出来るのは2つまで。
    他のアプリケーションがそれを使用している時に配信・録画開始しようとして失敗する場合がある。

    裏でエンコードや画面共有等をしていなくとも、GeForce ExperienceのShadowPlayやWindowsのゲームバー(Game DVR)によってセッション数が専有される場合がある。

    Windowsの設定->ゲーム->ゲームバーを無効。
    GeForce ExperienceでShadowPlayを無効。

    メニューバー -> ヘルプでログを確認できる。

    H.264/AVC Encoder (AMD Advanced Media Framework) #

    AMD製APUやRadeonなどのdGPUで使用できるハードウェアエンコーダです。
    アニメ調な絵が得意なNVEncに対して、AMD Advanced Media Framework(AMF)は実写のディテールを保った品質が特徴で、配信でH.264を使用する分には十分な品質でした。

    項目 説明
    エンコーダ H.264/AVC Encoder (AMD Advanced Media Framework)
  • AMDのGPUを使用しているにも関わらず選択できない場合は、デバイスマネージャ等でドライバを更新してください。
  • プリセット
  • AMFはハードウェアエンコーダには珍しいほど多数のパラメータが用意されているため、"Twitch配信"や"YouTube配信"のプリセットを選ぶのが無難です。
  • 録画向けのプリセットは実際に録画向けで、配信向けのプリセットを選択しないと配信は安定しません。
  • 品質プリセット 品質
  • 品質を優先したエンコードを行う設定です。
  • 統計の"エンコードのラグが原因で逃したフレーム"の値が増えるようであれば、"バランス"や"速度"を選択します。
  • プロファイル High NVEnc H.264を参照
    レート制御方式 可変ビットレート(遅延節約)(VBRLAT)
  • 固定ビットレートでも良いですが、ビットレートをより効率的に使用する為に、振れ幅の小さい可変ビットレートを使用します。
  • VBRの中でも、配信で重要なレイテンシを意識したレートコントロールです。
  • プレパスモード 無効
  • VBR(CBR)で使用できる、事前に処理を行ってGOP内のビットレート分布を改善するモードです。
  • 負荷が大きい点、古い世代のGPUでは大きな効果が得られない点に注意してください。
  • 目標ビットレート NVEnc H.264を参照
    最大ビットレート
    最小QP 18
  • ビットレート目標値でレートコントロールした上で、量子化量(Quantization Parameter)の上限下限を設けて無駄なビットレート消費や映像の破綻を防ぐ。※検証の余地あり、値を弄らなくても良い
  • 最大QP 25
    キーフレーム間隔 2.00
  • NVEnc H.264を参照
  • 0.50のようにより動きに強いClosed GOPを指定することもできる。
  • 表示モード 詳細設定
  • "基本"では設定できない項目があるが、正直"基本"で十分です。
  • QuickSync H.264 #

    Intel製iGPU(CPUの内蔵グラフィック)搭載の、Quick Sync Video(QSV)が使えるモデルで有効な機能です。Intelの公式サイトで確認できます。

    項目 説明
    エンコーダ QuickSync H.264
  • プルダウンメニューでQSVが選べない場合、BIOSでiGPUを有効にする必要があります。
  • NVEncが使える場合は配信用途でQSVを有効にする必要はありません。
  • ターゲットの使用法 quality
  • パフォーマンスに余剰がある限りできるだけ品質優先。統計の"エンコードのラグが原因で逃したフレーム"の値が増えるようであればbalanced等に下げても良い。
  • プロファイル NVEnc H.264を参照
    キーフレーム間隔(秒)
    非同期深度 4
  • 既定値。パフォーマンスに関する設定。
  • レート制御 CBR
  • CBR推奨、回線に余裕があればVBRでも良い。CQPやLA_ICQはライブには不向き。
  • ビットレート NVEnc H.264を参照
    最大ビットレート
    アップル VT H264 ハードウェアエンコーダ #

    MacOSではこちらを選ぶしかないようです。

    項目 説明
    エンコーダ アップル VT H264 ハードウェアエンコーダ
    ビットレート NVEnc H.264を参照
    限界ビットレート 有効
  • これを有効にしないと、ビットレートが大きく変動し、配信が安定しない・途切れてしまうようです。
  • 最大ビットレート 6500
  • "限界ビットレート"が有効の場合表示される。配信用途においてビットレートを制限する目的なので大きくし過ぎないこと。
  • 最大ビットレート ウィンドウ(秒) 1.00
  • 既定値
  • キーフレーム間隔(秒) NVEnc H.264を参照
    プロファイル
    B フレームを使用する
    配信が止まる・途切れる・カクカクする #
    1. 前提として、x264を使用していないことを設定->出力->配信で確認する
    2. 主にNVEncの設定を参考に、値を変更する
    3. 統計を表示して配信してみる

    録画 #

    "録画開始"押下で選ばれるエンコード設定です。

    因みにYouTubeの推奨値。あくまでもアップロード用の最終出力の推奨値であり、編集前のソースとして使う場合はこの値は推奨されない。
    アップロードする動画におすすめのエンコード設定 - YouTube ヘルプ

    項目 説明
    種別 カスタム出力 (FFmpeg)
  • OBS組み込みではなく、FFmpegを使用したエンコードを行う。
  • 設定可能な項目が大幅に増える。
  • FFmpegはいいぞ。
  • FFmpegの出力の種類
    ファイルパスまたはURL
    ファイルに出力 フォルダを参照又は直接ディレクトリのパスを記述。基本的に録画機能。
    URLに出力
  • RTMP URLを記述するとRTMP配信が可能
  • HLS向けの引数を記述するとHEVC HLS配信が可能
  • スペースなしのファイル名を生成 有効
  • ファイル名のスペースは極力避けたい。
  • 詳細設定でスペースをアンダースコアに置き換えても良い。
  • コンテナフォーマット mpegts
    mkv(matroska)
    mp4
  • コンテナフォーマットがmp4の場合、OBSがクラッシュして録画が強制終了するとmoov atomが破損し再生・編集が不可になる。
  • mpegtsは録画中にデコード(再生)やエンコードが可能になり、OBSがクラッシュしても動画が破損しない。一般的にはデジタル放送やライブストリームに使用される形式。
  • 編集ソフトの殆どはmpegtsに対応していないため、編集前に録画の最多重化が必要。
  • 音声エンコーダにflacを使用する場合、mp4(規格外)よりmkvが望ましい。
  • マルチプレクサーの設定(ある場合)
  • 基本的に何も指定しない。
  • movflags=frag_keyframe+empty_moov
  • コンテナフォーマットがmp4でも、強制終了時に動画ファイルが破損しなくなるFragmented MP4を使用する。
  • fmp4はTwitter等のSNSにそのまま投稿できなかったり、Premiere Pro等の編集ソフトが非対応・対応が甘い場合があるので注意。
  • OBSの録画の最多重化もmp4には対応していないため、FFmpegを使用して同様の処理を行う必要がある。素直にmpegtsを使えばよい。
  • ffmpeg -i input.mp4 -c copy out.mp4
    
    strict=-2
  • 実験的な機能を有効にする。
  • コンテナフォーマットmp4に音声コーデックflacの組み合わせは規格外なので必要。
  • color_range=tv color_primaries=bt709 color_trc=bt709 colorspace=bt709
  • 色空間を明示的に指定し、メタデータに記述する。
  • movflags=frag_keyframe+empty_moov strict=-2 color_range=tv color_primaries=bt709 color_trc=bt709 colorspace=bt709
  • 上記すべて指定した場合
  • movflags=faststart color_range=tv color_primaries=bt709 color_trc=bt709 colorspace=bt709
  • Twitter等のSNSに直接投稿する場合向けの設定(ファイルの先頭にmoov atomを含める)
  • 映像ビットレート 0 Kbps
  • 録画に適したConstant QPやConstant Quatlityモードの場合は0 Kbpsに設定して無視させる。
  • 解像度別ファイルサイズ(ビットレート設定)と品質(VMAF)の関係と最適な値
  • キーフレーム間隔(フレーム) 15-60
  • ここでは秒ではなくフレーム数であることに注意。
  • 編集や殆どのプラットフォームへのアップロードに適したclosed gop(フレームレートの半分)。よって、30fpsなら15、60fpsなら30。
  • closed gopでなくとも、2秒程度なら問題ない。
  • 出力をリスケールする 無効
  • ここではリスケール(リサイズ)しない。
  • 映像エンコーダ
    映像エンコーダ設定(ある場合)
    hevc_nvenc
    h264_nvenc
    h264_qsv
    utvideo
    dnxhd
    x264
    すべてのコーデックを表示(潜在的に互換性がない場合でも) 有効
  • mpegtsを選択した場合、チェックしないとプルダウンメニューに表示されない。
  • 音声ビットレート 320
    音声トラック オーディオの詳細プロパティに対応したトラックを有効にする。#出力の音声に関する項を参照。
    音声エンコーダ aac
  • FFmpeg既定のAACエンコーダ
  • コンテナフォーマットはmpegtsかmp4
  • 基本的に不可逆圧縮のaacで十分。実際のところ、マイクやAIFの品質の方が音質への影響は大きい。
  • libfdk_aac
  • FFmpeg既定のAACエンコーダより高品質とされる。
  • FDK-AACが含まれるFFmpegを組み込んでOBSをビルドすることで選択可能。
  • flac
  • 劣化無く音声を記録できる、可逆圧縮のflacもオススメ。
  • コンテナフォーマットはmkv。mp4では規格外で、マルチプレクサーの設定が必要。
  • #YouTubeの劣悪エンコード事情への対処法#動画音声の再エンコ品質にもあるように、最初から最後までflacで貫き通すと、YouTube側でより良く音声がエンコードされる。
  • pcm_s16le
    pcm_s24le
    pcm_s32le
  • PCM signed 24-bit little-endian
  • コンテナフォーマットはmkvかmov
  • 音声エンコーダ設定(ある場合) aac_coder=twoloop 音声エンコーダにFFmpeg標準のAACエンコーダを使用する場合。

    映画&ビデオはデフォルトではMPEG-2 TSに非対応のため、Microsoft Storeから拡張機能をインストールする必要があります。

    mp4にflacのような、規格外のフォーマットを扱う場合、MPC-BEをオススメします。

    hevc_nvenc #

    この設定を使用して録画すれば、ShadowPlayの1/10のファイルサイズで同等以上の品質を得られるでしょう。

    項目 説明
    映像ビットレート 0 Kbps
  • ビットレートではなくQPでレート制御を行うので、映像ビットレートは0 Kbpsにして無視してもらう。
  • #録画
    映像エンコーダ hevc_nvenc
  • NVIDIA製GPUを使用している場合、最も推奨。
  • H.264より高品質で圧縮率が高い。
  • ローカル保存用としても、YouTubeへのアップロードにも適している。
  • 4K60や8KはH.264の場合規格外となるので、必然的にHEVCやVP9が使われる(例外あり)。
  • 再生負荷は大きい。GPUによってはデコード・エンコードに非対応。
  • 映像エンコーダ設定(ある場合) preset=medium profile=main rc=constqp init_qpI=21 init_qpP=21 init_qpB=23 bf=0
  • presetはp4(medium, slow)か、負荷が大きい場合はp3(≒llhq, ll)が品質と負荷とサイズのバランスが良い。
  • profileはmain(8bit)。highはなく、10bitのmain10はOBSが非対応なので指定する意味がない。
  • rcレート制御には録画に適したCQPを使う。NVIDIAも推奨している。
  • cqConstant Qualityの値を大きくするとファイルサイズが小さくなる代わりに品質が落ちる。
  • bfBフレームは世代毎にサポートされている値を使うか、編集に差し支える場合はbf=0に設定する。
  • preset=p7 profile=main rc=constqp rc-lookahead=1 spatial-aq=0 temporal-aq=1 weighted_pred=0 init_qpI=21 init_qpP=21 init_qpB=23 b_ref_mode=1 dpb_size=4 multipass=2 g=60 bf=3
  • hevc_nvencエンコード500本ノックにより生まれたhevc_nvencさいつよ設定をOBSで使用する。SVT-AV1並みのVMAF・ファイルサイズで10倍の処理速度(Intel Core i7-8700, NVIDIA GeForce RTX 2080比)。
  • 特に4Kリアルタイムエンコードでpreset=p7を使用するとRTX2080(7th Gen NVEnc)では間に合わなかった。preset=p4に妥協し、multipass=0が良いだろう。
  • 組み込まれたFFmpegのバージョンが古いので、preset=p1-p7 dpb_size=4 multipass=2は無視され、b_ref_mode=0でないと動作しないFailed to open video codec: Operation not permitted最新のFFmpegを組み込みOBSをビルドすると引数が全て有効になる。引数の設定に成功しているかはメニューバー -> ヘルプ -> ログファイル -> 現在のログを表示で確認できる。
  • 映画&ビデオはデフォルトではHEVCに非対応のため、Microsoft Storeから拡張機能をインストールする必要がある。

    無料、ハードウェアデコード版(これで十分)

    有料、ソフトウェアデコードにも対応版

    h264_nvenc #
    項目 説明
    映像ビットレート 0 Kbps #録画
    映像エンコーダ h264_nvenc
  • NVIDIA製GPUを使用している場合で、HEVC編集に難があるか、ビットレートを潤沢に割り当てられる場合こちらを推奨。
  • HEVCと比べ品質は劣るものの互換性は高い。
  • 編集ソフトで扱う際に負荷が小さい。
  • 旧世代のGPUでもハードウェアデコード・エンコードに対応。
  • 映像エンコーダ設定(ある場合) preset=medium profile=high rc=vbr cq=23 bf=0
  • presetはp4(medium, slow)か、負荷が大きい場合はp3(≒llhq, ll)が品質と負荷とサイズのバランスが良い。
  • profileはhigh(8bit)。
  • rcレート制御は録画に適し、結果の優れているVBR CQを使う。
  • cqConstant Qualityの値を大きくするとファイルサイズが小さくなる代わりに品質が落ちる。
  • bfBフレームは世代毎にサポートされている値を使うか、編集に差し支える場合はbf=0に設定する。
  • preset=p4 profile=high rc=vbr rc-lookahead=1 spatial-aq=0 temporal-aq=1 cq=23 weighted_pred=0 coder=cabac b_ref_mode=2 dpb_size=4 multipass=0 g=120 bf=2
  • エンコード500本ノックにより生まれたh264_nvencさいつよ設定をOBSで使用する。
  • 特に4Kリアルタイムエンコードでpreset=p7を使用するとRTX2080では間に合わなかった[出典不要]のでRTX3090が必要[要出典]。preset=p4に妥協すると良い。
  • 組み込まれたFFmpegのバージョンが古いので、preset=p1-p7 dpb_size=4 multipass=2は無視され、b_ref_mode=0でないと動作しないFailed to open video codec: Operation not permitted最新のFFmpegを組み込みOBSをビルドすると引数が全て有効になる。引数の設定に成功しているかはメニューバー -> ヘルプ -> ログファイル -> 現在のログを表示で確認できる。
  • 配信向けの設定値は正しい同時配信の方法を参照。

    h264_qsv #
    項目 説明
    映像ビットレート 0 Kbps #録画
    映像エンコーダ h264_qsv
  • NVEncが利用できず、QSVが使用できる場合に推奨。
  • FFmpegカスタム出力で使用するには、QSVが組み込まれたFFmpegでOBSをビルドする必要がある。標準モードでは設定できる内容が少ないが、ソフトウェアエンコードを使用するよりは良い。
  • 古い世代のhevc_qsvは品質、速度面で一切優位性が無いので使用しない。Ice Lake以降はNVEncと品質面で互角と言われている。
  • 映像エンコーダ設定(ある場合) preset=veryslow look_ahead=1 look_ahead_depth=30 look_ahead_downsampling=2x profile=high global_quality=25 g=60 bf=0
  • profileはhigh。
  • presetはveryslow。
    編集ソースとして適し、cbr_hq同様無印より高品質。
  • 編集前ソースなので、bf(B-Frame最大数)は使用しない。
  • lookahead=1はHaswell以降対応、非対応のCPUではlookahead:0
  • utvideo #

    録画負荷が比較的軽い可逆圧縮コーデック。
    一般的な中間コーデックではないので、編集ソフトの対応は微妙。

    項目 説明
    コンテナフォーマット avi
    映像エンコーダ utvideo
  • 可逆圧縮エンコードの中でも互換性が高く、効率が良いと言われている。
  • "編集用"にロスレスで録画したい場合はこちらを推奨。
  • ストレージの性能と容量に余剰が無ければ非推奨。
  • 映像エンコーダ設定(ある場合) pred=median
  • pred=gradientはエンコード/デコード速度と圧縮率のバランスが良く、pred=medianの方が圧縮率が高い。
  • 音声エンコーダ pcm_s16le
  • PCM signed 16-bit little-endian
  • dnxhd #

    Premiere ProやDavinci Resolveなど幅広い編集ソフトで使用できる扱いやすい中間コーデック。編集前ソースとして最適。
    録画負荷はまあまあ。Core i7 8700では4K30 DNxHR SQは可能で、60fpsは盛大にドロップした。

    項目 説明
    コンテナフォーマット mov
    mxf
    映像ビットレート 0 Kbps
  • 規格に対応した値でないとエンコードできない。下に解像度・ビットレート対応表がある。
  • ビットレートは0にし、映像エンコーダ設定でprofileを指定すればよい。
  • キーフレーム間隔(フレーム) 1
  • 映像エンコーダ dnxhd
  • Premiere ProやDavinci Resolveなど幅広い編集ソフトで使用できる中間コーデック。
  • 映像エンコーダ設定(ある場合) profile=dnxhr_444(yuv444p10le)
    profile=dnxhr_hq(yuv422p)
    profile=dnxhr_sq(yuv422p)
    profile=dnxhr_lb(yuv422p)
  • dnxhr_444は設定->詳細設定->映像->カラーフォーマットがI444でないと使用できない。他はNV12を選択する。
  • dnxhr_sqが品質・ファイルサイズの観点からオススメ。
  • 音声ビットレート 2304 Kbps
  • 音声エンコーダ pcm_s24le
  • PCM signed 24-bit little-endian
  • 以下の表は

    ffmpeg -loglevel error -i "input.mp4" -c:v dnxhd -b:v 1M -pix_fmt yuv422p10le -c:a pcm_s16le "output.mxf"
    

    のエラー出力をAvidのドキュメントWikipediaを参考に整形したものです。

    Valid DNxHD profiles (FFmpeg)
    Frame size / FPS Resolution bitrate pixel format
    1920x1080p/23.976
    1920x1080p/24
    Avid DNxHD 175x 175Mbps yuv422p10
    Avid DNxHD 115 115Mbps yuv422p
    Avid DNxHD 175 175Mbps yuv422p
    Avid DNxHD 36 36Mbps yuv422p
    Avid DNxHD 350x 350Mbps yuv444p10, gbrp10
    1920x1080p/25 Avid DNxHD 185x 185Mbps yuv422p10
    Avid DNxHD 120 120Mbps yuv422p
    Avid DNxHD 185 185Mbps yuv422p
    Avid DNxHD 390? 390Mbps yuv444p10, gbrp10
    1920x1080p/29.97 Avid DNxHD 145 145Mbps yuv422p
    Avid DNxHD 220 220Mbps yuv422p
    Avid DNxHD 45 45Mbps yuv422p
    Avid DNxHD 440x 440Mbps yuv444p10, gbrp10
    1920x1080p/50 Avid DNxHD 365x 365Mbps yuv422p10
    Avid DNxHD 240 240Mbps yuv422p
    Avid DNxHD 365 365Mbps yuv422p
    Avid DNxHD 75 75Mbps yuv422p
    Avid DNxHD 730? 730Mbps yuv444p10, gbrp10
    1920x1080p/59.94
    1920x1080p/60
    Avid DNxHD 440x 440Mbps yuv422p10
    Avid DNxHD 290 290Mbps yuv422p
    Avid DNxHD 440 440Mbps yuv422p
    Avid DNxHD 90 90Mbps yuv422p
    Avid DNxHD 880? 880Mbps yuv444p10, gbrp10
    x264 #
    項目 説明
    映像エンコーダ libx264
  • そもそもソフトウェアエンコードはハイスペックなPCであっても高負荷であり、リアルタイムエンコードに向かないことに注意。
  • ただし、上記のハードウェアエンコーダが使えないPCで、(ゲーム等ではなく)絵やデスクトップ操作等の録画用であれば、x264でも賄える場合がある。
  • 映像エンコーダ設定(ある場合) preset=placebo x264-params=crf=20:rc-lookahead=60:qpmin=5:qpmax=40:qpstep=16:qcomp=0.85:mbtree=0:vbv-bufsize=31250:vbv-maxrate=25000:aq-strength=0.35:psy-rd=0.35:keyint=15:no-open-gop:bframes=2:partitions=p8x8,b8x8,i8x8,i4x4:merange=64:ref=4:no-dct-decimate=1
  • x264 placeboでclosed gopな引数。
    かなり重たい。
  • 負荷ゼロで配信と同時に録画する #

    YouTubeやTwitch等の配信プラットフォーム側のアーカイブ機能に任せず、配信と同時に手元に録画したい人向け。
    とは言え、配信と録画双方でエンコードが走って負荷が増えたら元も子もないので、同時に録画しても全く負荷が増えない設定を紹介する。

    項目 説明
    種別 標準
  • 配信と同時に録画する際はOBS組み込みの標準エンコーダを使用する。
  • 録画フォーマット mkv
  • mkvで録画して録画の再多重化を使用する。
  • 音声トラック 音声ミキサー設定 -> 音声に登録されている分チェックする
  • 音声ミキサー -> オーディオの詳細プロパティで触れているように、デスクトップ音声とマイク音声を分けられるので、トラック1に配信ミックス, 2 マイク, 3 デスクトップ音声とし、1を配信に2-3を録画に使うことも可能。
  • アプリケーション毎に音声を分けて録音できる仮想オーディオデバイスやオーディオインターフェースを使用すると、1 ミックス, 2 マイク, 3 通話, 4 ゲーム, 5 BGMで配信1に録画2-5という使い方も可能。配信素材から動画をつくる用途で、より生産性を高めてくれるだろう。
  • エンコーダ (ストリームエンコーダを使用)
  • ストリームエンコーダを使用することが負荷を増やさない為のミソ。
  • 負荷を増やさず配信と異なるビットレートやエンコーダ設定は使えない。
  • 負荷を掛けずに同時配信する方法 #

    現在OBSは同時配信を正式にサポートはしていません。
    様々な方法がありますが、より効率的な方法を解説します。

    一般的に知られている方法は、OBSを多重起動したり、OBSの配信から1つ、録画(FFmpegカスタム出力)から1つという方法ですが、
    これは2つエンコード(及びデコード)が走るので極めて無駄であり、NVIDIA GeForceのNVEncセッション数(2)を使い切ってしまうのもあり、お勧めできません。
    (私の環境ではFFmpegカスタム出力からの配信はドロップまみれで失敗しているのもある)

    今回解説するのは、FFmpegカスタム出力でエンコードしローカルポートへ出力、その出力をffmpegに入力してエンコードせず複数出力するという手法です。
    これなら上り回線が許す限り、2つ3つと同時配信が可能になります。

    1. まずはOBSの設定
      配信設定の概要は、FFmpegカスタム出力の詳細はを参照。
    FFmpegカスタム出力
    項目
    種別 カスタム出力 (FFmpeg)
    ファイルパスまたはURL rtmp://localhost:5555
    コンテナフォーマット flv
    映像ビットレート 6000 Kbps
    キーフレーム間隔(フレーム) 30fps: 15
    60fps: 30
    映像エンコーダ h264_nvenc
    映像エンコーダ設定(ある場合) profile=high preset=medium rc=vbr_hq maxrate=7M bf=2 rc-lookahead=1
    音声ビットレート 128 Kbps
    音声トラック 1
    音声エンコーダ aac
    1. コマンドプロンプト(PowerShellでは書き方が違うよ!)(Win-R->cmd)で以下ffmpegコマンドを実行
    ffmpeg -listen 1 -i rtmp://localhost:5555 -c copy -f flv rtmp://live-tyo.twitch.tv/app/Twitchのストリームキー -c copy -f flv rtmp://a.rtmp.youtube.com/live2/YouTubeのストリームキー
    

    ※収益化している場合、Twitchは同時配信を認めていないのであくまでも例

    1. OBSで録画開始を押下。FFmpegカスタム出力を使うので配信開始じゃないよ!
    2. ffmpegが何らかのストリームを受け取ってるような表示になったら成功。
    3. OBSで録画停止を押下すると、勝手にffmpegの処理も止まります。
    HLSを使ってHEVCでYouTubeに配信する #

    Delivering Live YouTube Content via HLS | YouTube Live Streaming API
    YouTube で HDR 動画を配信する - YouTube ヘルプ
    @Dennis S. Fun fact: you can use ffmpeg (including OBS' ffmpeg output) to ingest HEVC over HLS to YouTube. / Twitter

    OBS StudioがHDRや10bitに対応したら詳しく触れたいが、今までの非効率なH.264 RTMPがHEVC HLSになるだけでも、マシンスペックさえあれば同じ帯域で圧倒的な品質が得られるので、是非使いたいところ。
    低遅延のストリームキーは使用できるが、HLSの性質上低遅延向きではないので悪しからず。

    設定 -> 出力 -> 録画を参考にエンコード設定

    項目 説明
    種別 カスタム出力 (FFmpeg)
    FFmpegの出力の種類 URLに出力
    ファイルパスまたはURL https://a.upload.youtube.com/http_upload_hls?cid=STREAMKEY&copy=0&file=playlist.m3u8
  • STREAMKEYYouTubeのストリームキーに置き換える。
  • コンテナフォーマット hls
  • HEVCや更に10bit、HDRを扱うにはRTMPではなくHLSを使用する必要がある
  • マルチプレクサーの設定(ある場合) hls_time=6 hls_segment_filename=https://a.upload.youtube.com/http_upload_hls?cid=STREAMKEY&copy=0&file=fileSequence%d.ts color_range=tv color_primaries=bt709 color_trc=bt709 colorspace=bt709
  • Segment Durationはhls_time=4までと書いてあるが、6や8にした方が安定する。
  • STREAMKEYYouTubeのストリームキーに置き換える。
  • 映像ビットレート 12000 Kbps (1440p30)
  • H.264とHEVCの解像度毎の最適なビットレートは異なる。同じビットレートであれば主観品質は向上するし、あるいは帯域を削減できる。
  • キーフレーム間隔(フレーム) 60
  • マルチプレクサーの設定がhls_time=2でも、キーフレーム間隔が大き過ぎる場合その限りではない。
  • 基本的にClosed GOPが好ましい。
  • すべてのコーデックを表示(潜在的に互換性がない場合でも) 有効
    映像エンコーダ hevc_nvenc
  • hevc_qsvやhevc_amf等のHEVCのハードウェアエンコーダを選ぶ。
  • 映像エンコーダ設定(ある場合) preset=p3 profile=main rc=vbr bf=3 maxrate=15M
  • 新しいNVEncプリセットpreset=p3が使えない(メニューバー -> ヘルプ -> ログファイル -> 現在のログを表示)場合はOBSをビルドするpreset=llhq rc=vbr_hqを使用する。
  • p2やp3は実用レベルで動いたが、p4やp7はドロップが多かった(GeForce RTX 2080, 7th Gen NVEnc)。
  • 音声ビットレート 320 設定 -> 出力 -> 録画
    音声トラック 1
    音声エンコーダ aac
    音声エンコーダ設定(ある場合) aac_coder=twoloop

    音声 #

    設定 -> 出力 -> 音声

    項目 説明
    トラック1 音声ビットレート 128
  • ライブ配信用のプロファイルでは、トラック1のみ設定してあれば良い。
  • YouTubeの推奨値は128kbps
  • 320
  • 録画用プロファイルでは、出来る限り高ビットレートで録音する。
  • 名称 任意
  • ストリームのメタデータに明示する事ができる。
  • 複数音声ストリームを使用する場合に便利。
  • トラック2
  • 録画用のプロファイルでは、設定 -> 音声で使用するトラック数分設定する。
  • 例: マイク音声、デスクトップ音声の2つ
  • iTunesが入っている環境では配信の音質が向上する #

    AppleのAACエンコーダは他のAACエンコーダに比べてエンコード結果が高品質だと評価されているが、プロプラエタリなソフトウェアな為、OBSに同梱して配布できない。
    AAC encoders - Hydrogenaudio Knowledgebase

    しかし、実はiTunesがインストールされたWindows上のOBSでは、以下のようなログが表示される。

    [CoreAudio encoder]: Adding CoreAudio AAC encoder
    

    CoreAudioとはまさに、あの天下のApple様が先端技術の粋を集めて開発した世界最強AACエンコーダを含む音声系フレームワークである。
    WindowsにiTunesがインストールされていれば、AppleのありがたいAACエンコーダを使わせて頂けるという訳だ。
    言わずもがなMacOSはデフォルトで対応している。

    設定 -> 出力 -> 音声で音声ビットレートにマウスオーバーすると確認できる。

    • iTunesが入っていない環境: FFmpeg 既定のAACエンコーダ
    • iTunesが入っている環境: CoreAudio AACエンコーダ
    WindowsのOBSはiTunesが入っている環境では配信の音質が向上する

    iTunesを入れる必要がない環境でもAppleのAACエンコーダを使うために、旧バージョンのiTunesのインストーラからAppleApplicationSupportのインストーラだけを取り出してインストールする方法もある。
    OBS-Studio: Enable CoreAudio AAC encoder (Windows) | OBS Forums
    Troubleshooting issues with iTunes for Wi… - Apple Community

    1. Appleのコミュニティフォーラムから旧バージョンのiTunes 12.9.1.4 for Windows (64-bit)インストーラをダウンロード
      https://itunes.apple.com の previous versions of iTunes でもよい
    2. iTunes64Setup.exeは実行しない
    3. 7-Zip等を利用してiTunes64Setup.exeを展開しAppleApplicationSupport64.msiを取り出す。
    7z x iTunes64Setup.exe
    
    1. AppleApplicationSupport64.msiを実行してApple AACエンコーダをインストール

    OBSはiTunesを入れると音質が劇的に向上する - 科学無謬論 - Medium
    根津ちずも🧀さんはTwitterを使っています 「OBSの音質わるいっぽい問題、どうやら元から導入されてるFFmpeg AACエンコーダが原因っぽくて... / Twitter

    リプレイバッファ #

    リプレイバッファを実行しながらゲームをプレイしておけば、名場面の後に保存を押すことで、ストレージ容量を気にせず動画を残せる。
    バックグラウンドでエンコードが常に実行され、保存する秒数分システムメモリ上に直近の動画が置かれる仕組みなので、あくまでも名場面だけをストレージに残す目的で、負荷軽減の機能ではない。

    ShadowPlay インスタントリプレイ OBS Studio リプレイバッファ
    負荷 小さい 小さくも大きくもできる
    ファイルサイズあたりの品質 あまりよくない よくできる
    リプレイのキャッシュ先 ストレージ(SSD, HDD)
    -> 高耐久なSSDが必要。CrystalDiskInfoで寿命を確認した方がよい。
    システムメモリ(RAM)
    -> システムメモリに空きが必要というほど使わない
    遡れる時間 20分 システムメモリ次第(基本的に劣る)
    HDR 対応 未対応
    配信中にリプレイを流す #

    これらを駆使すれば、負荷を増やさず配信を遡ってリプレイを配信に載せられる。
    リプレイ専用のシーンをつくると尚よい。

    音声 #

    設定 -> 音声

    項目 説明
    サンプリングレート 48kHz
  • YouTubeの推奨値は44.1kHzだが、#YouTubeの劣悪エンコード事情への対処法にある通り、実際には48kHzの方が都合が良い。
  • オーディオインターフェース側のサンプルレートも合わせたほうが良い。
  • チャンネル ステレオ
  • 大抵のプラットフォームはステレオ。特殊な用途でない限り弄らない。
  • デスクトップ音声デバイス スピーカー
    SPDIF
    ライン
  • Windows上の"再生デバイス"に該当する。
  • スピーカーやヘッドホン、オーディオインターフェイスの出力デバイス名を選択する。
  • AIFのループバック機能を使用する場合はデスクトップ音声がマイク音声に返される。その場合こちらを有効にする必要はないが、ボイスチャットや分けて編集したい場合はそれを使用せずOBSの機能を使おう。
  • Windows Update、AIFの抜き差し、サンプルレートの変更等でDeviceIDが変更されると、"デバイスが接続されていないまたは利用不可"になります。再設定が必要です。
  • マイク音声デバイス マイク
    ライン
    Analog Input
  • Windows上の"録音デバイス"に該当する。
  • マイク、ウェブカメラ、オーディオインターフェイスの録音デバイス名を選択する。
  • 複数デバイスにそれぞれループバックを設定できるAIF(RME TotalMix等を使用して)の場合、再生デバイスをこちらに登録することもできる。マイク、Discord、Minecraft、BGMをそれぞれ別のデバイスで再生することで、アプリケーション毎に音声を分けて録音できる。
  • Windows Update、AIFの抜き差し、サンプルレートの変更等でDeviceIDが変更されると、"デバイスが接続されていないまたは利用不可"になります。再設定が必要です。
  • アプリケーション毎に音声を分けて録音する #

    VoiceMeeterでも一応可能だが、TotalMix Fxが使用できるRMEのオーディオインターフェースが楽で高品質。
    アプリケーション毎に別のデバイスから音声を出力させるよう設定し、その全ての音をモニターしたり、それらの中で任意の音声デバイスをそれぞれ別のストリームに録音できる。

    OBS
    • 1つのAIFに複数の音声デバイスがある
    • 個々の音声デバイスで「ループバック」を設定可能
    • 個々の音声デバイスは、OBSやDiscordなど、あらゆるアプリケーションで「別の音声デバイスとして認識される」
    • 音声デバイスすべて・または一部の音声自由に選び、同じスピーカーとして自分で聞ける

    要するに、

    • マイクとデスクトップ音声を分けるのが通常だが、デスクトップ音声が複数あるので、通話とゲームの音声を分けられる
    • ライブ配信の音声をモニターしても、配信に載せないことが可能
    • ボイチェンの出力を1つのAIFでルーティングできる
    • 聞いているBGMを配信に載せない、配信のBGMを聞かないことが可能

    そんな夢のデバイスが世にはあります。

    AD/DA・マイクプリ・クロックは言わずもがな(AG03の音質に満足できない!という方にもオススメ)、その品質を抜きにしても、少なくともWindows上で配信・録画用途で使用する場合、同価格帯のUniversal Audio Apollo Twin MkII等とは比べ物にならないアドバンテージがあると言えるでしょう。

    ただ私も(紆余曲折を経て)愛用しているBabyface Pro FSは、Dynamics(Expander/Gate)機能が省かれている点が少々残念。
    OBSやDiscordに最低限の機能はあるのでそれを承知で購入したが、やはり少々不便な時もある。
    対応の有無は日本支部公式のPDFを参照。

    https://synthax.jp/pdf/RME_TotalMix-FX-2017.pdf

    OBSを起動すると他の音量が小さくなる #

    1. タスクバー右のスピーカーアイコンの右クリックメニュー -> サウンド -> Windowsが通信アクティビティを検出したとき: 何もしない に設定する

    2. 設定->詳細設定->音声の"Windowsの音量を自動で下げる機能を無効にする"にチェック

    音が出ない #

    初期設定が間違っている場合 #
    前回は大丈夫だったのに音が突然入らなくなった #

    Windowsにおいて、以下の場合にDeviceIDが変更され、OBSの設定と食い違ってしまう場合があります。

    • Windows Updateやクリーンインストール
    • オーディオインターフェースのドライバの更新
    • (WASAPIやASIOを使用するなどして)サンプルレートが変更された

    サンプルレートが変更されただけの場合は、サンプルレートを元に戻すだけでOBSに音が入るかもしれませんが、その他の場合は設定->音声の再設定が必要になります。

    マイクの音が左からしか聞こえない #

    PC直差しの場合は恐らく起こらないが、AIF(オーディオインターフェース)等でモノラルマイクの音声を扱う際、AIFのコンソールかOBS側でL側の音声をLR両方に出すように設定する必要がある。

    AIFによっては鎖のアイコンやらステレオ/モノラルトグルやらで設定できると思う。
    AIFだけではLのみにしか流せない場合、OBS側で以下のように設定する。

    オーディオの詳細プロパティでマイクの"モノラルにダウンミックス"または"モノラル"のチェックボックスを有効にする。

    音が返ってくる #

    • Windows サウンドのプロパティで"このデバイスを聴く"にチェックが入っていないか
    • ブラウザ等で自分の配信をプレビューしている場合、ミュートされているか
    • オーディオインターフェースや仮想オーディオデバイスで間違ったルーティングになっていないか

    マイクのノイズを消したい #

    OBSのフィルタを使う #

    Discordで言うところの入力感度と同じ、オーディオインターフェースにあるようなノイズゲートを使用できる。
    音量が閾値を超えると、ゲートが開放され音が入る。
    音声フィルタを参照。

    RTX Voiceを導入する #
    OBS

    NVIDIA GeForce RTXシリーズで利用できる異次元のノイズ除去仮想オーディオデバイス。
    一般的なノイズ除去とはまるで違う。机バンバンしてもポテチ食ってもバレない。

    NVIDIA RTX Voice: Setup Guide

    RTX Voiceを起動し、マイクを選んで"Remove background noise from my microphone"を有効にし、設定 -> 音声でNVIDIA RTX Voiceを選択することで使用できる。

    • Input device"マイク (NVIDIA RTX Voice)"を設定 -> 音声のマイク音声に設定し、自分が話す声にノイズ除去を掛けるのが基本的な使い方。
    • Output device"スピーカー (NVIDIA RTX Voice)"は設定 -> 音声の"デスクトップ音声"で使用でき、こちらでボイスチャット相手の声にノイズ除去を掛ける、といった応用的な使い方ができる。ただし、一般的にデスクトップ音声は他のゲーム音等も含まれるため、アプリケーション毎に音声を分けて録音できる環境 向け。

    対象外のNVIDIA GTXシリーズで実行させるハックが紹介されている。
    ASCII.jp:RTX Voiceの超強力なノイズキャンセルはゲームプレイにどの程度影響するのか検証してみた

    オーディオインターフェースを導入する #

    ノイズはそもそも最初から少ない方が良い。
    そもそもPC内蔵や直挿しのマイクの場合、一定以上の音質はどうあがいても望めない。
    因みに、音質を良くするとき、マイクやヘッドホンを更新する例があるが、
    実はAD/DA、つまりDACやAIF(オーディオインターフェース)に先に投資したほうが費用対効果が大きい、というのを頭の片隅にでも置いておいてほしい。

    予算が少ない・既存のプラグインパワーのマイクをそのまま使いたい・初心者でも使いやすい

    予算に余裕がある・今後買い換えたくない・アプリケーション毎に音声を分けて録音したい

    映像 #

    項目 説明
    基本(キャンバス)解像度 3840x2160(UHD 4K)
    2560x1440(WQHD)
    1920x1080(FHD)
    1280x720(HD)
  • OBSの映像ソースを配置するキャンバスの解像度。
  • 解像度の変更は負荷と品質に悪影響があるので、基本的にディスプレイまたはメインのソース(ゲーム等)の解像度に合わせる(ドットバイドット)。
  • 16:9のディスプレイが推奨される。配信、録画用途では16:10や21:9の解像度は不具合の元なのでオススメしない。
  • 出力(スケーリング)解像度
  • 配信、録画の出力解像度。
  • 解像度の変更は負荷と品質に悪影響があるので、基本的にキャンバス解像度に合わせる(ドットバイドット)。
  • スペックが間に合っていても、プラットフォームによる制限やネットワーク品質の都合で、解像度に見合ったビットレートが出せない場合は縮小することも考える。拡大はしない。
  • 配信プラットフォームが対応している限り、ビットレートや負荷軽減の為のダウンサンプリングは推奨されない
  • 規格にない中途半端な解像度にすべきでない。936p60の罠
  • ソースそれぞれには別途異なるスケールフィルタがデフォルトで適用されているため、ソースの拡大縮小を行っている場合はそちらにも注意する必要がある。
  • 縮小フィルタ バイリニア
    面積(エリア)
    バイキュービック
    ランチョス
  • スケーリングアルゴリズムの選択。
  • キャンバス解像度と出力解像度が同じなら、スケーリングは行われない
  • 縮小する場合はAreaを使う。ゲームの描画品質が馬鹿みたいに高くない限り、Areaでないと縮小時にジャギーが目立ってしまう。
  • 特に用事がなければBicubicまたはLanczosを選んでおけば良い。Bicubicの方が負荷は小さく、Lanczosの方が一般的に高品質。
  • FPS共通値 30
    60
  • 動画投稿SNSにアップロード、ライブ配信には30または60fpsを選択する。
  • 29.97や59.94fpsは配信用途では基本的に使用しない。
  • ビットレートが潤沢に割り当てられていない場合、下手に60fpsにするよりも30fpsの方が視覚的な品質は向上する。
  • ゲーム配信なら60fpsを選んだ方が良いが、ゲーム内フレームレートが出ていなかったりエンコードが間に合わない場合は潔く30fpsに落とす。
  • 映画風のテイストにしたい場合、プラットフォームが対応していれば24fpsもあり。
  • FPS分数値 30fps: 30/1
    60fps: 60/1
  • 基本的にこちらを使う必要はない。FPS共通値で選べないようなフレームレートを選びたい場合はこちらで指定する。
  • 1/1fps、1/6fps、1/15fps等も使える。これを使ったハックを応用で紹介している。
  • 29.97fpsは30000/1001fpsに該当する。
  • 936p60の罠 #

    Twitchというゲーマー向け配信プラットフォームでは、上限8500kbpsという少ないビットレートの制約のなかで、FHD(1920x1080)ではなく1664x936という謎規格の解像度が一部で絶大な支持を受けているようだ。
    1664x936は一見中途半端だが、縦横共に8で割り切れる値という意味があるようで、これは恐らくH.264のブロックサイズのことを言いたいのだと思うが、これは8x8だけではないし、FHD(1920x1080)やHD(1280x720)も同じ条件だから考えなくてよい。
    HEVCやAV1ではより細かなマクロブロックを柔軟に組み合わせられるようになり、負荷が上がるもののビットレートあたり品質が向上しているので、今後考えなくてよくなるだろう。

    そもそもの目的に目を向けると、確かに8.5Mbpsは物足りないがTuring NVEnc H.264 VBRにおけるビットレートと品質の関係のグラフを見れば、近年の高品質なハードウェアエンコーダであれば十分な品質を出せることがわかる。

    1664x936で配信する場合、キャンバス解像度及びゲーム解像度を1664x936に合わせないと、かえってスケーリングで大きく品質が悪化する。もしかすると、スケーリングによってディテールを失った分も含めて、少ないビットレートでも破綻しづらいだけかもしれない。
    近年のスマートフォンは、OLEDのペンタイル配列によってドットバイドットのドの字もないから気にしなくてよいが、それでも不必要なスケーリングによって失われるディテールや色は、お手元にあるiPhoneのような高品質な端末ではかなり目立つはずだ。 また、多くのPC環境で1664x936を1920x1080に再度引き延ばして視聴することになるので、これも滲んで宜しくない。

    オススメは設定を煮詰めて1920x1080で配信すること。次点で1280x720

    画面解像度 - Wikipedia
    Twitch Streamers - Broadcasting Guidelines
    Guide to Broadcast Health and Using Twitch Inspector

    ホットキー #

    ミュート、ミュート解除にDiscordのミュートのキーを割り当てておくと便利だよ!
    録画開始・終了に割り当てるのは良いが、配信は誤爆防止の為にここで設定するようなキーの組み合わせを使う一般的なキーボードやマクロには割り当てるべきではない(Elgato Stream Deckの場合は仕組みが違うので例外)。

    詳細設定 #

    項目 説明
    一般 プロセスの優先度 通常
  • 基本的に通常、高は非推奨。
  • 映像 カラーフォーマット NV12
  • ハードウェアエンコーダに使用されるYCbCr 4:2:0のピクセルフォーマット。YouTubeの推奨値でもあり、他のプラットフォームでも基本的にこちらを使用する。
  • 必要であれば、I422やI444を使用しても良い。
  • RGBを使用したい場合はUtVideoを使用する。
  • YUV色空間 709
  • 基本的にRec.709を使用します。
  • Rec.2020には非対応です。
  • YUV色範囲 一部
  • 一部はリミテッドレンジ・TVスケール。全部はフルレンジ・PCスケール。
  • RGB Full環境でも、フルレンジは基本的に使用しません。
  • 音声 音声モニタリングデバイス 既定
  • オーディオの詳細プロパティで音声モニタリングを設定した場合の出力先。基本的に使用しない。
  • 録画 ファイル名書式設定 %CCYY-%MM-%DD_%hh-%mm-%ss
  • 既定値ではISO 8601に寄せてあり、実際には2020-02-20_20-02-22.tsにようになる。
  • ファイル名にハイフンは兎も角、スペースが入るのは好ましくない。
  • ネットワーク IP選択
    Bind to IP
    既定
  • 複数のNICがある場合などに、任意のインターフェースを選択できる。
  • IPv6で配信する必要があるなら、YouTubeではHLSを使用するか、RTMP(S)なら既定からIPv6アドレスが付与されたネットワークインターフェースに変更する。
    2001:db8:b0ba:10ee...のようなグローバルIPv6アドレスや一時IPv6アドレスを選ぶ。リンクローカルアドレスfe80...ではない。
  • どちらがグローバルIPv6アドレスか一時IPv6アドレスかはコマンドプロンプトで確認できる。
    ipconfig /all
    
  • 一時IPv6アドレスを使用するべきだが、RTMPSでは切断/接続を繰り返したり、配信停止時にOBSがハングアップする場合がある。このとき、グローバルIPv6アドレスを使用するよりは、HLSやRTMPを使った方がよい。
  • IPv6アドレスは一般に(日本のフレッツ東西において、特に固定IP契約を結ばない場合)半固定なので、PCやHGW/ルータを再起動する程度では設定変更なく動作する。
    ただし、長時間のネットワーク切断やPCのNICの初期化、または通信事業者側の工事などで予告なく変更される場合がある。
    配信開始時に無効なIPアドレスにバインドしようとした可能性がありますが出るので、この設定を見直せばよい。
  • 輻輳を管理するためにビットレートを動的に変更する(ベータ版) 無効
  • RTMP配信でネットワークドロップが発生した場合に配信のビットレートを数分間制限し、数分後ネットワークに問題がなければビットレートを元に戻す機能。
  • Numpad 0–6キーで制限中のビットレート上限を変更できる。0(制限なし)、1000–6000Kbps。
  • ネットワークの最適化を有効にする
    新しいネットワークコードを使用する
    有効
  • ノンブロッキングソケットではなく、イベントベースのAPIをストリーミングに使用する。フレームドロップや切断の改善に役立つ場合がある。
  • TCPページングを有効にする
    低遅延モード
    無効
  • ネットワークバッファを可能な限り高速に維持し、その占有率を可能な限り低く保つことで、同じPCで同時に実行されている他のネットワークプログラム(ゲームなど)への影響を減らすことができる。
  • 安定した回線でない場合、フレームドロップの原因になる場合がある。
  • YouTubeの低遅延モードとは無関係。
  • ソースの表示/非表示のキーとスタジオモードと一緒に使う場合、トランジションに同じキーを割り当てれば可能だが、あまり自由度が無いので敢えてスタジオモードを使わないという選択肢もある。
    ソースの右クリックメニュー -> 変換と組み合わせれば、スタジオモードと遜色なく操作できます。

    YouTube側の設定 #

    配信時はOBSで映像・音声のソース、エンコードの設定を行い、YouTube等の設定でタイトルや概要、公開設定や遅延等のプラットフォーム側のモード選択を行います。

    配信プラットフォーム側の設定画面に記載されているRTMP URLに対してストリーミングすることで、YouTube側で設定されたタイトル等が適用され、視聴者側に反映されます。

    ライブダッシュボード #

    ※この項目は古いです

    配信・コメントのプレビュー、YouTube側の設定を行う
    Live Dashboard - YouTube

    基本情報 #

    タイトル、概要欄はお好みで。
    #Minecraft #Apex #Fortnite のように入れるとタイトルの場合はタイトル文字列内に、概要欄の場合はタイトル上にタグを表示できる。
    カテゴリは"ゲーム"を選択し、該当するものを選んでおくと良い。
    プライバシーは取り敢えず誤爆防止に"非公開"(又は限定公開)で。配信設定が終わったら"公開"にしてライブしてみよう。

    ストリームオプション #

    DVRを有効にする: 視聴者が再生時に巻き戻せるか否か。お好みで。
    完了時にアーカイブを限定公開にする: 非公開ライブのアーカイブは既定で非公開、限定公開・公開も同様に引き継ぐが、公開でライブ後も既定で限定公開にすることも可能。
    ストリームの最適化: 画質を優先する場合や4Kの場合は通常の遅延。品質を犠牲にコメントとの会話を優先するなら低遅延や超低遅延。

    エンコーダーの設定 #

    ストリーム名/キーをOBSで使用する。サーバURLは基本不要(FFmpegカスタム出力等で使用する)。

    ライブ配信を開始 #

    YouTubeの新しいライブ配信UIでは、以前とは違い配信ソフトで配信開始した後、こちらで配信を開始すると実際に配信が始まる仕様になっています。
    少々面倒になったが、不具合や誤爆等による放送事故を防ぎやすいという意味でも良いアップデートでしょう。

    1. YouTubeのトップページから、ライブ配信を開始にアクセスし、エンコーダ配信タブを選択します。
      管理タブでは、ライブ予約枠や正しく終了できていないライブの削除を行えます。
      ライブ配信を開始

    2. 既定値から全て設定し直す場合は"新しいライブ配信"、
      前回のライブの設定を流用する場合は、流用元を選び"コピーして作成"を選択します。

    ライブ配信を開始
    1. タイトルや説明を記述してください。
      説明欄に#Minecraftのようにハッシュタグを追加すると、タイトル上に表示されます(3つまで)。
      説明欄の改行は正しく表示されないので、テキストエディタで編集してコピペするといいでしょう。
      はじめての場合は公開ではなく、限定公開でテストしましょう。非公開はログインが必要になるので、例えばコメントをOBSで表示することは出来ません。
      また、どの公開設定でも著作権に触れるものは容赦なく削除されます。クラウドストレージのような使い方は出来ません。
      後でスケジュール設定を有効にすると、ライブ配信枠の予約ができます(公開の場合はこの時点でチャンネル登録者に表示され、例えばZapierの連携では通知が飛びます)。無効にすれば、今すぐに配信するモードになります。
    ライブ配信を開始
    1. ストリームキーをOBSの設定->配信を参考に設定します。
      タイトルやカテゴリ等は後からでも鉛筆アイコンから修正できます。
      "設定"をクリックして次へ
    ライブ配信を開始
    1. ライブ配信の設定を行います。
      設定は1つの枠に1つまでで、配信開始後にそれを変更することはできません。
      DVRを有効にすると、視聴者は放送中でも巻戻しが出来ます。
      配信が4Kの場合、画質をより良く場合(YouTube側のエンコードの設定が変わります)は通常の遅延、コメントとのタイムラグを小さくしたい場合は低遅延や超低遅延を選択します。
    ライブ配信を開始
    1. OBSで配信開始すると、"ライブ配信を開始"が選べるようになります。"ライブ配信を開始"を押下すると、その時点でYouTubeが配信を開始します。視聴者に公開されるのはここからです。
      少し遅延があるので、準備している時の映像や音声が流れないよう、プレビューを観ながら余裕を持って開始しましょう。
    ライブ配信を開始
    1. 配信が開始されると、新しいライブダッシュボードへ飛ばされます。
      この画面はライブ予約または配信中であれば管理タブからもアクセスできます。
      配信を終了する場合は、右上の"ライブ配信を終了"を押下してから、OBSで配信終了します。そうすることで、視聴者側で「クルクル」せずスマートに配信を終了できます。
    ライブ配信を開始

    応用 #

    配信・録画品質を保つ為に気を付けること #

    OBS側を煮詰めても、上流であるプレイ画面や操作画面等の映像、マイクや楽器等の音声ソースが汚ければ、それ以上の品質は出ません。
    映像は余裕のあるスペックのマシンでゲームを綺麗に描画し、音声は良いプリアンプとADを載せたAIFを使用しましょう。
    そして最後に、出来る限り綺麗なエンコードが可能なTuring世代のNVIDIA製GPUを選びましょう。
    次の項で私のメインPCと周辺機器から録画・配信に関連する項目をリストしておきます。

    OBSに画質を求めるのは間違っていません。

    配信・録画向けPC構成 #

    配信・録画には映すソース(ゲーム等のアプリケーション)に必要なリソース+αの処理能力が必要です。
    ただし盲目的にCPU、GPUの強化を推奨しているものは、選ぶパーツや不適切なエンコード設定によってはまるで無意味な場合もあります。
    正しくOBS側の設定を行う前提で、リアルタイムエンコードのパフォーマンスと品質において優れ、その中でより効率的な組み合わせを選択すると、より快適な配信・録画環境を構築できます。

    カテゴリ 私の環境(例) 理由
    CPU Intel Core i7 8700
  • Intelならh264_qsv LA-ICQに対応したHaswell以降。QSVが使えると、NVEncが足りなくなったときに便利です。
  • AMDの場合、ネイティブAVX-256に対応し、IntelCPUとの差が縮まったZen2世代(3XXX番台)を選ぶ。
  • コア数が大きいのは構いませんが、そのメニーコアを使い切れるかはx264では絶望的、x265でも限界があります。
  • dGPU NVIDIA Geforce RTX 2080
  • Turing世代のNVEncが使用できるNVIDIA製のグラフィックボード(GTX 1650 Super~)を推奨。
  • Radeonがこれに勝るならエンコード引数を教えてほしい。買います。
  • DRAM 32GB
  • OBS以外でカツカツにならない程度あれば良いでしょう。
  • 8GBではブラウザ開いて終わりなので16GB~あった方が良いでしょう。
  • 4K8Kのソフトウェアエンコードをするなら割と食べるので注意。
  • SSD Sandisk Extreme Pro NVMe 1TB
  • システムドライブがHDDな環境は流石に無いと思いますが、万が一にもSSDでないなら即効換装しましょう。
  • 現在のメインストリームは500GB~1TB程度。128GBや256GBを選ぶと同じ製品であっても性能が落ちるのでオススメしません。
  • SATAでも十分ですが、やはり動画を扱うならNVMeにしておくと、QoLが向上します。ただし、M.2端子でもPCIeではなくSATAのものが存在するので注意。また、TLCからQLCに妥協してまでNVMeにする必要はありません。
  • SSDはよく見かける"CrystalDiskMark 1GiBのシーケンシャルの値"は参考にならず、CrystalDiskMark7の現実性能か、HD Tune Pro辺りのベンチを見ると良いでしょう。PCIe4.0である必要はありません。
  • おすすめのメーカーはSandisk・WD、Intel、Samsung辺り。
  • AIF RME Babyface Pro FS
  • オーディオインターフェースは重要。もし予算があるなら、RME TotalMixが使えるものにしておくと、Voicemeeterで頑張る手間も減り、録音・再生品質も向上できる、実はコスパが良かったりします。
  • Babyface Pro FSかFireface UCXをオススメします
  • Mic SPL(Hong Kong)Limited XCM6035 + RODE VXLR+ + CANARE EC03
  • これはWM-61A相当品と言われているXMC6035というECMカプセル(50円)を用いた自作マイクを、無理矢理AIFに対応させる、という構成なので、あまりオススメはしません。ただし、割に良い音は出ます。
  • OBSが使用するスレッド数を制限する #

    Ryzen 9やThreadripper等のメニーコア環境で、論理コアを半分ずつOBSとゲームに割り当てたり、プロセスがCCXを跨がないようにする設定。
    既に起動しているプロセスにしか効果がないので注意。

    • タスクマネージャーtaskmgr.exeの詳細タブでobs64.exeや任意のゲームプロセスで右クリック -> 関係の設定から変更する方法
    OBSが使用するスレッド数を制限する タスクマネージャー 関係の設定
    • Windows PowerShellpowershell.exeでプロセスに対しProcessorAffinityを設定する方法
    # obsのプロセスを見つける
    Get-Process | Where-Object {$_.ProcessName -match "obs"}
    
    Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
    -------  ------    -----      -----     ------     --  -- -----------
       4354      84  1150624     474372   6,940.42   4240   1 obs64
        350      21     7856      24216       0.13   1552   1 obs-browser-page
        524      27    50596      45448       0.36  19420   1 obs-browser-page
        301      28    28496      50948      14.67  21232   1 obs-browser-page
    
    # obs64プロセスの詳細を見る
    Get-Process obs64
    
    Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
    -------  ------    -----      -----     ------     --  -- -----------
       4354      87  1212196     473740   6,994.94   4240   1 obs64
    
    # obs64プロセスのProcessorAffinityを設定する
    # 2進数000011111111はCPUの論理コアを表す この例では8/12スレッドをOBSに割り当てている
    (Get-Process obs64).ProcessorAffinity = [Convert]::ToInt32(000011111111,2)
    

    cf. Process.ProcessorAffinity プロパティ (System.Diagnostics) | Microsoft Docs

    因みに、エクスプローラexplorer.exeのProcessorAffinityを変更すると、その後に起動したプロセスはそれに従って同じProcessorAffinityになる。
    タスクスケジューラtaskschd.mscでシステム起動時に指定するなど、色々応用できると思う。

    YouTubeの劣悪エンコード事情への対処法 #

    「YouTubeにうpしたらなんか汚いな…」

    YouTubeはアップロードされた動画を全て再エンコードすることはよく知られています。
    良くある間違いは「できる限り高ビットレートでエンコードしたものをアップロードすると良い」というものです。

    • YouTubeのエンコーダは、解像度に対してビットレートの割り当てが小さく、更にエンコーダの品質自体も決して良くないため、自分のマシンで破綻しない程度に圧縮してからアップロードしたほうがマシなより良い品質が得られる。

    • YouTubeのビットレート割り当てが小さいなら、擬似的に解像度を盛れば比較的高いビットレートでエンコードしてもらえる。

    • YouTubeが提供するエンコードのうち、映像はH.264とVP9、音声はAACとOpusがあるが、弱小チャンネルや再生数の小さい動画には品質の高いVP9やOpusが提供されない。

    上記を満たすために、下記のようなアプローチを行う。

    YouTubeの再エンコ品質改善
    #動画映像の再エンコ品質 #配信映像の再エンコ品質 #動画音声の再エンコ品質
  • 疑似4K(8K)動画
  • 疑似60fps
  • 黒帯
  • 疑似4K配信
  • flac
  • 48kHz/24bit
  • True peak: -1.0dBFS以下
  • Integrated loudness: -13.5~-13.0LUFS
  • 動画映像の再エンコ品質 #

    一応「アップコンバート」や「フレーム補間」をするわけだが、決して滑らかにする目的ではないことに注意。
    そのため、ただ編集ソフトで8Kや60fpsを指定しても良い結果は得られない。

    • 疑似4K8Kをする場合、スケールアルゴリズムはニアレストネイバー法を選ぶ。
      所謂ドット絵を滲ませずに拡大するのと同じで、解像度のかさ増しのために元の映像を滲ませてしまっては元も子もない。

    • 補間しない60fps補間。これも同様に、30fpsを60fps、24fpsを48fpsに水増しする際、ヌルヌルな映像になるようフレームを補間するのが目的ではなく、そのfpsに合わせたビットレート設定でYouTubeにエンコードしてもらうことが目的。

    • DCIやシネスコの縦横比にクロップする。更に黒帯を追加し、その分ビットレートを稼ぐ。

    上記が出来るソフトとなるとFFmpegほぼ一択となる。

    /blog/ffmpeg

    1920x1080を3840x2160にニアレストネイバー法でスケーリングするビデオフィルタの例。

    -vf scale=3840:2160:sws_flags=neighbor
    

    1920x1080をDCI風のアスペクト比になるような黒帯を追加した7680x4320に拡大し、滑らかなフレーム補間が一切ないフレームの水増しを行う例。

    -vf crop=1920:1012,pad=width=1920:height=1080:x=0:y=34,scale=7680:4320:sws_flags=neighbor,fps=60
    

    ↑のソースが3840x2160版。

    -vf crop=3840:2026,pad=width=3840:height=2160:x=0:y=67,scale=7680:4320:sws_flags=neighbor,fps=60
    

    以下は私が普段使ってる引数なので、-vf ~~辺りを置き換えると綺麗かつ高速にエンコードできると思う。
    -bf 2はTuring以降のみ使用可能なので、Pascal以前は-bf 0とすること。

    ffmpeg -i input.mp4 -c:a copy -vf ~~ -c:v hevc_nvenc -preset:v slow -profile:v main -rc:v constqp -rc-lookahead 32 -init_qpI 21 -init_qpP 24 -init_qpB 25 -g 30 -bf 2 -refs 6 -pix_fmt yuv420p -movflags +faststart out.mp4
    

    配信映像の再エンコ品質 #

    同様にFHDソースをニアレストネイバー補間でUHD 4Kに拡大し、ライブ配信することでより高品質な配信/アーカイブを残させる。

    項目 説明
    ファイル -> 設定 -> 出力 -> 配信
    エンコーダ NVIDIA NVENC H.264 (new)
  • 疑似4Kなので、YouTubeの4Kの推奨値ほどビットレートを大きくする必要はないが、少し盛ったほうが良い。
  • あくまで参考値
  • レート制御 VBR
    ビットレート 15000
    最大ビットレート 20000
    ファイル -> 設定 -> 映像
    基本(キャンバス)解像度 3840x2160
  • ここでスケーリングする(キャンバス解像度を1920x1080、出力解像度を3840x2160)と、ニアレストネイバー補間が選べないため、ここは同じ解像度にする。
  • 出力(スケーリング)解像度 3840x2160
    FPS共通値 30
  • 4K60fpsのリアルタイムエンコードはGPU、上り回線と相談しましょう。
  • ソースの右クリックメニュー -> フィルタ -> スケーリング/アスペクト比
    スケールフィルタ ポイント
  • メインのソース(FHDのゲーム画面等)をニアレストネイバー補間で一切滲ませることなく拡大する。
  • 3840x2160と指定しても良い。
  • 解像度 基本(キャンバス)解像度

    動画音声の再エンコ品質 #

    ほぼこちらの方の内容です。
    YouTubeにアップロードする動画の音声は、推奨の44.1kHz/16bitなaacではなく、48kHz/24bitのflacが良さそうです。

    https://vocal-edit.com/blog/2019/01/11/youtubeで最高音質を目指す/

    • flac 48kHz/24bit
      FFmpegカスタム出力flacを選択し、mp4に無理矢理詰める場合は適切に設定します。
      因みに、OBSは宗教上の理由から24bitに対応しないようです(FFmpegカスタム出力で対応)。

    • True peak: -1.0dBFS以下

    • Integrated loudness: -13.5~-13.0LUFS

    下記はFFmpegでリアルタイムなマイク音声Analog (1+2) (RME Babyface Pro)を取得し、True peakとIntegrated loudnessを取得する例。

    C:\Rec\obs>ffmpeg -f lavfi -i "amovie='audio\=Analog (1+2) (RME Babyface Pro)':f=dshow,ebur128=peak=true" -f null -
    (Qキーで終了)
    
    [Parsed_ebur128_1 @ 000002670bacbc40] Summary:
    
      Integrated loudness:
        I:         -24.0 LUFS
        Threshold: -35.2 LUFS
    
      Loudness range:
        LRA:         9.9 LU
        Threshold: -45.5 LUFS
        LRA low:   -31.3 LUFS
        LRA high:  -21.4 LUFS
    
      True peak:
        Peak:       -3.1 dBFS
    

    マイク音声Analog (1+2) (RME Babyface Pro)にあたるデバイスを取得するコマンド。

    C:\Rec\obs>ffmpeg -hide_banner -list_devices true -f dshow -i dummy
    
    [dshow @ 000001510adffa80] DirectShow video devices (some may be both video and audio devices)
    [dshow @ 000001510adffa80] Could not enumerate video devices (or none found).
    [dshow @ 000001510adffa80] DirectShow audio devices
    [dshow @ 000001510adffa80]  "ADAT (7+8) (RME Babyface Pro)"
    [dshow @ 000001510adffa80]     Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{635F1A57-FD89-4820-9A1D-F105515D2989}"
    [dshow @ 000001510adffa80]  "SPDIF/ADAT (1+2) (RME Babyface Pro)"
    [dshow @ 000001510adffa80]     Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{3DCB7A75-7200-4418-9910-432DC9425902}"
    [dshow @ 000001510adffa80]  "Analog (1+2) (RME Babyface Pro)"
    [dshow @ 000001510adffa80]     Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{E8005C12-7765-47D1-90F8-E73C89577884}"
    ...
    dummy: Immediate exit requested
    

    カレントディレクトリのinput.wavを読む例。

    C:\Rec\obs>ffprobe -i "amovie=input.wav,ebur128=peak=true"
    

    FFmpegでラウドネスノーマライゼーションをかける例。

    loudnorm
    意味 引数 推奨値
    Integrated loudness I -13.5~-13.0LUFS -13.5
    True peak TP -1.0dBFS以下、既定値は-2.0 -2.0
    Loudness range LRA 既定値は7、GoogleやAmazonが11を指定してるので従うことにした 11
    C:\Rec\obs>ffmpeg -i rec.mp4 -filter_complex "[0:1]loudnorm=I=-13.5:TP=-2:LRA=11[mic]" -strict -2 -ar 48000 -c:a flac -c:v copy -map 0:0 -map "[mic]" out.mp4
    
    C:\Rec\obs>ffmpeg -i out.mp4 -filter_complex "[0:1]ebur128=peak=true" -f null -
    
    [Parsed_ebur128_0 @ 0000022e385d18c0] Summary:
    
      Integrated loudness:
        I:         -16.9 LUFS
        Threshold: -27.7 LUFS
    
      Loudness range:
        LRA:         8.4 LU
        Threshold: -37.9 LUFS
        LRA low:   -22.7 LUFS
        LRA high:  -14.3 LUFS
    
      True peak:
        Peak:       -1.7 dBFS
    

    エンコード無しで数百倍速のタイムラプスをつくる #

    一般的な動画編集ソフトのフィルタでは、8倍速まで、のように制限があったり、プレビューが重くなったりと限度がある。
    しかし、動画の構造を理解していれば、再エンコード無しで数十、数百、数千倍速の動画、もといタイムラプスを容易につくることができる。
    この方法なら24時間録画し続けても、然程のファイルサイズにならないというメリットもある。
    例えば、1fpsで録画した動画のタイムスタンプを無視して30fpsとして読み込むと、1x30=30倍速となる。

    録画時のFPS キーフレーム間隔
    (フレーム)
    30fpsにした場合の倍率
    全フレームを使用 キーフレームのみ使用
    30fps 15 (1x) 15x
    60fps 30 (1/2x) 15x
    1fps 4 30x 120x
    1/6fps 4 180x 720x
    1/15fps 4 450x 1800x

    30fpsや60fps等の等倍速の動画として使えるものでも、後からキーフレームのみ使用することで簡単に早送りを生成することが可能。

    1fpsや1/6fps等のタイムラプス専用の動画も、全フレームを使用する場合とキーフレームのみ使用する場合の2通りの倍速が再エンコード無しで作成可能。

    因みに、全フレームがキーフレーム(ALL-I)の場合、"全フレームを使用"="キーフレームのみ使用"となる。
    ビタミンC1個分のレモンがビタミンC1個分なのと同様である。

    では実際にやってみよう。

    1. 設定->映像でFPS分数値を選択、分子と分母を指定。
    2. 設定->出力->録画でキーフレーム間隔を設定。
    3. 録画
    4. FFmpegを使う。

    /blog/ffmpeg

    以下はH.265で録画した場合の例。H.264の場合の拡張子は.264となる。

    rem 素材のある場所に移動
    cd "C:\Rec\obs"
    
    rem tsで録画している場合はmp4に変換
    ffmpeg -i rec.ts -c copy rec.mp4
    
    rem 音声を含んでる場合はタイムラプスにする前に除外する
    ffmpeg -an -i rec.mp4 -c copy rec.mp4
    
    rem 複数ファイルを一括で処理する場合
    ffmpeg -f concat -safe 0 -i input.txt -c copy rec.mp4
    
    rem キーフレームのみ使用する場合、-discard nokeyでキーフレーム以外を破棄する  
    ffmpeg -i rec.mp4 -c:v copy tmp.265
    
    rem キーフレームのみ使用する場合、-discard nokeyでキーフレーム以外を破棄する  
    ffmpeg -discard nokey -i rec.mp4 -c:v copy tmp.265
    
    rem 30fpsで読み込んでコピー  
    ffmpeg -r 30 -i tmp.265 -c copy timelapce.mp4
    

    input.txtの例

    file 190405_1300.ts
    file 190405_1400.ts
    file 190405_1500.ts
    

    複数ファイルを一度に処理する場合も再エンコードなしで可能。タイムラプス用に録画したものは、プレビューで確認しながらのカット編集が難しいため、この処理を行った後に行うと良い。

    OBSのビルド #

    配布されているビルド済みのOBSは、同梱されているFFmpegのバージョンが古かったりするので自分でビルドしたい場合がある。
    例えば、下記のように配布されているOBSでは動作しない引数が、

    (最新のFFmpegを組み込んで)自ビルドしたOBSでは動作するようになる。

    いち早く新機能にアクセスしたい場合や、FFmpegカスタム出力でfdk-aacを使用して高音質に録画したい場合、拡張機能を盛り込んでビルドする時にも有効だ。

    下記はOBS公式Wikiの手順を参考にしつつ、コピペできるようCLIでWindows用バイナリをビルドする手順になっている。
    WSLやGit、MSBuildの環境構築手順は他に情報が山ほどあるので割愛する。

    Install Instructions · obsproject/obs-studio Wiki
    Wiki - Install Instructions | OBS

    1. 必要な依存関係をダウンロード・インストールする

    2. リポジトリのダウンロード
      WSLのgit環境等を利用してリポジトリをクローンする。
      GitHubのWebページのDownload Zipではsubmodulesが足りないので下記手順が必須。

    git clone --recursive https://github.com/obsproject/obs-studio.git
    
    # タグ指定
    git clone --recursive https://github.com/obsproject/obs-studio.git -b 27.0.0-rc6 --depth=1
    

    2回目以降、OBSのリポジトリを更新するとき

    git pull --recurse-submodules
    
    1. CMakeでCEFをビルド
      cmake-gui.exeは操作が分かりづらいので、CLIなcmake.exeを使うとよい。
      • -Sには1.でダウンロード・展開したCEFのルートディレクトリを指定
      • -Bにはcmakeの出力先を指定
      • ディレクトリの場所がダメって怒られたらbuild\CMakeCache.txtを消す。エラーメッセージを読もう(自戒を込めて)。
    cmake.exe -S "C:\repos\cef_binary_75.1.16+g16a67c4+chromium-75.0.3770.100_windows64_minimal" -B "C:\repos\cef_binary_75.1.16+g16a67c4+chromium-75.0.3770.100_windows64_minimal\build"
    cmake.exe --build "C:\repos\cef_binary_75.1.16+g16a67c4+chromium-75.0.3770.100_windows64_minimal\build"
    
    1. MSBuildでbuild\cef.slnをビルド
      Windows 10 SDKのバージョンWindowsTargetPlatformVersionはWindows10のバージョンによって異なるので、必要に応じて対応したバージョンに書き換えるか、Visual Studio Installerの拡張機能の管理で追加する。
      必要なのは${CEF_ROOT_DIR}\build\libcef_dll_wrapper\Release\libcef_dll_wrapper.libで、cef.slnをビルドする必要はない。これがないと5.でCould not find the CEF wrapper libraryと怒られ、ブラウザソースが追加されない。
    MSBuild.exe -maxCpuCount -target:build -property:"PlatformToolset=v142;WindowsTargetPlatformVersion=10.0.19041.0;Configuration=Release;Platform=x64" "C:\repos\cef_binary_75.1.16+g16a67c4+chromium-75.0.3770.100_windows64_minimal\build\libcef_dll_wrapper\libcef_dll_wrapper.vcxproj"
    

    ビルドに成功しました。と出ていれば警告を吐いていても問題ない。

    1. CMakeでOBSをビルド
      • -Sには2.でcloneしたリポジトリのルートディレクトリを指定
      • -Bにはcmakeの出力先を指定
      • -DDepsPathには1.でダウンロード・展開したdependencies2019\win64ディレクトリを指定
      • -DQTDIRには1.でQtをインストールした先C:\Qt\5.15.2\msvc2019_64を指定
      • 最新のFFmpegをOBSで使用する場合、media-autobuild_suiteでFFmpegをビルド
        • -DFFmpegPathにincludeディレクトリmedia-autobuild_suite\local64\includeを指定
        • media-autobuild_suite\build\media-autobuild_suite.iniの設定によってOBSのビルドが通らない場合がある。下記で動作確認した。
        [compiler list] 
        arch=3
        license2=1
        standalone=1
        vpx2=1
        aom=1
        rav1e=1
        dav1d=1
        libavif=1
        x2643=1
        x2652=1
        other265=1
        svthevc=1
        xvc=1
        vvc=1
        svtav1=1
        svtvp9=1
        flac=1
        fdkaac=1
        faac=2
        exhale=1
        mediainfo=2
        soxB=1
        ffmpegB2=3
        ffmpegUpdate=3
        ffmpegChoice=1
        mp4box=2
        rtmpdump=2
        mplayer2=2
        mpv=2
        vlc=2
        bmx=2
        curl=1
        ffmbc=2
        cyanrip2=2
        redshift=2
        ripgrep=2
        jq=2
        jo=2
        dssim=2
        avs2=2
        CC=2
        cores=6
        deleteSource=2
        strip=1
        pack=2
        logging=1
        updateSuite=2
        timeStamp=1
        ccache=1
        noMintty=1
        
      • -DBUILD_BROWSERでブラウザソースを有効にし、-DCEF_ROOT_DIRに3.4.でビルドが済んでいるCEF Binaryのパスを指定
      • WindowsのCMakeでビルドする際、OBS_VERSIONを指定しないとビルドできない既知の不具合がある
        Tags · obsproject/obs-studioで選んだバージョンを-DOBS_VERSION_OVERRIDE="27.0.0-rc2"のように指定するか、WSLのcmakeを途中まで走らせて取得したバージョンを-DOBS_VERSION_OVERRIDE="26.0.0-gb2d42c06"のように指定すればビルドできる。
    cmake.exe -S "C:\repos\obs-studio" -B "C:\repos\obs-studio\build" -DDepsPath="C:\repos\dependencies2019\win64" -DQTDIR="C:\Qt\5.15.2\msvc2019_64" -DFFmpegPath="C:\repos\media-autobuild_suite\local64\include" -DCEF_ROOT_DIR="C:\repos\cef_binary_75.1.16+g16a67c4+chromium-75.0.3770.100_windows64_minimal" -DBUILD_BROWSER=yes -DOBS_VERSION_OVERRIDE="27.0.1"
    
    -- copying C:/Users/sbn/Downloads/5.10.1/msvc2017_64/lib/cmake/Qt5Core/../../../bin/libGLESv2d.dll to C:/bin/obs-studio/additional_install_files/exec64d
    -- Configuring done
    -- Generating done
    -- Build files have been written to: C:/bin/obs-studio/build
    
    cmake.exe --build "C:\repos\obs-studio\build"
    
      obs-ffmpeg-mux.vcxproj -> C:\repos\obs-studio\build\plugins\obs-ffmpeg\ffmpeg-mux\Debug\obs-ffmpeg-mux.exe
      Building Custom Rule C:/Rec/obs-studio/plugins/obs-x264/CMakeLists.txt
      obs-x264-test.c
      obs-x264-test.vcxproj -> C:\repos\obs-studio\build\plugins\obs-x264\Debug\obs-x264-test.exe
      Building Custom Rule C:/Rec/obs-studio/CMakeLists.txt
    
    1. MSBuildでcmakeで出力されたbuild\obs-studio.slnをビルド
    MSBuild.exe -maxCpuCount -target:build -property:"PlatformToolset=v142;WindowsTargetPlatformVersion=10.0.19041.0;Configuration=Release;Platform=x64" "C:\repos\obs-studio\build\obs-studio.sln"
    

    ビルドに成功しました。と出ていれば例外を吐いていても問題ない。

    1. obs-studio\build\rundirRelease\bin\64bit\obs64.exeを起動
      avcodec-58.dllが見つからないため、コードの実行を続行できません。と怒られる場合は、media-autobuild_suite\local64\bin-video\*.dllをこの場所にコピーする