web-dev-qa-db-ja.com

シェルを介したWebカメラストリームへのアクセス

ウェブカメラからのビデオストリームで画像処理を実行できる必要があるアプリ(ARM Ubuntuで実行)で実行)を作成しています。データを取得する最も簡単な方法は、出力を使用することです。プロセスでストリーミングするので、子プロセスをホストし、コマンドを実行して、出力を消費することを計画しています。現在の計画はFFMPEGを使用することですが、ARMで動作する任意のコマンドラインツールを使用できます。実際には2つあります。私の質問の一部:

  1. ウェブカメラからピクセルデータのストリームを取得するために、コマンドラインからどのFFMPEG(またはより良いものがある場合は他のユーティリティ)コマンドを使用する必要がありますか?
  2. 出力はどの形式になりますか(できればRGBデータのみで、エンコードやヘッダーはありません)?アプリで解析する必要があり、エンコード形式を知る必要があります。

どんな情報でもいただければ幸いです!

2
Wasabi Fan

FFmpegとvideo4linux2を使用すると、 ほぼすべてのWebカメラ入力を取得 できます。 ダウンロードページ または 自分でコンパイル の最新バージョンのffmpegを使用してください。カメラのフレームサイズとフレームレートは、次の方法で確認できます。

v4l2-ctl --list-formats-ext

たとえば、Webカメラが提供するフレームレートと画像サイズがわかった場合:

ffmpeg -f video4linux2 -r 25 -s 640x480 -i /dev/video0 \
-c:v rawvideo -f rawvideo -pix_fmt yuv420p -

これにより、/dev/video0のカメラから640×480ピクセルで25fpsのビデオがキャプチャされ、YUV 4:2:0平面ピクセル形式でエンコードされた生のYUVフレームがstdoutに出力されます。 rawvideoエンコーダーとフォーマットがそれを処理します。ヘッダーはありません。

ここで変更できるもの:

  • 別のフレームレートまたはサイズを設定します。

  • ここで、最後の-はデータをstdoutに送信しますが、必要に応じてファイルを選択することもできます。

  • 使用可能な他のピクセル形式を確認するには、ffmpeg -pix_fmtsを実行します。それらのバイト順序は fourcc.org で説明されています。 RGBデータが本当に必要な場合(これがカメラ出力のデフォルトであるとは思えませんが)、たとえば-pix_fmt rgb24を使用できます。

1
slhck