0

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)。

4

1 に答える 1