ShareXでWeb会議を録画する

以前投稿した「最初から使っておけばよかった、画面キャプチャツールのShareX」の続編です。

この「ShareX」で、Teams や Zoom などの Web 会議を、自分の声と相手の声の両方が入った状態で録画する方法を紹介します。仮想オーディオデバイス(オーディオループバックドライバー)は使わず、ShareX の設定だけで実現します。

Web会議を録画したい場面

Teams や Zoom には録画機能がありますが、録画できるかどうかは会議の主催者や組織の管理者の設定で決まります。主催者でない場合や、組織のポリシーで録画が禁止されている場合は、会議アプリの機能では録画できません。

一方で、議事録の作成や、聞き逃した部分の確認などのために、参加者の立場でも手元に記録を残したい場合があります。

ShareXの標準設定では会議の音声が録音できない

ShareX は 音声も同時に録音できますが、会議の相手の声であるスピーカーを別途選択出来きません。

そのため標準の設定では、自分の声と相手の声がそろった Web 会議の録画はできません。

今回の方法の概要

ShareX には、下図のように「独自のコマンドラインを使用」という設定があり、ShareX が内部で実行する FFmpeg のコマンドを自分で書き換えられます。FFmpegを指定すると、複数の音声入力を同時に取り込み、混ぜて 1 つの音声にできます。

今回はこれを利用して、次の 2 つの音声を FFmpeg の中で混ぜて録画します。

音声入力デバイス
スピーカーの音(相手の声、PC の音)virtual-audio-capturer
自分の声ヘッドセットのマイク

virtual-audio-capturer は、オープンソースの screen-capture-recorder に含まれる録音用のデバイスです。Windows の既定の再生デバイスから出ている音をそのまま取り込みます。

オーディオループバックドライバーを使わないメリット

同じ目的には、VB-CABLE や VoiceMeeter などの仮想オーディオデバイス(オーディオループバックドライバー)を使う方法も広く知られています。今回の下記「screen-capture-recorder をインストールする」方法には、それらと比べて次のメリットがあります。

  • 音の経路を変えなくてよい: 仮想オーディオデバイスを使う方法では、Windows の既定の出力先や、Teams・Zoom のスピーカー/マイク設定を仮想デバイスに切り替える必要があります。今回の方法では、普段の音声設定をそのまま使えます。
  • 普段の通話に影響しない: 仮想デバイスを経由しないので、自分が聞く音に遅延が増えたり、設定ミスで相手に音が届かなくなったりしません。録画中でも録画していないときでも、会議アプリの動作は同じです。
  • カーネルドライバーを入れなくてよい: 仮想オーディオデバイスはカーネルモードのドライバーです。署名のないドライバーの場合、Windows のテスト署名モードを有効にする必要があります。virtual-audio-capturer は通常のアプリと同じユーザーモードで動く DirectShow フィルターなので、このような心配がありません。ただし、インストール時には管理者権限が必要です。
  • 元に戻すのが簡単: ShareX の「独自のコマンドラインを使用」のチェックを外すだけで、元の録画設定に戻ります。

導入と設定の手順

1. screen-capture-recorder をインストールする

通常版の ShareX には、画面録画オプションに「録画デバイスをインストール」ボタンがあります。Microsoft Store 版の ShareX にはこのボタンがないため、配布元から直接インストールします。

インストーラーを実行し、管理者権限の確認を許可します。オプションは既定のままで問題ありません。

2. 録音に使うデバイス名を確認する

ShareX の タスク設定 → 画面録画 → 画面録画オプション を開きます。「オーディオ入力」の一覧で、次の 2 つのデバイス名を確認します。

  • virtual-audio-capturer(手順 1 で追加されたもの)
  • 使用するマイクの名前(例: マイク (2- USB Audio Device))

FFmpeg を別途インストールしている場合は、次のコマンドでも一覧を表示できます。

ffmpeg -list_devices true -f dshow -i dummy

3. Windows の既定の再生デバイスを確認する

virtual-audio-capturer が録音するのは、Windows の既定の再生デバイスから出る音です。設定 → システム → サウンド → 出力 で、普段使っているヘッドセットやスピーカーが選ばれていることを確認します。

4. ShareX にカスタムコマンドを設定する

画面録画オプションで「独自のコマンドラインを使用」にチェックを入れ、入力欄を次のコマンドに置き換えます(1 行です)。マイク (2- USB Audio Device) の部分は、手順 2 で確認したマイク名に置き換えてください。下記はあくまでも例です。必ずご自身のマイク名を指定してください。

-f dshow -thread_queue_size 1024 -rtbufsize 256M -audio_buffer_size 80 -i audio="virtual-audio-capturer" -f dshow -thread_queue_size 1024 -rtbufsize 256M -audio_buffer_size 80 -i audio="マイク (2- USB Audio Device)" -f gdigrab -thread_queue_size 1024 -rtbufsize 256M -framerate $fps$ -offset_x $area_x$ -offset_y $area_y$ -video_size $area_width$x$area_height$ -draw_mouse $cursor$ -i desktop -filter_complex "[0:a]volume=0.3[spk];[1:a]agate=threshold=0.015:ratio=20:attack=5:release=300:range=0.01,volume=2.5[mic];[spk][mic]amix=inputs=2:duration=longest:normalize=0,alimiter=limit=0.95[a]" -map 2:v -map "[a]" -c:v libx264 -r $fps$ -preset ultrafast -tune zerolatency -crf 38 -pix_fmt yuv420p -movflags +faststart -c:a aac -ac 2 -b:a 128k -y "$output$"

