FFmpeg自动缩放报错:画面宽度需为色度子采样整数倍数的解决问询
解决FFmpeg缩放时宽度非整数导致libx265报错的问题
当你执行ffmpeg -i "1.mp4" -vf "scale=-1:1920" -c:v libx265 ...这类命令时,原始视频比例算出的宽度可能不是2的整数倍,不符合yuv420色度子采样要求,触发libx265报错。可以用下面两种方法自动把宽度调整为符合要求的数值:
方法1:用表达式手动取整
修改scale滤镜参数,通过表达式将计算出的宽度强制转为2的整数倍:
ffmpeg -i "1.mp4" -vf "scale='trunc(ow/2)*2':1920" -c:v libx265 -c:a aac -preset slow -x265-params "crf=22:min-keyint=25:keyint=50" "2.mp4"
ow是FFmpeg自动计算出的目标宽度(此处为3413.33),trunc(ow/2)*2会向下取整到最近的2的倍数(3412);如果想向上取整,把trunc换成ceil即可得到3414。
方法2:用force_divisible_by参数(FFmpeg 4.4+支持)
FFmpeg 4.4及以上版本的scale滤镜新增了force_divisible_by参数,直接指定对齐倍数,写法更简洁:
ffmpeg -i "1.mp4" -vf "scale=-1:1920:force_divisible_by=2" -c:v libx265 -c:a aac -preset slow -x265-params "crf=22:min-keyint=25:keyint=50" "2.mp4"
这个参数会自动把宽高调整为指定倍数(此处为2)的整数,同时保持原始比例,批量处理时用这个更省心。
两种方法只会让宽度产生极小偏差,完全满足批量处理的需求。
内容的提问来源于stack exchange,提问作者kali
相关产品推荐
相关产品推荐

