0

GraphEdit では、次のようなグラフを作成します。

screen capture recorder --> avi decompressor --> color space converter -->
MainConcept Color Space Converter --> WebM VP8 Encoder Filter -->
WebM Muxer Filter --> file writer

ファイルサイズは mp4 の半分ですが、ビデオは滑らかではありません。マウスを動かすとマウスカーソルがジャンプし、ビデオを再生するとビデオフレームが非常に激しくジャンプします。圧縮率が高すぎるからだと思いますね。修正方法は?フィルターの操作方法に関するドキュメントが見つかりません。ありますか?

ありがとう。

4

1 に答える 1

1

トポロジーは健全に見えません。色空間コンバーターが 3 つ並んでいるということは、フィルター グラフが、スクリーン キャプチャーのメディア タイプ (ピクセル形式) を VP8 エンコーダーで受け入れられるものに合わせるのに苦労したことを意味します。

あなたが抱えている問題は、品質が著しく低下しているときにエンコーダーが低ビットレートモードに設定されているか、エンコーディングが CPU を使い果たしてフレームをスキップするか、またはその両方であるということです。どうやら、設定が意味を成し、妥当な出力を提供するために、バランスを取ることに関心があるようです。

VPB エンコーダー フィルターは、IVP8Encoder インターフェイスを使用してセットアップされます。その定義 (およびインライン コメント) は、ソース コード パッケージのファイルにあります\IDL\vp8encoder.idl

[
   object,
   uuid(ED311151-5211-11DF-94AF-0026B977EEAA),
   helpstring("VP8 Encoder Filter Interface")
]
interface IVP8Encoder : IUnknown
{
    //ApplySettings
    //
    //The filter maintains a set of encoder configuration values, held
    //in cache.  Any parameters set (using the methods below) are always
    //applied to the cached value, irrespective of the state of the graph.
    //
    //When the graph is started, the filter initializes the VP8 encoder
    //using the cached configuration values.  This is done automatically,
    //as part of the activities associated with transitioning the filter
    //from the stopped state.
    //
    //If the graph has been started, then any parameters set by the user
    //are still applied to the cache (as before).  However, to apply the
    //configuration values in cache to the VP8 encoder, the user must also
    //call ApplySettings.
    //
    //It is harmless to call ApplySettings while the graph is stopped.

    HRESULT ApplySettings();

    //ResetSettings
    //
    //Sets the configuration values in cache to their defaults, the same
    //as they had when the filter instance was originally created.

    HRESULT ResetSettings();

    //Deadline
    //
    //Time to spend encoding, in microseconds. (0=infinite)

    HRESULT SetDeadline([in] int Deadline);
    HRESULT GetDeadline([out] int* pDeadline);

    //ThreadCount
    //
    //For multi-threaded implementations, use no more than this number of
    //threads. The codec may use fewer threads than allowed. The value
    //0 is equivalent to the value 1.

    HRESULT SetThreadCount([in] int Threads);
    HRESULT GetThreadCount([out] int* pThreads);

    ...

以下も参照してください。

于 2014-09-08T05:34:41.610 に答える