見出し画像

OBSのカスタム出力でQSVを使う

 OBS 29.0.2 Windows 版のカスタム出力 (FFmpeg) のエンコーダとして Intel の Quick Sync Video (QSV) が選べなかったので、無理やり選べるようにしました。

 OBS のフォルダ内にある avcodec-59.dll を BtbN / FFmpeg-Builds の Auto-Build 2023-03-28 12:47 版で置き換えれば OK でした。

 手順は次のとおりです。

  1. 上記、BtbN / FFmpeg-Builds のページの "ffmpeg-n5.1.3-win64-gpl-shared-5.1.zip" をダウンロード・解凍します。

  2. 解凍したフォルダの中の bin フォルダの中にある avcodec-59.dll ファイルを、下記、OBS フォルダ内の同名のファイルと置き換えます。
    C:\Program Files\obs-studio\bin\64bit\avcodec-59.dll

 なお、今回の方法では無理やり dll を置き換えていますが、本来は OBS をビルドし直すのが安全です。この方法を試す場合には、自己責任でお願いします。

設定例

 今回は、キャプチャ映像を動画コンテンツの素材として使えるよう、配信用の設定とは違い、高画質になるようにしてみました。

 想定する映像フォーマットは 1080p、60fps。
 サンプルの映像ソースは BLUE PROTOCOL ベンチマーク (最高画質) です😎

 コーデックはファイルサイズ対品質の効率が高そうな HEVC (H.265)、レート制御は Intelligent Constant Quality (ICQ) を選択しました。

 実際の設定は以下のとおりです。

  • コンテナフォーマット: matroska

  • 映像ビットレート: 1 Kbps

  • キーフレーム間隔 (フレーム): 120

  • すべてのコーデックを表示: チェックする

  • 映像エンコーダ: hevc_qsv (libx265)

  • 映像エンコーダ設定 (ある場合): profile=main preset=fast global_quality=23 look_ahead=1 look_ahead_depth=30

  • 音声ビットレート: 32 Kbps

  • 音声エンコーダ: flac

設定項目の詳細

映像ビットレート

 ICQ の場合、ビットレートは関係ないので適当でよいです。ただし、0 を指定するとエラーが出るので、1 にしました。

キーフレーム間隔

 120 フレーム (60 fps で 2 秒) に設定。キーフレームは編集ポイントになるので増やしたいですが、間隔を狭めると、ファイルサイズが大きくなるので、このくらいで妥協…。

映像エンコーダ

 HEVC (H.265) を選択。H.264 (h264_qsv) も選べますが、H.264 の場合、後述の look_ahead を 1 にするとエラーになるので注意。

profile=main

 多分、デフォルトで main だと思いますが、とりあえず明示的に指定しておきました。

preset=fast

 はじめに slow を設定していましたが、私の CPU (i7-12700) では映像がコマ落ちしてしまいました。medium で概ね大丈夫そうですが、長時間録画した後にコマ落ちしてたら嫌すぎるので、念のため fast まで品質を下げます。
 ただ、私の目には preset の違いはあまり画質には関係ないように見えます。それより後述の global_quality の方が重要に感じます。

global_quality

 global_quality を指定することで、レート制御が ICQ になります。
 値が小さいほど高画質になります。
 色々試してみて、最終的に 23 に。画質かファイルサイズかで、後者を選びました。重い素材は扱いづらいので…。
 完全に目視による判断ですが、画質的に理想的だと感じたのは 18 以下の値です。19 でもかなりいい方です。こういうのは自分の目で確かめるのが一番だと思ってます。
 なお、global_quality の値を下げすぎると、ファイルサイズが膨大になるばかりか、ブロックノイズが乗ってしまいました。

look_ahead

 先読みを有効にするには 1 を指定します。(デフォルトは 0)
 前述のように、同じ QSV エンコーダでも、H.264 の場合はなぜかエラーになります。(FFmpeg の説明では使えるっぽいのになあ…😓)
 先読みをするかしないかで、個人的には相当画質が変わるように思います。
 先読みによって、リアルタイムトランスコーディングにありがちな、全体的にモワーっとした感じが少なくなり、映像がピシっとしまる気がしますね。

look_ahead_depth

 何フレーム先読みするかを指定。
 よく分からなかったので、とりあえず 30 フレーム (60fps で 0.5 秒) にしてみました。
 とりあえず綺麗にエンコードできているので、これでよしとします😋

音声ビットレート / 音声エンコーダ

 音声はとりあえずロスレス (FLAC) にしましたが、長時間録画する場合のファイルサイズが気になります。
 ロスレスコーデックの場合、ビットレート設定は何でもかまわないので、とりあえず 32 Kbps を選択しました。

 以上、参考になれば幸いです。

リンク


いいなと思ったら応援しよう!