はじめに
GStreamerは、マルチメディアデータを処理するためのパワフルなフレームワークであり、さまざまな用途に使用できます。本記事ではGStreamerを使用して、USBカメラからの映像と、USBカメラ内蔵でない(Settings => Sound => Input で指定していない)マイクロフォンを指定し、そこからの音声を合成して.webm形式で保存する方法を紹介します
作業環境
・Ubuntu 22.04.4 LTS \n \l
・GStreamer Core Library version 1.23.0.1
・x86_64 ガレリアの普通のPC
・入力映像:Webカメラ 640x360
結論
下記では改行を入れていますが、実際には改行を入れずに1行で書いてください
gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! queue !
vp8enc ! queue ! mux.video_0
pulsesrc device=(your device name) ! audioconvert ! queue !
vorbisenc ! queue ! mux.audio_0
webmmux name=mux ! filesink location=test_vp9.webm
(your device name)
については
gst-device-monitor-1.0
で使用中のデバイスを探索し
class : Audio/Source
のそれっぽいのを見つける。私の環境では下記を見つけました
gst-launch-1.0 pulsesrc device=alsa_input.pci-0000_0a_00.3.analog-stereo ! ...
結果
10秒ほどの動画の、映像と音声あるやつが観測できました
バッファローの400円のマイクロフォンなので音質がアレだった
おわりに
クラウドへのリアルタイム配信、同時にUSBメモリやSDカードに保存、という使い方もできそう
ちなみに
Webカメラの入力を640x360 => fullHD
それかvp8enc => vp9enc
に変更すると
Dropped 106281 samples. This is most likely because downstream can't keep up and is consuming samples too slowly.
などとコンソールに表示が出現。保存した映像はガタついたり音が途切れたり
x264enc
で言うところのtune=zerolatency
もなさそうなので、対応むずそう