FFmpeg缩放视频遇宽度无法被2整除问题求助
解决FFmpeg libx264编码时“width not divisible by 2”的问题
这个报错的核心原因是libx264编码器要求视频的宽度和高度必须是偶数,你之前的尝试只处理了高度的偶数化,但宽度还是可能因为按比例计算得到奇数,导致依然报错。下面给你两个靠谱的解决方案:
方法一:用-2自动适配偶数尺寸(最简便)
FFmpeg的scale滤镜支持用-2替代-1,它会自动将缩放后的尺寸调整为最接近的偶数,同时严格保持原视频的宽高比。结合你要限制高度不超过720的需求,命令可以改成:
ffmpeg -i input.mp4 -y -acodec aac -ac 2 -ab 160k -vcodec libx264 -vf "scale=-2:'min(720,-2)'" -f mp4 output.mp4
这里的-2作用是:
- 宽度用
-2:按比例计算后自动取最接近的偶数 - 高度用
min(720,-2):先确保高度不超过720,同时如果原高度超过720,缩放后的高度也会自动取偶数
方法二:手动计算并强制偶数(更灵活)
如果你需要更精细的控制(比如向下取整或向上取整),可以用数学函数手动计算宽高:
ffmpeg -i input.mp4 -y -acodec aac -ac 2 -ab 160k -vcodec libx264 -vf "scale='trunc(min(720,ih)*a/2)*2':'min(720,trunc(ih/2)*2)'" -f mp4 output.mp4
解释一下参数:
min(720,ih):先确定最大允许的高度(不超过720)trunc(min(720,ih)*a/2)*2:根据宽高比a计算宽度,然后通过trunc(...)取整后乘以2,确保宽度是偶数trunc(ih/2)*2:确保原始高度如果超过720,缩放后的高度是偶数
这两种方法都能解决你的问题,推荐第一种,简单高效还不容易出错。
内容的提问来源于stack exchange,提问作者yarek
相关产品推荐
相关产品推荐

