web-dev-qa-db-ja.com

gphoto2 + v4l2loopbackを介してDSLRをWebカメラとして使用できますか?

だから、私がやろうとしていることは、私が自分の道を見つけているので、少し複雑かもしれません。

基本を説明しましょう:

1-デジタル一眼レフカメラを持っていて、ウェブカメラとして使用したい(ただし、v4l2では/ dev/videoXデバイスを作成できないため、インターネットアプリケーションでは使用できず、Darktableなどの特定のアプリケーションのみ)

2-gphoto2を介してカメラからライブフレームを取得できます(ただし、それらをパイプする方法がわかりません。また、スケーリングとエンコード/デコードが必要かどうかもわかりません)

3-v4l2loopbackを使用して偽のWebカメラデバイス(/ dev/video1など)を作成でき、gst-launchを使用してデータをパイプライン処理できます(ただし、フレームをパイプライン処理する方法がわかりません)

そして私がそれについて知っていること:

1-次のように、カメラからstdoutにフレームを送信できます。

gphoto2 --capture-movie --stdout

2-ビデオテストソースから偽のWebカメラデバイスに次のようにデータを送信できます。

gst-launch-0.10 videotestsrc ! v4l2sink device=/dev/video1

3-gphoto2で使用される形式はmjpg(JPEG形式)です

それで、あなたはこれで私を助けることができますか?

フレームをgphoto2からgst-launchにパイプラインし、v4l2sinkで使用して/ dev/video1に送信するにはどうすればよいですか(Webカメラとして使用できるようになります)。

ありがとう!

7
user2934303

かなり単純であることが判明しました:

modprobe v4l2loopback

そしてこれを行う

gphoto2 --stdout --capture-movie | gst-launch-0.10 fdsrc ! decodebin2 name=dec ! queue ! ffmpegcolorspace ! v4l2sink device=/dev/video0

もちろん、状況に応じてビデオデバイスを変更する必要があります。

6

2017年10月の時点で、GStreamerは1.0に更新され、v4l2loopbackはまた、いくつかの更新を受け取りました。

そのため、@ Reinaert Albrechtによって投稿された古いコマンドは機能しなくなり、現在機能する新しいコマンドは次のようになります。

gphoto2 --stdout --capture-movie | gst-launch-1.0 fdsrc fd=0 ! decodebin name=dec ! queue ! videoconvert ! tee ! v4l2sink device=/dev/video0
  • decodebin2decodebinに置き換えられました
  • ffmpegcolorspacevideoconvertに置き換えられました
  • v4l2loopbackドライバーのバグを説明するためにteeフィルターが追加されました(参照: https:// github .com/umlaeute/v4l2loopback/issues/8
5

このコマンドは私にとってよりうまく機能しました:

gphoto2 --stdout --capture-movie | ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video1
3