Gstreamer で UltraStudio 3G Recorder を使う備忘録です.以下 Amazon の商品ページです.
ここ1月ほどいろいろ忙しくて更新をサボっていましたが,前回記事
の続きです.
事前準備
以下 macOS と Ubuntu 22.04 の場合の事前準備について記します.なお,Gstreamer 自体はマルチプラットフォーム対応なので Windows でももちろん使えるのですが,この辺りについては Gstreamer の公式の
をご覧ください.
Gstreamer の導入
もちろんまずは Gstreamer を導入しておかなければなりません.例えば Ubuntu だと,
$ sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio gstreamer1.0-vaapi
のような感じになりますし,macOS だと,brew
を用いて,
$ brew install gstreamer gst-plugins-base gst-plugins-good gst-plugins-ugly gst-plugins-bad
のように導入するのが簡単です.特に GStreamer DeckLink 関係のライブラリを含む gst-plugin-bad を導入し忘れないようにしてください.
なお,DeckLink とは,BlackmagicDesign の PCI-E 接続キャプチャーカードの製品名
のようで,つまり,UltraStudio Recorder 3G は DeckLink の Thunderbolt3 対応版ということなんでしょうね.Thunderbolt ってもともとは確か PCIe を外付けにする規格だったはずで,接続後は PC からは PCIe 接続と同じように見えるので,DeckLink のライブラリから使えるってことなんだと思います.
VA-API 関係ソフトウェアの導入
必須ではありませんが,Linux 環境で取り込んだ映像を全画面表示させるのに VA-API 関係のソフトウェアをあらかじめ導入しておくと良いと思います.Ubuntu 22.04 の場合は以下の通りです.
$ sudo apt install libva-dev libmfx-dev intel-media-va-driver-non-free vainfo $ vainfo --display drm
なお,上記は Intel グラフィックスチップに対応したドライバーを導入していますが,nvidia の場合は,nvidia-va-driver を,AMD の場合は mesa-va-drivers を導入する必要があるのではないかと思いますが,これについては機材を持っていないので試していません.また,Windows も VA-API に対応しているようです.
使い方
以下,「音声なし」「音声あり」「Window 表示」「全画面表示」のパターンで Ubuntu と macOS での使い方を示します.違いは videosink plugin の部分だけです(恐らく Windows の場合もほぼ同様に使えるのではないかと思います).
Ubuntu 音声なし Windows 表示
$ gst-launch-1.0 -tv decklinkvideosrc connection=hdmi mode=1080p60 ! videoconvert ! autovideosink
Ubuntu 音声あり Window 表示
$ gst-launch-1.0 -tv decklinkvideosrc connection=hdmi mode=1080p60 buffer-size=10 ! videoconvert ! autovideosink decklinkaudiosrc connection=embedded ! audioconvert ! pulsesink
Ubuntu 音声なし全画面表示
$ gst-launch-1.0 -tv decklinkvideosrc connection=hdmi mode=1080p60 ! videoconvert ! vaapisink fullscreen=yes
macOS 音声なし全画面・Window 表示
macOS の場合は osxvideosink plugin を使えば Window 表示と全画面を普通のやり方で自由に行き来できます(表示されない場合は videoconvert plugin を使わないで直接 osxvideosink に pipe してください).
$ gst-launch-1.0 -tv decklinkvideosrc connection=hdmi mode=1080p60 ! videoconvert ! osxvideosink
うまくいかない場合
うまくいかない場合はそもそも UltraStudio Recorder がきちんと OS から認識されているかどうかを Blackmagic Media Express で確認してみてください.
また,接続ケーブルに問題があることもあります.当たり前ですが Thunderbolt3 に対応したケーブルでないときちんと認識されません(実際私の場合も Thunderbolt3 対応ではないケーブルでつないでいることに気が付かず小一時間アレコレ試しました.ケーブルがよく似ているので意外と間違いやすいと思います).
OS に UltraStudio Recorder 3G がきちんと認識されていることが確認できたら,次は Gstreamer から認識されているかどうかを gst-device-monitor-1.0 コマンドで確認してください.また,もし認識されていない場合は,gst-plugin が全て導入されているかどうかを確認してください.
$ gst-device-monitor-1.0 ... Device found: name : UltraStudio Recorder 3G (Video Capture) class : Video/Source/Hardware caps : video/x-raw, width=720, height=486, pixel-aspect-ratio=10/11, interlace-mode=interleaved, framerate=30000/1001 video/x-raw, width=720, height=576, pixel-aspect-ratio=12/11, interlace-mode=interleaved, framerate=25/1 video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=24000/1001 video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=24/1 video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=25/1 video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=30000/1001 video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=30/1 video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=50/1 video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=60000/1001 video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=60/1 video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=interleaved, framerate=25/1 video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=interleaved, framerate=30000/1001 video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=interleaved, framerate=30/1 video/x-raw, width=1280, height=720, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=50/1 video/x-raw, width=1280, height=720, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=60000/1001 video/x-raw, width=1280, height=720, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=60/1 video/x-raw, width=2048, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=24000/1001 video/x-raw, width=2048, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=24/1 video/x-raw, width=2048, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=25/1 video/x-raw, width=2048, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=30000/1001 video/x-raw, width=2048, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=30/1 video/x-raw, width=2048, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=50/1 video/x-raw, width=2048, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=60000/1001 video/x-raw, width=2048, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=60/1 properties: device-number = 0 (0x00000000) model-name = "UltraStudio\ Recorder\ 3G" display-name = "UltraStudio\ Recorder\ 3G" max-channels = 16 (0x00000010) supports-format-detection = true serial-number = "" gst-launch-1.0 decklinkvideosrc ! ... ... Device found: name : UltraStudio Recorder 3G (Audio Capture) class : Audio/Source/Hardware caps : audio/x-raw, format={ (string)S16LE, (string)S32LE }, channels={ (int)2, (int)8, (int)16 }, rate=48000, layout=interleaved properties: device-number = 0 (0x00000000) model-name = "UltraStudio\ Recorder\ 3G" display-name = "UltraStudio\ Recorder\ 3G" max-channels = 16 (0x00000010) supports-format-detection = true serial-number = "" gst-launch-1.0 decklinkaudiosrc ! ...
以上!