4

(ウェブカメラからの) ビデオ ストリームを 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

ありがとう!

4

1 に答える 1

19

パイプラインにビデオとオーディオが必要なため、少し複雑になります (小さな写真が役立つと思います)。 結果のパイプラインを示す GraphViz ダイアグラム

gst-launch コマンドをできるだけ明確に保つために、各線形パイプライン ピースを 1 つのコマンド ラインに配置します (最初の行の赤い接続、次に青、緑、黄色の接続、最後に黒で色付けされたキューイングのもの)上の写真):

gst-launch-0.10 v4l2src ! videorate ! videoscale ! x264enc ! tee name=videoTee \
    pulsesrc ! ffenc_aac ! tee name=audioTee \
    flvmux name=flvMux ! filesink location=/tmp/foo.flv \
    matroskamux name=mkvMux ! filesink location=/tmp/foo.mkv \
    audioTee. ! queue ! flvMux. \
    audioTee. ! queue ! mkvMux. \
    videoTee. ! queue ! flvMux. \
    videoTee. ! queue ! mkvMux.

最後に1つだけ注意してください。インストールしていないので、lame代わりに使用してみましたが、両方で動作するはずです。ffenc_aac

編集:オーディオサポートを含む回答を完全に書き直し、パイプラインの写真を追加しました(写真はすばらしいGraphVizツールを使用して作成されました)。

于 2012-11-14T01:04:21.350 に答える