0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VTubeStudioのバーチャルWEBカメラ取得調査

0
Last updated at Posted at 2025-08-21

はじめに

VTubeStudioは、基本的にはOBSに出力して使用するものですが、せっかくなので、自分の目の前に、サブカメラのように表示したいと思いました

なお、ついでに、OBSの仮想カメラの出力取得についても調べてみたので以下に記載しました

注意

  • 2025/10調査時点の内容です
  • 環境やアップデートによっては内容が異なる可能性があります

以下結果で作成したアプリ

環境

  • Windows 11
  • USBカメラ(j5 Webcam:1台取付中、VTubeStudioでトラッキングのために使用)
  • VTubeStudio
    • バーチャルWebカメラを起動する がON状態
    • Spout2を起動する がON状態
  • OBS
    • OBSへのVTubeStudio取り込みは、Spout2 Captureで取り込む
    • OBSの仮想カメラも起動する(出力の種類/選択は、Spout2 Captureを指定)

調査

既存ソフトより

Windows一般カメラソフト

まず、現状での状況ですが、以下の画像の通り、Windowsの認識の時点で、USBカメラ(j5 Webcam)1台のみしか認識おらず、仮想カメラは起動していても認識されていないように見えました

一般的なカメラキャプチャソフトでも取得を試しましたが、仮想カメラを取得できないようでした。
たぶん、Windowsカメラ設定で仮想カメラを認識していないようなので、一般的なカメラキャプチャソフトでも仮想カメラを認識できない気がしました

cam-win.png

キャプチャできたソフト

さらに調べてみた所、以下のCameraViewerアプリにてVTubeStudioのバーチャルWebカメラが取得できました

なお、VTubeStudioのバーチャルWebカメラは取得できましたが、OBSの仮想カメラは取得できないように見えます(エラー表示されませんが、真っ黒画面から変化なし)

cam-1.png

ただ、このソフト、ソースファイルとDLL名称より、OpenCV2.1.0のようで、現行のVerはOpenCV4なので、かなり古い模様です。
とはいえ、OpenCVにて仮想カメラが取得できそうという事が分かったので、最新のOpenCVで自作プログラミングして実装してみようと思いました

認識状態について(FFmpegより)

別の資料として、以下の記事によると、FFmpegにてカメラデバイスが取得できるとのことで、出力させてみました

その結果、VTubeStudioのバーチャルWebカメラも、OBSの仮想カメラも認識はしてそうでした

cam-ffmpeg.png

結果

VTubeStudioのバーチャルWebカメラを取得するには、OpenCVによるプログラムを組まなければならないことが分かりました

プログラム実装テスト

OpenCVSharp

さて、久しぶりにプログラムを組もうとしましたが、今時C++はないと思ったので、C#で組むことにしました

どうやら、C#においては、OpenCVではなく、OpenCVSharpになるとのことで、OpenCVSharpにて組むことにしました

OpenCVSharp実装結果

実装結果、なぜか、VTubeStudioのバーチャルWebカメラはopenできず(取り込めず)、逆に、OBSの仮想カメラは取りこめるという結果になりました
(先行のOpenCV2.1.0の結果と逆)
(なお、実装するなら透過処理を実現したいと思っていましたが、これは、単純にTransparencyKeyを設定するだけで実現できました)

  • 下記は、OBS仮想カメラON/OFF時の取り込み状況
  • cam-sh1.png
  • cam-sh2.png

過去VerであるOpenCV2.1.0の結果と逆になったのが不可解で、いろいろ調べてみましたが、結局不明。結果は以下の通りでした。

OpenCVSharp 結果 備考
VTubeStudioのバーチャルWebカメラ × 取り込めない デバイスリストには列挙される
new VideoCaptureで失敗する
OBSの仮想カメラ 〇 取り込める -

OpenCV

OpenCVSharpOpenCVを基にしているとのことで、基本的に同じ機能とのことですが、念のため、OpenCVによる実装も確かめました。なお、OpenCVの実装はc++でないといけないとのことで、c++で実装しました
また、過去VerであるOpenCV2.1.0についても確認してみました

OpenCV実装結果

予想通り、OpenCVSharpと同様に、VTubeStudioのバーチャルWebカメラは取得できず、OBSの仮想カメラは取得できる結果でした

一方、とりあえずコンソールで組んだところ、以下の通りログが出てきました
(以下はうまくいったとき。とりあえずの表示のためアスペクト比は適当。透過処理未実施)

cam-cv1.png

うまくいかなかったときのログは以下の通り

cam-cv2.png

間違いなく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のサンプルがあったようで、それを参考に実行してみましたが、結果は、どちらの仮想カメラも、デバイスリストに出てきませんでした

cam-mf.png

最初の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の仮想カメラを指定すると、以下の通りエラーで強制終了します

cam-ds.png

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の仮想カメラを停止しても取り込めている図。

cam-afg.png

ただし、AForge.NETは、現状開発停止していることが最大の問題点です。

AForge.NET 結果 備考
VTubeStudioのバーチャルWebカメラ 〇 取り込める (現状開発停止)
OBSの仮想カメラ 〇 取り込める (現状開発停止)

結論

以上の結果から、現状、VTubeStudioやOBSのバーチャルWebカメラを取り込んで透過させてデスクトップに表示させる方法は、AForge.NETで可能です
(以下みたいな感じ)

cam-e.png

とりあえず、現時点では、以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?