FFmpeg 异常:height not divisible by 2

在使用FFmpeg结合计算机视觉(CV)模型处理视频时,为提升预测效率,使用Pillow对图像进行压缩。然而在将预测结果合成为视频时,遇到FFmpeg编码错误,提示图像高度不可被2整除。问题源于360x203的图像尺寸不符合H264编码要求。解决方法是确保图像尺寸为360x204,保持宽高比的同时满足编码规范。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在尝试用FFmpeg结合CV模型做视频预测时,为了提高预测效率,在对单张视频帧预测前使用Pillow对图像做了压缩,代码如下:

def img_thumbnail(img: Image.Image) -> \
        (Image.Image, int, int):
    """
    缩放图片
    :param img:
    :return: 返回图片对象的缩略图,宽,高
    """
    if img.size[0] > 360 or img.size[1] > 360:
        size = 360, 360  # 最高像素360
        img.thumbnail(size, Image.ANTIALIAS)
    return img, img.size[0], img.size[1]

之后对预测后的图片压缩成视频时,FFmpeg抛出如下异常:

...
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
[libx264 @ 0x5645875d8cc0] height not divisible by 2 (360x203)
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!

直译过来就是:高度不能被2整除。从反馈的信息可以看到,压缩后的图片是360x203,即图像的像素高度是203,查阅资料得知H264编码需要视频的宽、高可被2整除参考
解决方法也比较简单,360x203实际上是640x360等比例缩放得到的,只要指定图片的像素为360x204即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值