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
...しかし、私は一生、両方を同時に行う方法を理解することはできません. 録画中にライブ フィードを画面に表示すると便利な場合があるので、これを機能させたいと思います。グラブとスクリーンを同時に行う方法を探すのに何時間も費やしましたが、うまくいきませんでした。tee
s と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_aac
、audioconvert
そのトリックが実行されました)。エラー出力:
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