使用FFmpeg/libAV编码H.264时设置preset报错求助
解决FFmpeg/libAV设置H.264编码器preset返回错误-1414549496的问题
错误码-1414549496对应AVERROR_OPTION_NOT_FOUND,本质是当前使用的H.264编码器不支持preset参数,核心原因及解决方法如下:
核心原因
你调用avcodec_find_encoder(AV_CODEC_ID_H264)返回的编码器可能不是libx264(FFmpeg默认的H.264软件编码器),而是其他H.264编码器(如openh264、nvenc硬件编码器等),这些编码器没有preset配置项。
解决步骤
明确指定使用libx264编码器
替换编码器查找代码,直接指定libx264,避免匹配到其他不兼容的编码器:// 替换原有的avcodec_find_encoder(AV_CODEC_ID_H264) mContext.codec = avcodec_find_encoder_by_name("libx264"); if (!mContext.codec) { // 处理编码器不存在的情况:比如FFmpeg编译时未启用libx264支持 fprintf(stderr, "libx264 encoder not found. Ensure FFmpeg was compiled with --enable-libx264\n"); return -1; }验证编码器类型
可以在查找编码器后打印名称,确认是否为libx264:fprintf(stdout, "Using encoder: %s\n", mContext.codec->name);调试错误细节
用av_strerror解析错误码,获取更直观的错误描述,方便排查:int ret = av_opt_set(mContext.codec_context->priv_data, "preset", "medium", 0); if (ret < 0) { char errbuf[AV_ERROR_MAX_STRING_SIZE]; av_strerror(ret, errbuf, sizeof(errbuf)); fprintf(stderr, "Failed to set preset: %s\n", errbuf); }确保FFmpeg编译时启用libx264
如果avcodec_find_encoder_by_name("libx264")返回空,说明你的FFmpeg库编译时没有开启libx264支持,需要重新编译FFmpeg并添加--enable-libx264参数(需先安装x264开发库)。
内容的提问来源于stack exchange,提问作者Mateusz Wójt
相关产品推荐
相关产品推荐

