(ウェブカメラからの) ビデオ ストリームを MKV および FLV ファイルに保存しようとしています。これは、h264 エンコーディングの後にビデオとオーディオのパイプラインを分割し、各パスを別のマルチプレクサで多重化する必要があることを意味します。
これは、私がそれが機能するはずだと想像する方法です:
|->queue->matroskamux->filesink
v4l2src->videorate->videoscale->x264enc->tee-|
|->queue->flvmux->filesink
この仮定は正しいですか?すべての待ち行列は適切な場所にありますか? このような GStreamer コマンドはどのようになりますか? 特に「Tee」という概念に悩んでいます。コマンドでそれらを開始する方法/場所、およびさまざまなティーパスを操作する方法。GStreamer のドキュメントで「Tee」を調べましたが、まだ適用に問題があります。
前もって感謝します!
編集:わかりました、mreithub のおかげで、ビデオで動作するようになりました。今のところ、コマンドは次のようになります。
gst-launch-0.10 -v -m v4l2src ! videorate ! videoscale ! ffmpegcolorspace ! x264enc ! tee name=muxtee ! queue2 ! matroskamux name=mkvmux ! filesink location=file1.mkv muxtee. ! queue ! flvmux name=flvmux ! filesink location=file1.flv
オーディオを実行するための私の試みは次のとおりです。
gst-launch-0.10 -v -m v4l2src ! videorate ! videoscale ! ffmpegcolorspace ! x264enc ! tee name=muxtee ! queue2 ! matroskamux name=mkvmux pulsesrc ! ffenc_aac ! filesink location=file1.mkv muxtee. ! queue ! flvmux name=flvmux pulsesrc ! ffenc_aac ! filesink location=file1.flv
これは機能しません (コマンドは実行されますが、すぐに停止します - エラー メッセージは表示されません)。しかし、オーディオエンコーディングを配置する位置を決定するのにも問題があります。私が試みた解決策では、各 Tee-Pipeline でオーディオをエンコードします (右?)。しかし、オーディオを一度だけエンコードしてから、それに応じて両方のパイプラインパスで多重化したいと思います。
別の試み: オーディオ エンコーディングの後、Tee を使用してパイプラインを分割し、それを mkvmuxer と flvmuxer に割り当てます。
gst-launch-0.10 -v -m v4l2src ! videorate ! videoscale ! ffmpegcolorspace ! x264enc ! tee name=muxtee ! queue2 ! matroskamux name=mkvmux ! filesink location=file1.mkv muxtee. ! queue ! flvmux name=flvmux ! filesink location=file1.flv pulsesrc ! ffenc_aac ! tee name=t2 ! queue ! mkvmux. t2. ! queue ! flvmux.
しかし、これを使用すると、次のエラーメッセージが表示されます。
could not link queue1 to flvmux
ありがとう!