Why is the first image changing so quickly when creating video from images via FFmpeg?

24
2013-08
  • motto
    ffmpeg -r 0.15 -qscale 2 -i /var/www/44693/%0d.jpg /var/www/44693/output11.mp4
    

    With this command I am creating video from images, but the first image is changing so quickly. Others are just fine.

    Here's the created video.

    Output as text:

    root@li465-71:~# ffmpeg -r 0.15 -qscale 2 -i /var/www/44693/%0d.jpg /var/www/446                                                                                        93/output11.mp4
    ffmpeg version 0.8.1-4:0.8.1-0ubuntu1, Copyright (c) 2000-2011 the Libav develop                                                                                        ers
      built on Mar 22 2012 05:29:10 with gcc 4.6.3
    This program is not developed anymore and is only provided for compatibility. Us                                                                                        e avconv instead (see Changelog for the list of incompatible changes).
    [image2 @ 0x85dcaa0] max_analyze_duration reached
    
    Seems stream 0 codec frame rate differs from container frame rate: 0.15 (3/20) -                                                                                        > 0.75 (3/4)
    Input #0, image2, from '/var/www/44693/%0d.jpg':
      Duration: 00:01:13.33, start: 0.000000, bitrate: N/A
        Stream #0.0: Video: mjpeg, yuvj420p, 800x600 [PAR 1:1 DAR 4:3], 0.15 fps, 0.                                                                                        75 tbr, 0.15 tbn, 0.15 tbc
    File '/var/www/44693/output11.mp4' already exists. Overwrite ? [y/N] y
    Incompatible pixel format 'yuvj420p' for codec 'mpeg4', auto-selecting format 'yuv420p'
    [buffer @ 0x85df820] w:800 h:600 pixfmt:yuvj420p
    [avsink @ 0x85de240] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src'                                                                             and the filter 'out'
    [scale @ 0x85de680] w:800 h:600 fmt:yuvj420p -> w:800 h:600 fmt:yuv420p flags:0x4
    Output #0, mp4, to '/var/www/44693/output11.mp4':
      Metadata:
        encoder         : Lavf53.21.0
        Stream #0.0: Video: mpeg4, yuv420p, 800x600 [PAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 3 tbn,                                                                             0.75 tbc
    Stream mapping:
      Stream #0.0 -> #0.0
    Press ctrl-c to stop encoding
    frame=   50 fps=  0 q=2.0 Lsize=     949kB time=66.67 bitrate= 116.6kbits/s dup=39 drop=0                                                                               
    video:948kB audio:0kB global headers:0kB muxing overhead 0.125724%
    
  • Answers
  • Andy

    This is a bug, I noticed it myself. FFmpeg always outputs the first and second images in sequence, any timing you've chosen only kicks in after the second image. For example, if you have one frame to output every ten seconds, and you're making a 25fps movie, the first image will be your first frame, your second image will start 40ms later and be the second frame. After that, the second frame will be duplicated correctly up to the ten second mark (10.040???). I got around this by duplicating the first frame.

  • slhck

    To get you started:

    • -qscale is not an input option and should be placed after -i

    • The -qscale option is for MPEG-4 Part II video, not for h.264 video, which mp4 uses per default. It will probably be ignored. Use -crf 20 (or other sane values from 19 to 24) to change quality.

    • Your input is incorrectly parsed, maybe try to force image2:

      ffmpeg -r 0.15 -f image2 -i /var/www/44693/%0d.jpg /var/www/44693/output11.mp4
      
    • In any case, your codec frame rate and container frame rate mismatch, which shouldn't happen.

    • If that fails, use a more recent version of FFmpeg. For Ubuntu, follow this guide.

  • rogerdpack

    Looks like it's a bug, see https://ffmpeg.org/trac/ffmpeg/ticket/1925 the work around is to use " -vf fps=XX" instead of "-r" it appears (or duplicate the first frame).


  • Related Question

    Why does the quality of this video suck when converted with ffmpeg as opposed to mencoder?
  • scompt.com

    screesnshot

    Here's the command line that I'm using for both and the output. Any ideas? The bitrate of the two videos is comparable: both around 1500Kbps.

    ffmpeg command:

    ffmpeg -y -i aud.mp4 -acodec copy -i input.mp4 -ac 2 -vcodec libx264 -s 1280x720 
    -b 1850k -keyint_min 25 -g 250 -deinterlace -coder 1 -trellis 1 -directpred 1
    -b_strategy 1 -bf 3 -refs 3 -subq 5 -me_method hex -me_range 16 
    -partitions +parti8x8+parti4x4+partp8x8+partb8x8 -flags +loop 
    -flags2 +bpyramid+wpred+mixed_refs+dct8x8+fastpskip+mbtree -bufsize 2000k
    -sc_threshold 40 -cmp +chroma -qdiff 4 -qmin 5 -qmax 51 -qcomp 0.6 -i_qfactor 0.71
    -t 0:0:20 -wpredp 2 -r 25 -bt 1500000 output.mp4
    

    ffmpeg output:

    FFmpeg version SVN-r21602, Copyright (c) 2000-2010 Fabrice Bellard, et al.
      built on Feb 24 2010 18:28:53 with gcc 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
      configuration: --prefix=/var/jails/build/ --enable-static --disable-altivec --disable-debug --disable-network --enable-libvorbis --enable-libtheora --enable-libxvid --enable-libx264 --enable-libfaad --enable-libfaac --enable-gpl --disable-ffplay --disable-ffserver --enable-nonfree --enable-avfilter --enable-avfilter-lavf --enable-libmp3lame --enable-pthreads --enable-postproc --disable-shared --enable-static --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --enable-avfilter --enable-avfilter-lavf
      libavutil     50. 8. 0 / 50. 8. 0
      libavcodec    52.51. 0 / 52.51. 0
      libavformat   52.50. 0 / 52.50. 0
      libavdevice   52. 2. 0 / 52. 2. 0
      libavfilter    1.17. 0 /  1.17. 0
      libswscale     0. 9. 0 /  0. 9. 0
      libpostproc   51. 2. 0 / 51. 2. 0
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'bad.aud.mp4':
      Metadata:
        major_brand     : mp42
        minor_version   : 0
        compatible_brands: M4A mp42isomndia
        encoder         : Nero AAC codec / 1.3.3.0
      Duration: 00:07:24.30, start: 0.000000, bitrate: 90 kb/s
        Stream #0.0(und): Audio: aac, 44100 Hz, stereo, s16, 89 kb/s
    [mov,mp4,m4a,3gp,3g2,mj2 @ 0x8b6fe10]max_analyze_duration reached
    
    Seems stream 1 codec frame rate differs from container frame rate: 50.00 (50/1) -> 25.00 (25/1)
    Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'bad.mp4':
      Metadata:
        major_brand     : mp42
        minor_version   : 0
        compatible_brands: mp42isomavc1
        encoder         : Sorenson Squeeze 5.0
      Duration: 00:07:24.32, start: 0.000000, bitrate: 910 kb/s
        Stream #1.0(und): Audio: aac, 48000 Hz, stereo, s16, 320 kb/s
        Stream #1.1(und): Video: h264, yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 524 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
        Stream #1.2(und): Data: mp4s / 0x7334706D
        Stream #1.3(und): Data: mp4s / 0x7334706D
        Stream #1.4(eng): Data: rtp  / 0x20707472, 23 kb/s
        Stream #1.5(eng): Data: rtp  / 0x20707472, 34 kb/s
    [libx264 @ 0x8bae2c0]using SAR=1/1
    [libx264 @ 0x8bae2c0]using cpu capabilities: MMX2 SSE2 SSE3 Cache64
    [libx264 @ 0x8bae2c0]profile High, level 3.1
    Output #0, mp4, to 'out.mp4':
        Stream #0.0(und): Video: libx264, yuv420p, 1280x720 [PAR 1:1 DAR 16:9], q=5-51, 1850 kb/s, 25 tbn, 25 tbc
        Stream #0.1(und): Audio: aac, 44100 Hz, stereo, 89 kb/s
    Stream mapping:
      Stream #1.1 -> #0.0
      Stream #0.0 -> #0.1
    Press [q] to stop encoding
    frame=  499 fps= 10 q=-1.0 Lsize=    3514kB time=19.92 bitrate=1445.3kbits/s        
    video:3279kB audio:220kB global headers:0kB muxing overhead 0.432718%
    [libx264 @ 0x8bae2c0]frame I:3     Avg QP: 7.77  size: 66763
    [libx264 @ 0x8bae2c0]frame P:208   Avg QP: 6.89  size: 12756
    [libx264 @ 0x8bae2c0]frame B:288   Avg QP:11.95  size:  1748
    [libx264 @ 0x8bae2c0]consecutive B-frames: 22.0%  1.2%  1.8% 75.0%
    [libx264 @ 0x8bae2c0]mb I  I16..4: 66.1% 10.0% 23.9%
    [libx264 @ 0x8bae2c0]mb P  I16..4:  3.1%  1.4%  1.6%  P16..4: 14.5%  2.0%  1.5%  0.0%  0.0%    skip:75.9%
    [libx264 @ 0x8bae2c0]mb B  I16..4:  1.0%  0.6%  0.2%  B16..8:  2.6%  0.2%  0.2%  direct: 5.7%  skip:89.4%  L0:45.2% L1:46.4% BI: 8.4%
    [libx264 @ 0x8bae2c0]8x8 transform intra:23.9% inter:38.3%
    [libx264 @ 0x8bae2c0]coded y,uvDC,uvAC intra: 38.0% 34.2% 18.6% inter: 4.9% 6.7% 2.1%
    [libx264 @ 0x8bae2c0]i16 v,h,dc,p: 59% 34%  4%  3%
    [libx264 @ 0x8bae2c0]i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 25% 35% 28%  2%  2%  2%  2%  2%  3%
    [libx264 @ 0x8bae2c0]i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 26% 35% 15%  4%  4%  5%  4%  4%  4%
    [libx264 @ 0x8bae2c0]Weighted P-Frames: Y:9.1%
    [libx264 @ 0x8bae2c0]ref P L0: 71.5% 18.0%  3.2%  3.5%  3.7%
    [libx264 @ 0x8bae2c0]ref B L0: 90.3%  7.4%  2.3%
    [libx264 @ 0x8bae2c0]ref B L1: 91.5%  8.5%
    [libx264 @ 0x8bae2c0]kb/s:1345.52
    

    MEncoder command:

    mencoder bad.mp4 -oac pcm -ovc x264 -ofps 25.0 -vf scale=1280:720,harddup
    -o out2.mp4 -srate 48000 -endpos 20
    -x264encopts threads=1:bitrate=1850:vbv_bufsize=2000:bframes=3:frameref=3:subq=5:me=hex:b_pyramid=normal:partitions=all 
    

    MEncoder output:

    MEncoder SVN-r30554-4.1.2 (C) 2000-2010 MPlayer Team
    
    WARNING: OUTPUT FILE FORMAT IS _AVI_. See -of help.
    success: format: 0  data: 0x0 - 0x3036dc5
    libavformat file format detected.
    [mov,mp4,m4a,3gp,3g2,mj2 @ 0x8ed2b70]max_analyze_duration reached
    [lavf] Audio stream found, -aid 0
    [lavf] Video stream found, -vid 1
    VIDEO:  [H264]  1280x720  24bpp  25.000 fps  524.0 kbps (64.0 kbyte/s)
    [V] filefmt:44  fourcc:0x34363248  size:1280x720  fps:25.000  ftime:=0.0400
    ==========================================================================
    Opening audio decoder: [faad] AAC (MPEG2/4 Advanced Audio Coding)
    AUDIO: 48000 Hz, 2 ch, s16le, 320.0 kbit/20.83% (ratio: 40000->192000)
    Selected audio codec: [faad] afm: faad (FAAD AAC (MPEG-2/MPEG-4 Audio))
    ==========================================================================
    Opening video filter: [expand osd=1]
    Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
    Opening video filter: [harddup]
    Opening video filter: [scale w=1280 h=720]
    ==========================================================================
    Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
    Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
    ==========================================================================
    Movie-Aspect is 1.78:1 - prescaling to correct movie aspect..000 [0:0]
    [swscaler @ 0x8938400]using unscaled yuv420p -> yuv420p special converter
    x264 [info]: using SAR=1/1
    x264 [info]: using cpu capabilities: MMX2 SSE2 SSE3 Cache64
    x264 [info]: profile High, level 3.1
    New_Face failed. Maybe the font path is wrong.
    Please supply the text font file (~/.mplayer/subfont.ttf).
    subtitle font: load_sub_face failed.
    New_Face failed. Maybe the font path is wrong.
    Please supply the text font file (~/.mplayer/subfont.ttf).
    subtitle font: load_sub_face failed.
    Writing header...1f ( 2%)  0.00fps Trem:   0min   0mb  A-V:0.044 [0:0]]
    ODML: vprp aspect is 16:9.
    Setting audio delay to 0.080s.
    Writing header...
    ODML: vprp aspect is 16:9.
    Setting audio delay to 0.080s.
    Pos:  20.0s    542f ( 8%) 10.06fps Trem:  10min  79mb  A-V:0.053 [1144:1536]
    Flushing video frames.
    Writing index...
    Writing header...
    ODML: vprp aspect is 16:9.
    Setting audio delay to 0.080s.
    
    Video stream: 1063.410 kbit/s  (132926 B/s)  size: 2876525 bytes  21.640 secs  542 frames
    
    Audio stream: 1536.000 kbit/s  (192000 B/s)  size: 3840000 bytes  20.000 secs
    x264 [info]: frame I:3     Avg QP:10.62  size:106222
    x264 [info]: frame P:216   Avg QP:10.67  size:  9236
    x264 [info]: frame B:322   Avg QP:13.29  size:  1748
    x264 [info]: consecutive B-frames: 19.7%  0.7%  2.2% 77.3%
    x264 [info]: mb I  I16..4: 58.7%  8.0% 33.3%
    x264 [info]: mb P  I16..4:  2.8%  1.4%  1.3%  P16..4: 12.8%  1.6%  1.0%  0.2%  0.2%    skip:78.7%
    x264 [info]: mb B  I16..4:  0.7%  0.6%  0.2%  B16..8:  2.4%  0.3%  0.2%  direct: 6.7%  skip:88.9%  L0:44.3% L1:47.1% BI: 8.5%
    x264 [info]: 8x8 transform intra:26.2% inter:52.8%
    x264 [info]: coded y,uvDC,uvAC intra: 38.7% 35.5% 16.8% inter: 3.9% 6.7% 1.0%
    x264 [info]: i16 v,h,dc,p: 56% 37%  4%  4%
    x264 [info]: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 25% 33% 29%  2%  2%  2%  2%  2%  3%
    x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 27% 33% 16%  4%  4%  5%  4%  4%  4%
    x264 [info]: Weighted P-Frames: Y:8.8%
    x264 [info]: ref P L0: 69.0% 20.1%  3.6%  3.3%  4.0%
    x264 [info]: ref B L0: 91.5%  6.9%  1.6%
    x264 [info]: ref B L1: 95.0%  5.0%
    x264 [info]: kb/s:1063.41
    

  • Related Answers
  • scompt.com

    I'm an idiot. The video is non-interlaced and I was passing the -deinterlace flag to ffmpeg. This was the source of the artifacts.