2016-06-28 11 views
0

Ich bin ein Programm mit ffmpeg Bibliotheken auf der Grundlage der Standard-ffmpeg Transcoder-Beispiel erstellen. Mein Ziel ist es, einen Video-Transcoder zu erstellen, der jedes geeignete Video (d. H. Welches ffmpeg lesen kann) in das WEBM-Format codiert. Die Frage ist, wie übergebe ich Optionen zum VP8-Encoder, um die Videoqualität und andere Parameter zu steuern? Ich meine, diese Option über C++ - Code zu übergeben.Wie VP8 Encoder-Option programmgesteuert in ffmpeg-basierten Programm übergeben

Antwort

1

Verwenden Sie den folgenden Code ein:

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

Die entsprechende „Option“/„Wert“ Paare sind, was Sie von den VP8 Codierung Führer von zum Beispiel bekommen würde das FFmpeg Wiki. Zum Beispiel, eine Bitrate von 1 mbps (erstes Beispiel in wiki) zu setzen, verwenden Sie:

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

oder

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

Ich empfehle VP9 verwenden anstelle von VP8, werden Sie nicht große Qualität erhalten mit VP8, aber das ist natürlich Ihre Wahl.

+0

Danke, das hat mir geholfen. –

Verwandte Themen