日記 (H3577)

今日は、 SCJ Discord サーバーで 「IWCC (想像世界創作会議)」 というイベントが開催されていました。 想像世界や人工言語に関係する人が製作中の作品の紹介や展望を発表するというものです。 登壇者の募集から開催までが 1 週間くらいしかなかったにも関わらず、 6 人の登壇者が集まり、 ボイスチャットには同時に最大で 20 人強が参加するなど、 イベントは成功したと言えるでしょう。 次回は来年の春に開催予定らしいです。 楽しみですね。

さて、 私は登壇者の 1 人としてシャレイア語に関する発表をしたのですが、 それと同時にイベントの様子を YouTube にミラー配信するという作業もしていました。 Discord サーバーに参加しなくてもイベントを見れるようにするのと、 イベントの内容を動画として記録するのが目的でした。 アーカイブはこちらで見られます。 この日記エントリーには、 今後の参考のためにどのような方法でミラー配信を行っていたのかをメモしておきます。

このイベントは Discord サーバーのボイスチャンネルで行われ、 登壇者は Discord の画面共有機能を用いてスライドなどの資料を提示しながら喋るという形式でした。 そこで、 この画面共有によって私の Discord クライアントに映っている画面を OBS でキャプチャし、 OBS を通して YouTube に配信するという形式にしました。 Discord クライアントにおける画面共有の視聴画面には、 右下に 「ポップアウト」 というボタンがあり、 これをクリックするとビデオ部分が別ウィンドウに分離されるので、 このウィンドウを OBS から指定してキャプチャしていました。 この方法は何より簡便ですし、 登壇者に追加の負担をかける必要もありません。 登壇者のデスクトップ→ Discord →私のクライアント→ OBS → YouTube という回りくどい流れになっているので、 画質が途中で落ちてしまうんじゃないかと心配していましたが、 アーカイブを見る限り大丈夫そうで何よりです。

ただし、 この方法には少し問題があります。 ポップアウトしたウィンドウ上でマウスカーソルを動かすと、 画面共有しているユーザーの情報や視聴停止ボタンなどが画面の上下に表示されてしまいます。 また、 自分が何か画面共有をしていると、 その内容が常に小さな内部ウィンドウとして表示されてしまいます。 これらはミラーリングする上では邪魔にしかなりません。 しかし、 Discord にはこれらを表示しないようにする設定項目がおそらくありません。 幸いなことに Discord クライントは Electron 製で、 開発者ツールも表示できる状態になっているので、 開発者ツールから JavaScript を実行して無理やり非表示にすることができます。 イベント時に私が使っていた Discord クライアント (Stable 103871) では、 以下のコードを実行することで余分な UI を非表示にすることができました。 ただし、 HTML のクラス名に付いているハッシュ値はおそらくバージョンごとに変わってしまいますし、 そもそも HTML の構造自体が大きく変わる可能性もあるので、 非表示にすべき要素はその都度調べる必要がありそうです。

document.getElementsByClassName("videoControls-24w7Xp")[0].setAttribute("style", "opacity: 0;");
document.getElementsByClassName("participantsButton-2BYCUL")[0].setAttribute("style", "opacity: 0;");
document.getElementsByClassName("pictureInPictureWindow-1B5qSe")[0].setAttribute("style", "opacity: 0;");

Discord の投稿を画面に表示する部分は、 私がいつもの造語配信時に使っている自作のガジェットシステムをそのまま流用しました。 API キーなどの設定をすれば誰でも使えるようになっています。