はじめに
VTubeStudioは、基本的にはOBSに出力して使用するものですが、せっかくなので、自分の目の前に、サブカメラのように表示したいと思いました
なお、ついでに、OBSの仮想カメラの出力取得についても調べてみたので以下に記載しました
注意
- 2025/10調査時点の内容です
- 環境やアップデートによっては内容が異なる可能性があります
以下結果で作成したアプリ
環境
- Windows 11
- USBカメラ(
j5 Webcam:1台取付中、VTubeStudioでトラッキングのために使用) - VTubeStudio
- バーチャルWebカメラを起動する が
ON状態 - Spout2を起動する が
ON状態
- バーチャルWebカメラを起動する が
- OBS
- OBSへのVTubeStudio取り込みは、
Spout2 Captureで取り込む - OBSの仮想カメラも起動する(出力の種類/選択は、
Spout2 Captureを指定)
- OBSへのVTubeStudio取り込みは、
調査
既存ソフトより
Windows一般カメラソフト
まず、現状での状況ですが、以下の画像の通り、Windowsの認識の時点で、USBカメラ(j5 Webcam)1台のみしか認識おらず、仮想カメラは起動していても認識されていないように見えました
一般的なカメラキャプチャソフトでも取得を試しましたが、仮想カメラを取得できないようでした。
たぶん、Windowsカメラ設定で仮想カメラを認識していないようなので、一般的なカメラキャプチャソフトでも仮想カメラを認識できない気がしました
キャプチャできたソフト
さらに調べてみた所、以下のCameraViewerアプリにてVTubeStudioのバーチャルWebカメラが取得できました
なお、VTubeStudioのバーチャルWebカメラは取得できましたが、OBSの仮想カメラは取得できないように見えます(エラー表示されませんが、真っ黒画面から変化なし)
ただ、このソフト、ソースファイルとDLL名称より、OpenCV2.1.0のようで、現行のVerはOpenCV4なので、かなり古い模様です。
とはいえ、OpenCVにて仮想カメラが取得できそうという事が分かったので、最新のOpenCVで自作プログラミングして実装してみようと思いました
認識状態について(FFmpegより)
別の資料として、以下の記事によると、FFmpegにてカメラデバイスが取得できるとのことで、出力させてみました
その結果、VTubeStudioのバーチャルWebカメラも、OBSの仮想カメラも認識はしてそうでした
結果
VTubeStudioのバーチャルWebカメラを取得するには、OpenCVによるプログラムを組まなければならないことが分かりました
プログラム実装テスト
OpenCVSharp
さて、久しぶりにプログラムを組もうとしましたが、今時C++はないと思ったので、C#で組むことにしました
どうやら、C#においては、OpenCVではなく、OpenCVSharpになるとのことで、OpenCVSharpにて組むことにしました
- 【備忘録】C# OpenCV入門
-
OpenCvSharpでカメラ画像をpictureBoxに表示
- 上記では、43-44行目で
VideoCapture.Read(Mat)を2回実行、とのことですが、当方の環境でカメラ連続するとラグみたいに表示されたので、VideoCapture.Read(Mat)は、1回のみの実行で試しました
- 上記では、43-44行目で
OpenCVSharp実装結果
実装結果、なぜか、VTubeStudioのバーチャルWebカメラはopenできず(取り込めず)、逆に、OBSの仮想カメラは取りこめるという結果になりました
(先行のOpenCV2.1.0の結果と逆)
(なお、実装するなら透過処理を実現したいと思っていましたが、これは、単純にTransparencyKeyを設定するだけで実現できました)
過去VerであるOpenCV2.1.0の結果と逆になったのが不可解で、いろいろ調べてみましたが、結局不明。結果は以下の通りでした。
OpenCVSharp |
結果 | 備考 |
|---|---|---|
| VTubeStudioのバーチャルWebカメラ | × 取り込めない | デバイスリストには列挙されるnew VideoCaptureで失敗する |
| OBSの仮想カメラ | 〇 取り込める | - |
OpenCV
OpenCVSharpはOpenCVを基にしているとのことで、基本的に同じ機能とのことですが、念のため、OpenCVによる実装も確かめました。なお、OpenCVの実装はc++でないといけないとのことで、c++で実装しました
また、過去VerであるOpenCV2.1.0についても確認してみました
OpenCV実装結果
予想通り、OpenCVSharpと同様に、VTubeStudioのバーチャルWebカメラは取得できず、OBSの仮想カメラは取得できる結果でした
一方、とりあえずコンソールで組んだところ、以下の通りログが出てきました
(以下はうまくいったとき。とりあえずの表示のためアスペクト比は適当。透過処理未実施)
うまくいかなかったときのログは以下の通り
間違いなくVTubeStudioのバーチャルWebカメラのindexを指定しているのですが、下から2行目に、なぜかUSBのカメラの名前が出てきており、最終行では、範囲外とのエラーメッセージが出ている気がします
試せることとしたら、VideoCaptureの第2引数くらいですが、念のためすべて試しましたが、openできませんでした
OpenCV内部側での問題のようで、現状解決は難しいように感じました
OpenCV |
結果 | 備考 |
|---|---|---|
| VTubeStudioのバーチャルWebカメラ | × 取り込めない |
OpenCVSharpと結果同等 |
| OBSの仮想カメラ | 〇 取り込める | - |
なお、過去VerであるOpenCV2.1.0では以下の通り
現行Verと逆の結果は不可解ですが、内部の問題のようで、原因不明です
OpenCV2.1.0 |
結果 | 備考 |
|---|---|---|
| VTubeStudioのバーチャルWebカメラ | 〇 取り込める | |
| OBSの仮想カメラ | × 取り込めない | - |
Media Foundation
他の方法はないかと更に調べてみると、Media Foundationによるカメラ取り込みという方法もあるとのことで、試しました
Media Foundation実装結果
Media Foundationのサンプルがあったようで、それを参考に実行してみましたが、結果は、どちらの仮想カメラも、デバイスリストに出てきませんでした
最初のWindowsのカメラ設定でも仮想カメラは認識しなかったので、それと同じという事でしょうか?
可能性としては、SetGUIDで仮想カメラ的なものが指定できれば、デバイスリストに載ってきそうな気がしますが、今のところはできていません
hr = pAttributes->SetGUID(
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE,
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID
);
Media Foundation |
結果 | 備考 |
|---|---|---|
| VTubeStudioのバーチャルWebカメラ | × 取り込めない | デバイスリストに列挙されない |
| OBSの仮想カメラ | × 取り込めない | デバイスリストに列挙されない |
Emgu CV
OpenCVベースとのことですが、Emgu CVも試しました
Emgu CV実装結果
OpenCVベースなので、予想通りでした
Emgu CV |
結果 | 備考 |
|---|---|---|
| VTubeStudioのバーチャルWebカメラ | × 取り込めない | デバイスリストには列挙されるnew VideoCaptureで失敗する |
| OBSの仮想カメラ | 〇 取り込める | - |
DirectShowLib
さらに調べた結果、DirectShowベースのDirectShowLibでも開けるとのことで、調べてみました。DirectShowは古い技術である一方、対応しているデバイスは多いとのことです
DirectShowLib実装結果
VTubeStudioのバーチャルWebカメラは取り込めた一方、OBSの仮想カメラを指定すると、以下の通りエラーで強制終了します
DirectShowLib |
結果 | 備考 |
|---|---|---|
| VTubeStudioのバーチャルWebカメラ | 〇 取り込める | - |
| OBSの仮想カメラ | × 取り込めない | デバイスリストには列挙される レンダラー出力辺りで例外エラーで終了 |
上記の例外エラーについて、レンダラーを変更することで回避できるのでは、とのことで、さらに調べてみました
DirectShowLib + EVR実装結果
相当に実装は難しいようですが、各種サンプルを無理やり組み合わせた結果、なんとか動いたので、多分実装できたと思うのですが、同じところで例外エラーしました。そのため、レンダラーの問題ではない気がします
その他の手法
今回試していない手法は、更に以下があるようですが、これを試す前にAForge.NETで四苦八苦していたら、そっちでできたので、以下は未検討です
- Accord.NET?
- OBS SDK?
AForge.NET
C#でのWEBカメラを他の手段で取得として、AForge.NETもあるとのことで、こちらも実装して確かめてみました
AForge.NET実装結果
AForge.NETでは、VTubeStudioのバーチャルWebカメラも、OBSの仮想カメラも取り込めました
(ただし、VideoCapabilitiesを指定しないと、取り込めない時がある)
以下は、VTubeStudioのバーチャルWebカメラから直接取り込んでいるので、OBSの仮想カメラを停止しても取り込めている図。
ただし、AForge.NETは、現状開発停止していることが最大の問題点です。
AForge.NET |
結果 | 備考 |
|---|---|---|
| VTubeStudioのバーチャルWebカメラ | 〇 取り込める | (現状開発停止) |
| OBSの仮想カメラ | 〇 取り込める | (現状開発停止) |
結論
以上の結果から、現状、VTubeStudioやOBSのバーチャルWebカメラを取り込んで透過させてデスクトップに表示させる方法は、AForge.NETで可能です
(以下みたいな感じ)
とりあえず、現時点では、以上。










