Why is the first image changing so quickly when creating video from images via FFmpeg?
2013-08
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%
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.
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, whichmp4
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.
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).
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
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.