I've got a series of 361 .png files that I'm trying to convert to video, and for whatever reason the resulting video is just black. Here is the FFmpeg code I'm using:
ffmpeg -f image2 -i "FeatureTour_%05d.png" -r 30 -vcodec libx264 -b:v 9600k "FeatureTour.mp4"
The files are formatted correctly (FeatureTour_00001.png
) and no errors are thrown. It just results in a 160kb mp4 files that's black.
Any idea what I'm doing wrong?
EDIT
Here is my output after using the above code:
ffmpeg version N-46206-g0e4d34e Copyright (c) 2000-2012 the FFmpeg developers
built on Oct 30 2012 23:07:44 with llvm-gcc 4.2.1 (LLVM build 2336.11.00)
configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libaacplus --enable-libass --enable-libcelt --enable-libfaac --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-openssl --enable-libopus --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvo-aacenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --prefix=/usr/local
libavutil 52. 1.100 / 52. 1.100
libavcodec 54. 70.100 / 54. 70.100
libavformat 54. 35.100 / 54. 35.100
libavdevice 54. 3.100 / 54. 3.100
libavfilter 3. 20.113 / 3. 20.113
libswscale 2. 1.101 / 2. 1.101
libswresample 0. 16.100 / 0. 16.100
libpostproc 52. 1.100 / 52. 1.100
[image2 @ 0x7fa68381e200] max_analyze_duration 5000000 reached at 5000000
Input #0, image2, from 'FeatureTour_%05d.png':
Duration: 00:00:14.44, start: 0.000000, bitrate: N/A
Stream #0:0: Video: png, rgb24, 114x151 [SAR 2835:2835 DAR 114:151], 25 fps, 25 tbr, 25 tbn, 25 tbc
[libx264 @ 0x7fa683826c00] using SAR=1/1
[libx264 @ 0x7fa683826c00] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0x7fa683826c00] profile High 4:4:4 Predictive, level 3.0, 4:4:4 8-bit
[libx264 @ 0x7fa683826c00] 264 - core 125 - H.264/MPEG-4 AVC codec - Copyleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=4 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=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 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=9600 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'FeatureTour.mp4':
Metadata:
encoder : Lavf54.35.100
Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv444p, 114x151 [SAR 1:1 DAR 114:151], q=-1--1, 9600 kb/s, 15360 tbn, 30 tbc
Stream mapping:
Stream #0:0 -> #0:0 (png -> libx264)
Press [q] to stop, [?] for help
frame= 432 fps=0.0 q=-2.0 Lsize= 152kB time=00:00:14.33 bitrate= 86.9kbits/s dup=71 drop=0
video:146kB audio:0kB subtitle:0 global headers:0kB muxing overhead 3.905020%
[libx264 @ 0x7fa683826c00] frame I:3 Avg QP: 0.06 size: 8557
[libx264 @ 0x7fa683826c00] frame P:135 Avg QP: 0.10 size: 653
[libx264 @ 0x7fa683826c00] frame B:294 Avg QP: 0.43 size: 120
[libx264 @ 0x7fa683826c00] consecutive B-frames: 8.8% 0.9% 1.4% 88.9%
[libx264 @ 0x7fa683826c00] mb I I16..4: 30.0% 0.4% 69.6%
[libx264 @ 0x7fa683826c00] mb P I16..4: 2.1% 0.0% 1.9% P16..4: 7.5% 1.2% 0.8% 0.0% 0.0% skip:86.5%
[libx264 @ 0x7fa683826c00] mb B I16..4: 0.2% 0.0% 0.1% B16..8: 4.4% 0.3% 0.2% direct: 0.9% skip:93.8% L0:46.5% L1:48.9% BI: 4.5%
[libx264 @ 0x7fa683826c00] final ratefactor: -45.15
[libx264 @ 0x7fa683826c00] 8x8 transform intra:0.7% inter:19.3%
[libx264 @ 0x7fa683826c00] coded y,u,v intra: 44.4% 32.1% 31.5% inter: 2.3% 1.6% 1.4%
[libx264 @ 0x7fa683826c00] i16 v,h,dc,p: 25% 75% 0% 0%
[libx264 @ 0x7fa683826c00] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 30% 40% 10% 0% 5% 0% 10% 0% 5%
[libx264 @ 0x7fa683826c00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16% 71% 5% 1% 1% 1% 2% 1% 2%
[libx264 @ 0x7fa683826c00] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x7fa683826c00] ref P L0: 88.0% 3.9% 5.0% 3.1%
[libx264 @ 0x7fa683826c00] ref B L0: 85.4% 12.4% 2.1%
[libx264 @ 0x7fa683826c00] ref B L1: 98.1% 1.9%
[libx264 @ 0x7fa683826c00] kb/s:82.86
To create a video from a sequence of images with FFmpeg, you need to specify the input images and output file. There are several ways you can specify the input images and we'll look at examples of some of these.
FFmpeg format specifiers If you have a series of images that are sequentially named, e.g. happy1.jpg, happy2.jpg, happy3.jpg, happy4.jpg, etc. you can use ffmpeg format specifiers to indicate the images that FFmpeg should use: $ ffmpeg -framerate 1 -i happy%d.jpg -c:v libx264 -r 30 output.mp4
See the ffmpeg filters documentation for more information. -i MP3FILE.mp3 The audio filename -acodec copy Copies the audio from the input stream to the output stream If the video has already been compressed the following can be used to change the codmpression to h264:
If you want to encode in mjpeg with highest quality command line is: ffmpeg -r 25 -start_number 1 -f image2 -i "img_%04d.jpg" -vcodec mjpeg -qscale 1 video.avi And the beauty of the thing is that you can convert the video back to a series a pictures: ffmpeg -i video.avi "img_series_%04d.png" ffmpeg -i video.avi "img_series_%04d.jpg"
-vf format=yuv420p
(or the alias -pix_fmt yuv420p
) as an output optionffmpeg -framerate 30 -i input_%05d.png -vf format=yuv420p output.mp4
Otherwise ffmpeg
will attempt to preserve as much color information as it can, but most players can only decode YUV 4:2:0.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With