$fps$ や $area_x$ などは ShareX が録画時に置き換える変数です。録画範囲やフレームレートは、これまでどおり ShareX で指定した値が使われます。

音声の処理(-filter_complex の部分)は次のとおりです。

処理内容
[0:a]volume=0.3スピーカーの音を 0.3 倍(約 -10dB)に下げます
agate=threshold=0.015:...マイクにノイズゲートをかけ、一定の音量未満の音をカットします(後述)
volume=2.5マイクの音を 2.5 倍(約 +8dB)に上げます
amix=inputs=2:...:normalize=02 つの音声を混ぜます。normalize=0 は、混ぜたときに全体の音量が下がるのを防ぐ指定です
alimiter=limit=0.95音量を上げたことによる音割れを防ぎます

5. テスト録画をする

YouTube などの動画を再生しながら話し、10 秒ほど録画します。再生して、自分の声とスピーカーの音の両方が入っていること、音量のバランスが適切であることを確認します。

注意点

マイクの性能によって音量の調整が必要です

今回使った USB ヘッドセットのマイクは、Windows の入力音量を 100% にしても、スピーカーの音と比べて小さく録音されました。そのため、コマンド内でスピーカーを 0.3 倍に下げ、マイクを 2.5 倍に上げています。適切な値はマイクやスピーカーの音量によって変わるので、テスト録画をしながら volume= の値を調整してください。

スピーカーの音が二重に録音されることがあります

設定の途中で、YouTube の音が二重に聞こえる現象が起きました。小さな音が先に聞こえ、少し遅れてはっきりした大きな音が聞こえる状態です。

原因を調べるため、YouTube を再生したまま黙って、マイクとスピーカーの音を別々に 10 秒間録音して比較しました。

項目結果
スピーカーの音の平均音量-20.8 dB
マイクに入っていた音の平均音量-51.7 dB(最大 -39.3 dB)
マイクの音と YouTube の音の一致度(相関)0.88
時間のずれマイクの音が約 0.14 秒早い

黙っていたにもかかわらず、マイクに YouTube の音が入っていました。ヘッドセットのスピーカーから漏れた音をマイクが拾っているか、ヘッドセット内部で信号が回り込んでいるためと考えられます。

録音される音量は小さいものの、マイクの音量を 2.5 倍に上げていたため、漏れた音が目立つ大きさになっていました。また、マイクと virtual-audio-capturer では音声を取り込むタイミングが異なります。そのため、漏れた音と本来のスピーカーの音が少しずれて重なり、二重に聞こえていました。ずれの大きさは録画を始めるたびに変わります。

二重録音の対策としてノイズゲートを使っています

コマンド内の agate(ノイズゲート)は、マイクの音が一定の音量を超えたとき、つまり自分が話しているときだけ音を通す処理です。漏れた音は話し声より小さいため、ゲートでカットできます。

設定意味
threshold=0.015この音量(約 -36dB)未満の音をカットします
release=300話し終えてから 0.3 秒後にゲートを閉じます。語尾が切れるのを防ぎます
range=0.01ゲートが閉じている間は、マイクの音を -40dB まで下げます

threshold は最初 0.02 にしましたが、自分の声が途切れたため 0.015 に下げました。調整の目安は次のとおりです。

  • 二重の音がまだ聞こえる場合は、値を上げます(例: 0.02)。
  • 自分の声が途切れる場合は、値を下げます(例: 0.01)。

自分が話している間はゲートが開くため、その間は漏れた音も録音されます。ただし、話し声のほうが十分に大きいため、ほとんど気になりません。ヘッドセットの再生音量を下げると漏れ自体が減るので、より効果的です。

その他の注意点

  • マイク名が変わると録画に失敗します: USB ヘッドセットを別のポートに挿し直すと、マイク名(2- の部分など)が変わることがあります。その場合はコマンド内のマイク名を修正してください。
  • 既定の再生デバイスの音だけが録音されます: 会議アプリの音声を既定以外のデバイスから出している場合、その音は録音されません。
  • 設定ファイルを直接編集する場合: ShareX の設定は ドキュメント\ShareX\ApplicationConfig.json に保存されています。ShareX は終了時にこのファイルを上書きするため、直接編集する場合は ShareX を完全に終了してから行い、事前にバックアップを取ってください。ShareX の画面から設定する場合は、この注意は不要です。
  • 録画する前に参加者の同意を得てください: 会議アプリの録画機能と違い、この方法で録画しても他の参加者には通知されません。録画する場合は事前に参加者へ伝え、同意を得てください。組織の規程で録画が禁止されている会議では使用しないでください。

まとめ

ShareX の「独自のコマンドラインを使用」と screen-capture-recorder の virtual-audio-capturer を組み合わせると、仮想オーディオデバイスを使わずに、自分の声と相手の声の両方を含めて Web 会議を録画できます。ヘッドセットによってはマイクにスピーカーの音が漏れて二重に録音されることがありますが、ノイズゲートを使えば軽減できます。

動画で解説