2017-05-10 2 views
1

bei h264 Encodern der Suche von FFmpeg-Bibliothek unterstützt, ich sehe schon einige Geber:Wie kann der spezifische H264-Encoder aus FFmpeg library bestimmt werden?

libx264 
nvenc_h264 
h264_nvenc 
h264_vaapi 
h264_cuvid 
h264_vdpau 

einen H264-Encoder zu erhalten, wir einen allgemeinen Anruf:

encoder = avcodec_find_encoder(AV_CODEC_ID_H264); 

Wie können wir wissen, welche Encoder wurde tatsächlich abgeholt? Grüße.

Antwort

2

Überprüfen Sie die Unterschrift von avcodec_find_encoder()here:

AVCodec* avcodec_find_encoder(enum AVCodecID id) 

Es gibt einen AVCodec struct Zeiger. Dann wollen wir mal sehen, was AVCodec struct kann sagen uns here:

const char * name 
const char * long_name 

// Log or print either of them will show you the encoder name. 
printf("%s\n", encoder->name); 
printf("%s\n", encoder->long_name); 

Und standardmäßig AV_CODEC_ID_H264libx264 wählen werden.

Ein anderer Ansatz besteht darin, die Quelle ffmpeg zu überprüfen. Versuchen Sie, die Encoder-ID in libavcodec/ zu suchen. Normalerweise befindet sich ein Codierer AVCodec struct am Ende einer c-Quelldatei, einschließlich Name, Langname und ID. Zum Beispiel ist die folgende Struktur in libavcodec/libx264.c:

AVCodec ff_libx264_encoder = { 
    .name    = "libx264", 
    .long_name  = NULL_IF_CONFIG_SMALL("libx264 H.264/AVC/MPEG-4 AVC/MPEG-4 part 10"), 
    .type    = AVMEDIA_TYPE_VIDEO, 
    .id    = AV_CODEC_ID_H264, 
    .priv_data_size = sizeof(X264Context), 
    .init    = X264_init, 
    .encode2   = X264_frame, 
    .close   = X264_close, 
    .capabilities  = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AUTO_THREADS, 
    .priv_class  = &x264_class, 
    .defaults   = x264_defaults, 
    .init_static_data = X264_init_static, 
    .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | 
         FF_CODEC_CAP_INIT_CLEANUP, 
}; 

über die anderen Codecs, h264_nvenc und nvenc_h264 ist für NVIDIA GPU-Encoder; vaapi und vdpau wird von verschiedenen Hardwares unterstützt; und h264_cuvid ist Cuda Decodierung Unterstützung, auch von NVIDIA-GPU zur Verfügung gestellt. Wenn Sie einen dieser Codecs benötigen, erhalten Sie es unter avcodec_find_encoder_by_name().

Verwandte Themen