ffmpegh.264libx264

FFMPEG (libx264) "height not divisible by 2"


I am trying to encode a .mp4 video from a set of frames using FFMPEG using the libx264 codec.

This is the command I am running:

/usr/local/bin/ffmpeg -r 24 -i frame_%05d.jpg -vcodec libx264 -y -an video.mp4

I sometimes get the following error:

[libx264 @ 0xa3b85a0] height not divisible by 2 (520x369)

After searching around a bit it seems that the issue has something to do with the scaling algorithm and can be fixed by adding a -vf argument.

However, in my case I don't want to do any scaling. Ideally, I want to keep the dimensions exactly the same as the frames. Any advice? Is there some sort of aspect ratio that h264 enforces?


Solution

  • The answer to the original question should not scale the video but instead fix the height not divisible by 2 error. This can be achieve using this filter:

    -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2"
    

    Full command:

    ffmpeg -i frame_%05d.jpg -vcodec libx264 \
     -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -r 24 \
     -y -an video.mp4 
    

    Basically, .h264 needs even dimensions so this filter will:

    1. Divide the original height and width by 2
    2. Round it up to the nearest pixel
    3. Multiply it by 2 again, thus making it an even number
    4. Add black padding pixels up to this number

    You can change the color of the padding by adding filter parameter :color=white. See the documentation of pad.