[FFmpeg-user] How to set X264 options using FFmpeg libraries
Zach Jacobs
zachjacobs at gmail.com
Fri Jul 26 19:27:07 CEST 2013
No one can help? Did I not provide enough information? I would really
like to get this issue solved.
Thanks!
On Thu, Jul 25, 2013 at 3:43 PM, Zach Jacobs <zachjacobs at gmail.com> wrote:
> Hello,
>
> I am trying to control the bit rate of a file using x264 with the crf and
> maximum bit rate parameters. I am following the x264 encoding guide here<https://trac.ffmpeg.org/wiki/x264EncodingGuide#CRFwithmaximumbitrate>.
> I tried the following from the command line:
>
> ffmpeg -i input.m4v -c:v libx264 -crf 20 -maxrate 400k -bufsize 1835k
> output.ts
>
> This works very well and the resulting bit rate is usually very close to
> 400k. However when I try to do the same thing by using the FFmpeg
> libraries, the encoder seems to ignore the maxrate parameter. Here is how
> I am setting up my CodecContext:
>
> AVDictionary* opt = null;
> FFmpegInvoke.av_dict_set(&opt, "preset", "slow", 0);
> FFmpegInvoke.av_dict_set(&opt, "crf", "20.0", 0);
> FFmpegInvoke.av_dict_set(&opt, "maxrate", "400k", 0);
> FFmpegInvoke.av_dict_set(&opt, "bufsize", "1835k", 0);
>
> videoCodec =
> FFmpegInvoke.avcodec_find_encoder(AVCodecID.AV_CODEC_ID_H264);
>
> if (videoCodec == null)
> throw new Exception("FFMPEG Encoder Error: Codec Not
> Found");
>
> videoCodecContext =
> FFmpegInvoke.avcodec_alloc_context3(videoCodec);
> videoCodecContext->width = encoderInfo.Settings.VideoWidth;
> videoCodecContext->height =
> encoderInfo.Settings.VideoHeight;
>
> videoCodecContext->pix_fmt =
> AVPixelFormat.AV_PIX_FMT_YUV420P;
> videoCodecContext->time_base.num = 1;
> videoCodecContext->time_base.den = 1000;
>
> videoCodecContext->codec_type =
> AVMediaType.AVMEDIA_TYPE_VIDEO;
> videoCodecContext->codec_id = AVCodecID.AV_CODEC_ID_H264;
>
> if (codecFlags != -1)
> videoCodecContext->flags |= codecFlags;
>
> if (FFmpegInvoke.avcodec_open2(videoCodecContext,
> videoCodec, &opt) < 0)
> throw new Exception("FFmpeg Encoder Error: could not
> open video codec");
>
> opt is empty after avcodec_open2 is called indicating all of my dictionary
> options that I tried to set were found and processed. However, the output
> video bit rate is no where near 400k maxrate that I specified. If I
> increase maxrate, the bit rate increases but it still isn't anywhere close
> to what it should be. The output file is roughly 319 MB.
>
> From the command line, the video bit rate is 395k and the resulting video
> size is only 42MB. Am I missing a setting?
>
> Thanks for your time!
>
> Zach
>
--
Zach Jacobs
Cell 859.620.3767
More information about the ffmpeg-user
mailing list