2016-05-23 76 views
1

私はgstreamerの初心者で、ビデオストリームとオーディオストリームを持つ2つのMP4メディアコンテナをGstreamer 1.0でシームレスに連結するためにパイプラインを苦労しています。2つのメディアコンテナ(ビデオとオーディオストリーム)を連結するGstreamerパイプライン

gst-launch-1.0 concat name=c ! autovideosink filesrc location=1.mp4 ! decodebin ! videoconvert ! c. filesrc location=2.mp4 ! decodebin ! videoconvert ! c. 

やオーディオストリーム:

gst-launch-1.0 concat name=c ! autoaudiosink filesrc location=1.mp4 ! decodebin ! audioconvert ! c. filesrc location=2.mp4 ! decodebin ! audioconvert ! c. 

これまでのところ、運 「連結」の要素を使用することが最も便利な方法である、と私はビデオストリームのいずれかをCONCATすることだと私には思えます両方のコンテナをビデオとオーディオで連結するパイプラインを作成します。

投稿者this article私はそのためにstreamsynchronizerが必要であることに気付きました。誰かが見た目の見本を示すサンプルパイプラインで助けてくれますか? ..

+0

あなたは「これまでの運」とはどういう意味ですか?このパイプラインは私のために働き、2つのmp4ビデオを連続して再生します: 'gst-launch-1.0 concat name = c!ビデオコンバート! videoscale! autovideosink filesrc location = video1.mp4!デコードビン! c。 filesrc場所= video2.mp4!デコードビン! c.' –

+0

@EzequielGarciaはい、それは動作しますが、彼は同じパイプでもオーディオを持っている必要があります:) – nayana

答えて

1

は、[OK]を私はこの思い付いたが、時にはALSAは、ストリームが適切な状態ではないと言う

GST_DEBUG=3 gst-launch-1.0 concat name=c2 ! videoconvert ! videorate ! autovideosink concat name=c ! audioconvert ! audiorate ! alsasink filesrc location=big.mp4 ! decodebin name=d1 ! audio/x-raw ! queue ! c. filesrc location=big2.mp4 ! decodebin name=d2 ! audio/x-raw ! queue ! c. d1. ! video/x-raw ! queue ! c2. d2. ! video/x-raw ! queue ! c2. 

パイプへリトル情報:

1、あなたが使用する必要がいけませんaudioconvert/videoconvertからdecodebinからのストリームの種類を認識することができます。オーディオ/ビデオのデコード後は常に生のままの形式で、安全にaudio/x-rawまたはvideo/x-rawを使用できます。

2、2つのconcat要素を使用することができます。ただし、2つのコンスタットを使用すると、オーディオ/ビデオが同期しない恐れがあります。あなたは適切な同期が必要なときにすべてのパイプを1つにすることが常に重要です。

3、私はalsasink使用していますが、あなたが...時々autoaudiosinkは私はあまり好きではないその私のためpulsesinkを選んだものは何でもシンクスーツ使用することができます..私はパイプのオーディオ終わりのこの種を使用したい:audioconvert ! audiorate ! alsasink

4、私はこれらのエラーを見てきましたが、キューを追加した後、それは去っていきました..しかし、彼らはあなたのために表示されることがあります私は知らない...

0:00:00.053972316 11839 0x7f0274003b70 WARN   audiobasesink gstaudiobasesink.c:1139:gst_audio_base_sink_wait_event:<alsasink0> error: Sink not negotiated before eos event. 
ERROR: from element /GstPipeline:pipeline0/GstAlsaSink:alsasink0: The stream is in the wrong format. 
Additional debug info: 
gstaudiobasesink.c(1139): gst_audio_base_sink_wait_event(): /GstPipeline:pipeline0/GstAlsaSink:alsasink0: 
Sink not negotiated before eos event. 
ERROR: pipeline doesn't want to preroll. 
+0

ありがとう!できます!出力をmp4に多重化してファイルシンクに書き込むパイプラインの例も教えてください。 –

+0

hmm ..たぶんあなたは本当にストリームシンクロナイザーが必要なのでしょうか?全質問をMP4多重化に読んではいけません。オーディオ/ビデオを再エンコードし、mp4muxを使ってavenc_eac3とx264encを使って再エンコードする必要があります。新しいもの(そしてあなたがしたコメントを投稿してください) – nayana

+0

そのパイプラインの構文は私にとっては黒い魔法です - それ以上の時間を費やして、明らかに私の知識だけでは解決できませんので、[次の質問] http://stackoverflow.com/questions/37416015/gstreamer-write-both-video-and-audo-streams-into-a-single-mp4-container-after-c) –

関連する問題