2016-06-28 5 views
0

Je construis un programme en utilisant des bibliothèques ffmpeg basées sur l'exemple de transcodeur ffmpeg standard. Mon but est de construire un transcodeur vidéo qui code toute vidéo appropriée (c'est-à-dire que ffmpeg peut lire) au format WEBM. La question est comment puis-je passer des options à l'encodeur VP8 pour contrôler la qualité de la vidéo de sortie et d'autres paramètres? Je veux dire passer ces options via du code C++.Comment faire passer l'option codeur VP8 par programme dans un programme basé sur ffmpeg

Répondre

1

Utilisez le code suivant:

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

La « option »/pertinente « valeur » paires sont tout ce que vous obtiendrez des guides de codage VP8 de par exemple le wiki FFmpeg. Par exemple, pour définir un débit de 1 mbps (premier exemple wiki), utilisez:

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

ou

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

Je recommande d'utiliser VP9 au lieu de VP8, vous ne serez pas obtenir une grande qualité avec VP8, mais c'est évidemment votre choix.

+0

Merci, cela m'a aidé. –