video encoding - Convert EXR file sequence with FFmpeg and x264

24
2013-08
  • user1863947

    When I convert an EXR sequence into a QuickTime MOV file using FFmpeg and the x264 codec, it codes the video – but in QuickTime Player and Windows Media Player it's just black!

    But when I open it up with VLC I can see the image and it looks fine. When I try the same thing with a JPG sequence instead of EXR it works perfectly! Does anyone have an idea what that could be?

    Here is my FFmpeg code:

    ffmpeg -y -i C:/seq_v001.%04d.exr -c:v libx264 -preset slow -crf 17 C:/out.mov
    

    Here is the console output:

    ffmpeg version N-47062-g26c531c Copyright (c) 2000-2012 the FFmpeg developers
      built on Nov 25 2012 12:25:21 with gcc 4.7.2 (GCC)
      configuration: --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 --enable-libxavs --enable-libxvid --enable-zlib
      libavutil      52.  9.100 / 52.  9.100
      libavcodec     54. 77.100 / 54. 77.100
      libavformat    54. 37.100 / 54. 37.100
      libavdevice    54.  3.100 / 54.  3.100
      libavfilter     3. 23.102 /  3. 23.102
      libswscale      2.  1.102 /  2.  1.102
      libswresample   0. 17.101 /  0. 17.101
      libpostproc    52.  2.100 / 52.  2.100
    [image2 @ 000000000025e4c0] Stream #0: not enough frames to estimate rate; consider increasing probesize
    Input #0, image2, from 'C:/seq_v001.%04d.exr':
      Duration: 00:00:04.00, start: 0.000000, bitrate: N/A
        Stream #0:0: Video: exr, rgb48le, 1920x1080 [SAR 1:1 DAR 16:9], 25 tbr, 25 tbn, 25 tbc
    [libx264 @ 0000000001fd0ea0] using SAR=1/1
    [libx264 @ 0000000001fd0ea0] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2
    [libx264 @ 0000000001fd0ea0] profile High 4:4:4 Predictive, level 5.0, 4:4:4 8-bit
    [libx264 @ 0000000001fd0ea0] 264 - core 128 r2216 198a7ea - H.264/MPEG-4 AVC codec - Copyleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=5 deblock=1:0:0 analyse=0x3:0x113 me=umh subme=8 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=18 lookahead_threads=3 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=50 rc=crf mbtree=1 crf=17.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
    Output #0, mov, to 'C:/out.mov':
      Metadata:
        encoder         : Lavf54.37.100
        Stream #0:0: Video: h264 (avc1 / 0x31637661), yuv444p, 1920x1080 [SAR 1:1 DAR 16:9], q=-1--1, 12800 tbn, 25 tbc
    Stream mapping:
      Stream #0:0 -> #0:0 (exr -> libx264)
    Press [q] to stop, [?] for help
    [exr @ 0000000001fddea0] Found more than one compression attribute
    [exr @ 0000000001fdda40] Found more than one compression attribute
    [exr @ 0000000001fde2e0] Found more than one compression attribute
    [exr @ 0000000001fde740] Found more than one compression attribute
    [exr @ 0000000001fdeb80] Found more than one compression attribute
    [exr @ 0000000001fdefe0] Found more than one compression attribute
    frame=    7 fps=0.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=   0.0kbits/s    
    Found more than one compression attribute
    [exr @ 0000000001fdf880] Found more than one compression attribute
    [exr @ 0000000001fdfcc0] Found more than one compression attribute
    [exr @ 0000000001fe0120] Found more than one compression attribute
    [exr @ 0000000001fe0560] Found more than one compression attribute
    [exr @ 0000000001fe09c0] Found more than one compression attribute
    [exr @ 0000000001fe0e00] Found more than one compression attribute
    [exr @ 0000000001fddea0] Found more than one compression attribute
    [exr @ 0000000001fdda40] Found more than one compression attribute
    [exr @ 0000000001fde2e0] Found more than one compression attribute
    frame=   17 fps= 16 q=0.0 size=       0kB time=00:00:00.00 bitrate=   0.0kbits/s    
    Found more than one compression attribute
    [exr @ 0000000001fdeb80] Found more than one compression attribute
    [exr @ 0000000001fdefe0] Found more than one compression attribute
    [exr @ 0000000001fdf420] Found more than one compression attribute
    [exr @ 0000000001fdf880] Found more than one compression attribute
    [exr @ 0000000001fdfcc0] Found more than one compression attribute
    [exr @ 0000000001fe0120] Found more than one compression attribute
    [exr @ 0000000001fe0560] Found more than one compression attribute
    [exr @ 0000000001fe09c0] Found more than one compression attribute
    [exr @ 0000000001fe0e00] Found more than one compression attribute
    [exr @ 0000000001fddea0] Found more than one compression attribute
    frame=   28 fps= 18 q=0.0 size=       0kB time=00:00:00.00 bitrate=   0.0kbits/s    
    Found more than one compression attribute
    [exr @ 0000000001fde2e0] Found more than one compression attribute
    [exr @ 0000000001fde740] Found more than one compression attribute
    [exr @ 0000000001fdeb80] Found more than one compression attribute
    [exr @ 0000000001fdefe0] Found more than one compression attribute
    [exr @ 0000000001fdf420] Found more than one compression attribute
    [exr @ 0000000001fdf880] Found more than one compression attribute
    [exr @ 0000000001fdfcc0] Found more than one compression attribute
    [exr @ 0000000001fe0120] Found more than one compression attribute
    [exr @ 0000000001fe0560] Found more than one compression attribute
    [exr @ 0000000001fe09c0] Found more than one compression attribute
    frame=   39 fps= 19 q=0.0 size=       0kB time=00:00:00.00 bitrate=   0.0kbits/s    
    Found more than one compression attribute
    [exr @ 0000000001fddea0] Found more than one compression attribute
    [exr @ 0000000001fdda40] Found more than one compression attribute
    [exr @ 0000000001fde2e0] Found more than one compression attribute
    [exr @ 0000000001fde740] Found more than one compression attribute
    [exr @ 0000000001fdeb80] Found more than one compression attribute
    [exr @ 0000000001fdefe0] Found more than one compression attribute
    [exr @ 0000000001fdf420] Found more than one compression attribute
    [exr @ 0000000001fdf880] Found more than one compression attribute
    [exr @ 0000000001fdfcc0] Found more than one compression attribute
    [exr @ 0000000001fe0120] Found more than one compression attribute
    frame=   50 fps= 19 q=0.0 size=       0kB time=00:00:00.00 bitrate=   0.0kbits/s    
    Found more than one compression attribute
    [exr @ 0000000001fe09c0] Found more than one compression attribute
    [exr @ 0000000001fe0e00] Found more than one compression attribute
    [exr @ 0000000001fddea0] Found more than one compression attribute
    [exr @ 0000000001fdda40] Found more than one compression attribute
    [exr @ 0000000001fde2e0] Found more than one compression attribute
    [exr @ 0000000001fde740] Found more than one compression attribute
    frame=   57 fps= 16 q=0.0 size=       0kB time=00:00:00.00 bitrate=   0.0kbits/s    
    Found more than one compression attribute
    [exr @ 0000000001fdefe0] Found more than one compression attribute
    [exr @ 0000000001fdf420] Found more than one compression attribute
    [exr @ 0000000001fdf880] Found more than one compression attribute
    [exr @ 0000000001fdfcc0] Found more than one compression attribute
    [exr @ 0000000001fe0120] Found more than one compression attribute
    [exr @ 0000000001fe0560] Found more than one compression attribute
    [exr @ 0000000001fe09c0] Found more than one compression attribute
    [exr @ 0000000001fe0e00] Found more than one compression attribute
    frame=   66 fps= 17 q=0.0 size=       0kB time=00:00:00.00 bitrate=   0.0kbits/s    
    Found more than one compression attribute
    [exr @ 0000000001fdda40] Found more than one compression attribute
    [exr @ 0000000001fde2e0] Found more than one compression attribute
    [exr @ 0000000001fde740] Found more than one compression attribute
    [exr @ 0000000001fdeb80] Found more than one compression attribute
    [exr @ 0000000001fdefe0] Found more than one compression attribute
    [exr @ 0000000001fdf420] Found more than one compression attribute
    [exr @ 0000000001fdf880] Found more than one compression attribute
    frame=   74 fps= 16 q=22.0 size=     255kB time=00:00:00.00 bitrate=   0.0kbits/s    
    Found more than one compression attribute
    [exr @ 0000000001fe0120] Found more than one compression attribute
    [exr @ 0000000001fe0560] Found more than one compression attribute
    [exr @ 0000000001fe09c0] Found more than one compression attribute
    [exr @ 0000000001fe0e00] Found more than one compression attribute
    frame=   79 fps= 16 q=22.0 size=     467kB time=00:00:00.20 bitrate=19134.5kbits/s    
    Found more than one compression attribute
    [exr @ 0000000001fdda40] Found more than one compression attribute
    [exr @ 0000000001fde2e0] Found more than one compression attribute
    [exr @ 0000000001fde740] Found more than one compression attribute
    frame=   83 fps= 15 q=22.0 size=     652kB time=00:00:00.36 bitrate=14829.5kbits/s    
    Found more than one compression attribute
    [exr @ 0000000001fdefe0] Found more than one compression attribute
    [exr @ 0000000001fdf420] Found more than one compression attribute
    [exr @ 0000000001fdf880] Found more than one compression attribute
    [exr @ 0000000001fdfcc0] Found more than one compression attribute
    frame=  100 fps= 15 q=22.0 size=    1505kB time=-577014:-32:-22.-77 bitrate=  -0.0kbits/s    
    frame=  100 fps=9.6 q=-1.0 Lsize=    3831kB time=00:00:03.92 bitrate=8006.7kbits/s    
    
    video:3829kB audio:0kB subtitle:0 global headers:0kB muxing overhead 0.050698%
    [libx264 @ 0000000001fd0ea0] frame I:1     Avg QP:18.35  size:168478
    [libx264 @ 0000000001fd0ea0] frame P:31    Avg QP:16.10  size: 83540
    [libx264 @ 0000000001fd0ea0] frame B:68    Avg QP:20.34  size: 17093
    [libx264 @ 0000000001fd0ea0] consecutive B-frames:  7.0%  4.0%  9.0% 80.0%
    [libx264 @ 0000000001fd0ea0] mb I  I16..4: 22.6% 67.9%  9.4%
    [libx264 @ 0000000001fd0ea0] mb P  I16..4:  1.3%  7.3%  0.6%  P16..4: 20.3% 10.1%  5.7%  0.0%  0.0%    skip:54.6%
    [libx264 @ 0000000001fd0ea0] mb B  I16..4:  0.2%  0.8%  0.1%  B16..8: 30.8%  4.8%  1.2%  direct: 1.5%  skip:60.6%  L0:46.0% L1:48.6% BI: 5.4%
    [libx264 @ 0000000001fd0ea0] 8x8 transform intra:76.0% inter:78.8%
    [libx264 @ 0000000001fd0ea0] direct mvs  spatial:85.3% temporal:14.7%
    [libx264 @ 0000000001fd0ea0] coded y,u,v intra: 87.8% 56.3% 53.3% inter: 13.0% 6.1% 5.0%
    [libx264 @ 0000000001fd0ea0] i16 v,h,dc,p: 12%  9% 24% 55%
    [libx264 @ 0000000001fd0ea0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 10%  8% 32%  7% 11%  8%  9%  7%  9%
    [libx264 @ 0000000001fd0ea0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 12%  8%  5%  8% 23% 14% 11%  9% 11%
    [libx264 @ 0000000001fd0ea0] Weighted P-Frames: Y:0.0% UV:0.0%
    [libx264 @ 0000000001fd0ea0] ref P L0: 40.6%  9.5% 25.3% 13.3%  9.3%  2.1%
    [libx264 @ 0000000001fd0ea0] ref B L0: 64.9% 24.5%  8.7%  1.9%
    [libx264 @ 0000000001fd0ea0] ref B L1: 89.8% 10.2%
    [libx264 @ 0000000001fd0ea0] kb/s:7841.10
    
  • Answers
  • slhck

    You're converting video using the YUV 4:4:4 color space. This is not really standard – most (some?) players will only support the chroma-subsampled YUV 4:2:0 planar, including Windows Media Player and QuickTime.

    Your JPEG images will typically use YUV 4:2:0 subsampling (yuvj420p), so FFmpeg will produce compatible video by default.

    Try encoding the video with -pix_fmt yuv420p instead:

    ffmpeg -y -i C:/seq_v001.%04d.exr -c:v libx264 -pix_fmt yuv420p -preset slow -crf 17 C:/out.mov
    

    You probably won't notice any huge quality loss compared to the non-subsampled version – the eye isn't as sensitive to color information as it is to spatial information.


  • Related Question

    How do you splice out a part of an xvid encoded avi file, with ffmpeg? (no problems with other files)
  • user11955

    Im using the following command, which works for most files, except what seems to be xvid encoded ones

    /usr/bin/ffmpeg -sameq -i file.avi -ss 00:01:00 -t 00:00:30 -ac 2 -r 25 -copyts output.avi
    

    So this should basically splice out 30 seconds of video + audio, starting from 1 minute mark.

    It does START encoding at the 00:01:00 mark but it goes all the way to the end of the file for some reason, ignoring that I want just 30 seconds.

    The output looks like this.

    FFmpeg version git-ecc4bdd, Copyright (c) 2000-2010 the FFmpeg developers
      built on May 31 2010 04:52:24 with gcc 4.4.3 20100127 (Red Hat 4.4.3-4)
      configuration: --enable-libx264 --enable-libxvid --enable-libmp3lame --enable-libopenjpeg --enable-libfaac --enable-libvorbis --enable-gpl --enable-nonfree --enable-libxvid --enable-pthreads --enable-libfaad --extra-cflags=-fPIC --enable-postproc --enable-libtheora --enable-libvorbis --enable-shared
      libavutil     50.15. 2 / 50.15. 2
      libavcodec    52.67. 0 / 52.67. 0
      libavformat   52.62. 0 / 52.62. 0
      libavdevice   52. 2. 0 / 52. 2. 0
      libavfilter    1.20. 0 /  1.20. 0
      libswscale     0.10. 0 /  0.10. 0
      libpostproc   51. 2. 0 / 51. 2. 0
    [mpeg4 @ 0x17cf770]Invalid and inefficient vfw-avi packed B frames detected
    Input #0, avi, from 'file.avi':
      Metadata:
        ISFT            : VirtualDubMod 1.5.10.2 (build 2540/release)
      Duration: 00:02:00.00, start: 0.000000, bitrate: 1587 kb/s
        Stream #0.0: Video: mpeg4, yuv420p, 672x368 [PAR 1:1 DAR 42:23], 25 tbr, 25 tbn, 25 tbc
        Stream #0.1: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
    File 'lol6.avi' already exists. Overwrite ? [y/N] y
    Output #0, avi, to 'lol6.avi':
      Metadata:
        ISFT            : Lavf52.62.0
        Stream #0.0: Video: mpeg4, yuv420p, 672x368 [PAR 1:1 DAR 42:23], q=2-31, 200 kb/s, 25 tbn, 25 tbc
        Stream #0.1: Audio: mp2, 48000 Hz, 2 channels, s16, 64 kb/s
    Stream mapping:
      Stream #0.0 -> #0.0
      Stream #0.1 -> #0.1
    Press [q] to stop encoding
    [mpeg4 @ 0x17cf770]Invalid and inefficient vfw-avi packed B frames detected
    [buffer @ 0x184b610]Buffering several frames is not supported. Please consume all available frames before adding a new one.
    frame= 1501 fps=104 q=0.0 Lsize=   15612kB time=30.02 bitrate=4259.7kbits/s    ts/s
    video:15303kB audio:235kB global headers:0kB muxing overhead 0.482620%
    

    if I convert this file to mp4 for example, and then perform the same action, it works perfectly.


  • Related Answers
  • quack quixote

    I presume your "convert to MP4" operation is just a container change, not a full re-encode of the A/V data streams. So perhaps FFmpeg is getting hung up on something broken in those AVI containers. This line in your output might support this:

    [mpeg4 @ 0x17cf770]Invalid and inefficient vfw-avi packed B frames detected

    You could try creating a new AVI container -- let FFmpeg copy the entire file, eg with:

    ffmpeg -i input.avi -vcodec copy -acodec copy output.avi
    

    This should create a new AVI container and copy the data streams. Then try your command again. If it works, you've got broken AVIs (or possibly an FFmpeg bug) -- either way, you can put all your videos into new AVI containers and get it done that way.

    If that doesn't work, you might look further into the broken XviDs and see what they have in common.

  • harrymc

    I wonder if your problem is the same as in this article:
    Convert any video file for an iPod or iPhone

    You want to use your fancy new Apple iPod Video or Apple iPhone, but you don't know how to convert video so it will play.

    Ubuntu 9.10 (Karmic Koala) ships with a version of ffmpeg without libfaac support because of licensing issues. This means you will need to compile ffmpeg yourself. This guide explains how.

    The article explains, step-by-step, how to compile ffmpeg by hand or create a modified ffmpeg package, that includes libfaac to support Advanced Audio Coding (AAC).