3

Logitech C920 Web カメラは、h264 でエンコードされたビデオ ストリームを提供します。この「キャプチャ」ツールを使用してデータにアクセスしています。

だから私はライブビデオを見ることができます:

/usr/local/bin/capture -d /dev/video0 -c 100000 -o | \
  gst-launch-1.0 -e filesrc location=/dev/fd/0 \
                    ! h264parse \
                    ! decodebin\
                    ! xvimagesink sync=false

...または生の h264 ファイルとしてストリームを記録します。

/usr/local/bin/capture -d /dev/video0 -c 100000 -o | \
  gst-launch-0.10 -e filesrc location=/dev/fd/0 \
                     ! h264parse \
                     ! mp4mux \
                     ! filesink location=/tmp/video.mp4

...しかし、私は一生、両方を同時に行う方法を理解することはできません. 録画中にライブ フィードを画面に表示すると便利な場合があるので、これを機能させたいと思います。グラブとスクリーンを同時に行う方法を探すのに何時間も費やしましたが、うまくいきませんでした。tees とsをいくらいじっても役に立ちませんqueue

これに ALSA オーディオ (hw:2,0) を追加することもおまけになると思いますが、醜いハッキーな方法でそれを回避できます。今のところ、hw:2,0 が Audacitu または arecord で有効な入力であっても、これを取得します。次に例を示します。

Recording open error on device 'hw:2,0': No such file or directory
Recording open error on device 'plughw:2,0': No such file or directory

要約すると、これらの 2 つのビデオ ビットをまとめたいと思います。オーディオも機能する場合はおまけです。私はそのような初心者のように感じます。

ご協力いただきありがとうございます。

編集: 動作しないコード:

/usr/local/bin/capture -d /dev/video1 -c 100000 -o | \
     gst-launch-1.0 -e filesrc location=/dev/fd/0 ! tee name=myvid ! h264parse ! decodebin \
     ! xvimagesink sync=false myvid. ! queue ! mux. alsasrc device=plughw:2,0 ! \
     audio/x-raw,rate=44100,channels=1,depth=24 ! audioconvert ! queue ! mux. mp4mux \
     name=mux ! filesink location=/tmp/out.mp4 

...これにつながります:

WARNING: erroneous pipeline: could not link queue1 to mux 

編集: umlaeute の提案を試し、ほぼ空のビデオ ファイルとライブ ビデオの 1 つのフリーズ フレームを取得しました。オーディオ対応コードの 2 つの小さなエラーを修正した後、オーディオの有無に違いはありませんでした (二重引用符の誤字、オーディオを MP4 と互換性のあるものにエンコードしていません。後で追加するとavenc_aacaudioconvertそのトリックが実行されました)。エラー出力:

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstAudioSrcClock
Redistribute latency...
ERROR: from element /GstPipeline:pipeline0/GstMP4Mux:mux: Could not multiplex stream.
Additional debug info:
gstqtmux.c(2530): gst_qt_mux_add_buffer (): /GstPipeline:pipeline0/GstMP4Mux:mux:
DTS method failed to re-order timestamps.
EOS on shutdown enabled -- waiting for EOS after Error
Waiting for EOS...
ERROR: from element /GstPipeline:pipeline0/GstFileSrc:filesrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2809): gst_base_src_loop (): /GstPipeline:pipeline0/GstFileSrc:filesrc0:
streaming task paused, reason error (-5)

編集:わかりました、umlaeute の修正されたコードは完全に機能しますが、変換ツールの代わりに v4l2src を使用している場合のみです。そして今のところ、これは H264 ストリームではなく MJPEG ストリームを取得することを意味します。鼻の皮膚は剥がれていませんが、より現代的なワークフローを好むと思います. とにかく、MJPEG ビデオ ファイルとリアルタイムの「ビューファインダー」を出力する実際の動作は次のとおりです。完全にエレガントではありませんが、非常に実用的です。ご助力いただきありがとうございます!

gst-launch-1.0 -e v4l2src device=/dev/video1 ! videorate ! 'image/jpeg, width=1280, height=720, framerate=24/1' ! tee name=myvid \    
      ! queue ! decodebin ! xvimagesink sync=false \     
      myvid. ! queue ! mux.video_0 \    
      alsasrc device="plughw:2,0" ! "audio/x-raw,rate=44100,channels=1,depth=24" ! audioconvert ! lamemp3enc ! queue ! mux.audio_0 \    
      avimux name=mux ! filesink location=/tmp/out.avi
4

1 に答える 1