[Libav-user] fps porblem when saving video in mp4 container

Morduhaev, Igor (igorm@stats.com) igorm at stats.com
Sun Nov 25 14:56:10 CET 2012

Carl, firstly thank you for your answer.

1.  You wrote "You could test with ffmpeg (the application) and let the libraries print the values you set in your code to find out which one is wrong"

What do you mean by this? Can give an example?

2.  I ran the command below with ffmpeg I downloaded from http://ffmpeg.zeranoe.com/builds/

"ffmpeg.exe -I c:= C:\\000227_C1_GAME.avi -vcodec libx264 c:\test.mp4"

I wanted to see what params it uses so I could set them in code, but I couldn't map many params to params in code. For example, AVCodecContext missing params "rc", "mbtree", "crf", "ip_ratio". How to set them in code?

C:\Users\igorm\Desktop\ffmpeg-20121029-git-11d695d-win32-shared\bin>ffmpeg.exe -

i c:\000227_C1_GAME.avi -vcodec libx264 c:\test.mp4

ffmpeg version N-46146-g11d695d Copyright (c) 2000-2012 the FFmpeg developers

  built on Oct 29 2012 18:08:23 with gcc 4.7.2 (GCC)

  configuration: --disable-static --enable-shared --enable-gpl --enable-version3

 --disable-pthreads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib

--enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-

amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libnut -

-enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger -

-enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --

enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enab

le-libxavs --enable-libxvid --enable-zlib

  libavutil      52.  1.100 / 52.  1.100

  libavcodec     54. 69.100 / 54. 69.100

  libavformat    54. 35.100 / 54. 35.100

  libavdevice    54.  3.100 / 54.  3.100

  libavfilter     3. 20.109 /  3. 20.109

  libswscale      2.  1.101 /  2.  1.101

  libswresample   0. 16.100 /  0. 16.100

  libpostproc    52.  1.100 / 52.  1.100

[mpeg4 @ 0076f420] Invalid and inefficient vfw-avi packed B frames detected

Input #0, avi, from 'c:\000227_C1_GAME.avi':

  Duration: 00:05:59.48, start: 0.000000, bitrate: 1398 kb/s

    Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv

420p, 808x610 [SAR 1:1 DAR 404:305], 25 tbr, 25 tbn, 25 tbc

File 'c:\test.mp4' already exists. Overwrite ? [y/N] y

using SAR=1/1

[libx264 @ 025f3c80] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE

4.1 Cache64

[libx264 @ 025f3c80] profile High, level 3.1

[libx264 @ 025f3c80] 264 - core 128 r2216 198a7ea - H.264/MPEG-4 AVC codec - Cop

yleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deb

lock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 m

e_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chro

ma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 i

nterlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1

b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenec

ut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=

0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00

Output #0, mp4, to 'c:\test.mp4':


    encoder         : Lavf54.35.100

    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 808x610 [SAR 1:1

 DAR 404:305], q=-1--1, 12800 tbn, 25 tbc

Stream mapping:

  Stream #0:0 -> #0:0 (mpeg4 -> libx264)

Press [q] to stop, [?] for help

[mpeg4 @ 04ca3840] Invalid and inefficient vfw-avi packed B frames detected

frame=   57 fps=0.0 q=28.0 size=      71kB time=00:00:00.20 bitrate=2896.9kbits/

frame=   89 fps= 88 q=28.0 size=     202kB time=00:00:01.48 bitrate=1117.3kbits/

I tested my code and it does compile! I compile it in VS2010 after configuring "VC++ Directories" in Property Pages of the project. What error do you get?
Here the whole code with includes I use

#include "stdafx.h"

#include "inttypes.h"

extern "C" {
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavutil/avutil.h"
#include <libswscale/swscale.h>
#include <libavutil/opt.h>
#include <libswscale/swscale.h>
#include <libavutil/imgutils.h>

#include <iostream>
using namespace sv;
using namespace std;

//TODO: use thread_count to increase converting speed

int main(int argc, char* argv[])

       // ****************************************
       //  Here goes the code from my last post
       // ****************************************

       return 0;

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20121125/4dc66e3e/attachment.html>

More information about the Libav-user mailing list