无法使用FFMPEG API将H264配置文件更改为Main

时间:2015-06-07 10:45:30

标签: c++ qt ffmpeg h.264

我正在使用QtFFMPEG包装器(https://code.google.com/p/qtffmpegwrapper/)和Qt 5.4以及MSCV 2012.我想以25 fps和高配置文件从图像文件中编码mp4视频。 我使用了here

中的createFile()和encodeImage()函数

我使用以下参数:

pCodecCtx=pVideoStream->codec;
pCodecCtx->codec_id = pOutputFormat->video_codec;
pCodecCtx->codec_type = ffmpeg::AVMEDIA_TYPE_VIDEO;
pCodecCtx->profile=FF_PROFILE_H264_HIGH;
pCodecCtx->bit_rate = Bitrate;
pCodecCtx->width = getWidth();
pCodecCtx->height = getHeight();
pCodecCtx->time_base.den = fps;
pCodecCtx->time_base.num = 1;
pCodecCtx->gop_size = 10;
pCodecCtx->pix_fmt = ffmpeg::PIX_FMT_YUV420P;
pCodecCtx->qmin = 10;
pCodecCtx->qmax = 51;

FFMPEG变量是:

License: %s
 GPL version 3 or later
AVCodec version %d
 3476480
AVFormat configuration: %s
 --disable-static --enable-shared --enable-gpl --enable-version3 --enable-runtime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib

现在我现在收到一个包含以下属性的视频:

ID                             : 1
Format                         : AVC
Format/Info                    : Advanced Video Codec
Format profile                 : Main@L3.2
Format settings, CABAC         : No
Format settings, ReFrames      : 1 frame
Format settings, GOP           : M=1, N=10
Codec ID                       : avc1
Codec ID/Info                  : Advanced Video Coding
Duration                       : 4s 320ms

我希望个人资料为" High"和3个ReFrames的CABAC是肯定的。我如何实现这一目标?我尝试设置配置文件,coder_type和max_b_frames但没有帮助。有时生成的文件甚至没有播放。任何人都可以帮忙。感谢。

我也尝试过使用av_opt_set()方式但找不到该功能。只有我有的功能是av_opt_set_dict(),我错过了什么 - 过时的FFMPEG或缺少#include。

也试过这个,没有帮助 -

   ffmpeg::AVDictionary *opt = NULL;
   int iRes = av_dict_set(&opt, "profile", "high", 0);
   av_opt_set_dict(pFormatCtx->priv_data, &opt);
   av_opt_set_dict(pFormatCtx, &opt);

请帮忙。

编辑: 我通过改变qmin和qmax值获得了高质量的mp4,然后通过命令行重新编码大尺寸输出。我将按照Ronald的建议尝试升级FFMPEG。请暂时关闭此问题。

1 个答案:

答案 0 :(得分:1)

AVCodec version %d
 3476480

该版本(libavcodec 53.12.0)是从2011年10月开始,请更新为更新的版本。正如您在H264 encoding wiki docs中看到的,您的设置将适用于最新版本的ffmpeg。 (另外请分享您的其余代码,您只是显示设置您的设置的代码,但不是代码的任何其他部分,因此我无法重现任何内容。)