2016-06-28 5 views
0

標準のffmpegトランスコーダの例に基づいてffmpegライブラリを使用してプログラムを構築しています。私の目的は、任意の適切なビデオ(つまり、どのffmpegを読み込めるか)をWEBM形式にエンコードするビデオトランスコーダを構築することです。問題は、出力ビデオの品質やその他のパラメータを制御するオプションをVP8エンコーダに渡すにはどうすればいいですか?私はこれらのオプションをC++コードで渡すことを意味します。ffmpegベースのプログラムでVP8エンコーダオプションをプログラムで渡す方法

答えて

1

次のコードを使用します。

AVDictionary *options = NULL; 
AVCodec *codec = avcodec_find_encoder(AVCODEC_ID_VP8); 
AVCodecContext *ctx = avcodec_alloc_context3(codec); 

av_dict_set(&options, "option", "value", 0); 

int res = avcodec_open2(ctx, codec, &options); 
if (res < 0) 
    error(); 

while (..) { 
    res = avcodec_encode_video2(ctx, ..); 
    if (res < 0) 
     error(); 
} 

avcodec_close(ctx); 
avcodec_free_context(ctx); 

関連する「オプション」/「値」のペアは、あなたが、例えばからVP8のエンコード・ガイドからになるだろう何でもありFFmpeg wiki。たとえば、使用、1 Mbpsの(ウィキでは第1例)のビットレートを設定するには:私が代わりにVP8のVP9を使用することをお勧めします

av_dict_set(&options, "b", "1M", 0); 

av_dict_set_int(&options, "b", 1024 * 1024, 0); 

または

、あなたは偉大な品質を得ることはありませんVP8を使用しますが、それは明らかにあなたの選択です。

+0

ありがとう、これは私を助けてくれました。 –

関連する問題