看看FFmpeg库支持的h264编码器,我看到了不少编码器:
libx264
nvenc_h264
h264_nvenc
h264_vaapi
h264_cuvid
h264_vdpau
要获得H264编码器,我们进行通用调用:
encoder = avcodec_find_encoder(AV_CODEC_ID_H264);
我们如何知道实际拾取的编码器?问候。
答案 0 :(得分:2)
检查avcodec_find_encoder()
here的签名:
AVCodec* avcodec_find_encoder(enum AVCodecID id)
它返回一个AVCodec
结构指针。那么让我们看看AVCodec
结构可以告诉我们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);
默认情况下,AV_CODEC_ID_H264
会选择libx264
。
另一种方法是检查ffmpeg源,尝试在libavcodec/
目录中搜索编码器ID。通常,编码器AVCodec
结构将位于c源文件的末尾,包括名称,长名称和ID。例如,以下结构位于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,
};
关于其他编解码器,h264_nvenc
和nvenc_h264
与NVIDIA GPU编码器相同;各种硬件支持vaapi
和vdpau
; h264_cuvid
是cuda解码支持,也是由NVIDIA GPU提供的。如果您需要任何这些编解码器,请通过avcodec_find_encoder_by_name()
获取。