2016-10-14 3 views
0

ただ1つの画像である短いビデオを作成しようとしています。 (私はちょっとばかだけど、もっと大きなものを試してみる)。mlt XMLとCのインターフェイスで一貫性のないレンダリングとプロデューサとavformatコンシューマを 'ホールド'

私はそれをレンダリングするために持っているコードは次のとおりです。

logo.pngthis fileある
#include <framework/mlt.h> 
#include <stdlib.h> 
#include <unistd.h> 

int main() { 
    if(mlt_factory_init(NULL)) { 
    mlt_profile p = mlt_profile_init(NULL); 
    mlt_consumer target = mlt_factory_consumer(p, "avformat", 
    mlt_producer source = mlt_factory_producer(p, "hold", "/Users/leif/logo.png"); 
    mlt_producer_set_in_and_out(source, 0, 10); 
    mlt_consumer_connect(target, mlt_producer_service(source)); 
    mlt_consumer_start(target); 

    sleep(5); 
    mlt_consumer_stop(target); 

    mlt_consumer_close(target); 
    mlt_producer_close(source); 
    mlt_factory_close(); 
    } else { 
    printf("No\n"); 
    } 

    return 0; 
} 

このコードを実行してoutput.mp4を再生すると、画像がすべて焼き付きます。中央に緑色の線があり、ロゴはそれ自体にたくさん重ねられています。

一方、私が消費者をSDLに変更した場合、画像は正常に再生されます。

そして最後に、私はXMLであることを消費者を変更し、それをレンダリングするために溶融コマンドラインアプリケーションを使用する場合:

melt -consumer avformat:xmlout.mp4 output.xml 

やビデオを再生し、それはまた、罰金果たしています。

設定する必要があるavformatコンシューマには何かがありますか?それとも私がここで行方不明になっている何か?

編集:参考のため、出力されたxmlファイル:output.xmlは次のとおりです。関連bug reportから

<?xml version="1.0" encoding="utf-8"?> 
<mlt LC_NUMERIC="en_US.UTF-8" version="6.2.0" root="/Users/leif/src/video/private" title="Anonymous Submission" parent="producer0" in="0" out="10"> 
     <profile description="DV/DVD PAL" width="720" height="576" progressive="0" sample_aspect_num="16" sample_aspect_den="15" display_aspect_num="4" display_aspect_den="3" frame_rate_num="25" frame_rate_den="1" colorspace="601"/> 
    <producer id="producer0" title="Anonymous Submission" in="0" out="10"> 
    <property name="length">15000</property> 
    <property name="eof">pause</property> 
    <property name="resource">/Users/leif/logo.png</property> 
    <property name="aspect_ratio">1.06667</property> 
    <property name="frame">0</property> 
    <property name="method">onefield</property> 
    <property name="mlt_service">hold</property> 
    <property name="global_feed">1</property> 
    </producer> 
</mlt> 

答えて

2

:フレームワーク自体は間の合意を強制しないので、

mlt_factory_profile()は、実際には少しトリッキーかつ不明瞭です生産者と消費者。合意を容易にするために一連の正規化フィルタを追加する「ローダ」と呼ばれるMLTスーパープロデューサがあります。また、mlt_factory_producer()にサービスパラメータを指定すると、このプロデューサをバイパスします。上のリンクされたコードでは、MLT_PRODUCERへの参照があります.MLT_PRODUCERの初期値は "loader"です。物事はあなたがproducer_xml.cは、まさにそれをやっている方法を見て、XMLについてはmlt_factory_producer(p, NULL, "hold:/Users/leif/logo.png");

を言うべき動作させるために本当にそう

、、。

+0

うん、これは私の問題を修正した、ありがとう。私はまた、そのような複数のプロパティを渡すことができますか? mlt_factory_producer(p、NULL、 "hold:logo.png width:20 height:20" –

+0

いいえ、あなたはサービス(この場合プロデューサ)に "引数"を指定することができますmlt_properties_set他のすべてのプロパティについては –

関連する問題