1. 文脈
私は非常に単純なパイプラインを持っています:
filesrc location=foo.wav ! decodebin ! ENCODER ! MUXER ! filesink location=bar.whatever
ENCODER
任意のgstreamer
エンコーダであり、MUXER
任意の適切なマルチプレクサです。パイプラインは機能しています。簡単にするために、からのオーディオ ストリームが 1 つだけであると仮定しdecodebin
ます。
2.問題
今、
- オーディオ ストリームの合計サイズ(つまり、生の PCM サイズ)をバイト単位で照会するにはどうすればよいですか?
decodebin
- 直後にオーディオ ストリームの合計サイズ(つまり、生の圧縮サイズ)をバイト単位で照会するにはどうすればよいですか?
ENCODER
3. 試したこと
私はGIでPythonを使用しています。appsink
次のパイプラインを使用して、要素を試してみましたが、役に立ちませんでした。
filesrc location=foo.wav ! decodebin ! ENCODER ! tee name=tee \
tee. ! queue ! MUXER ! filesink location=bar.whatever \
tee. ! queue ! appsink
関連する部分appsink
は次のとおりです。
counter = 0
appsink = Gst.ElementFactory.make('appsink', None)
appsink.set_property('emit-signals', True)
appsink.set_property('sync', False)
appsink.connect('new-sample', on_new_buffer)
appsink.connect('new-preroll', on_new_preroll)
def on_new_buffer(sample):
counter += sample.emit('pull-sample').get_buffer().get_size()
def on_new_preroll(sample):
counter += sample.emit('pull-preroll').get_buffer().get_size()
ただし、これは本当に遅いです (単に を使用するよりも 20 倍遅くなりますfilesink
)。