You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用FFmpeg去除视频黑边?实操遇问题求助

解决FFmpeg去除视频黑边的编码错误与残留黑边问题

1. 修复「width not divisible by 2」编码错误

你的命令中scale=ih*16/9:ih计算出的宽度849为奇数,而H.264等主流编码器要求分辨率必须是偶数。修改滤镜链,强制输出分辨率的宽高均为偶数:

ffmpeg -i sfu11.mp4 -vf "scale='trunc(ih*16/2)*2':ih,scale=iw:-2,setsar=1" -y out.mp4

这里用trunc(ih*16/2)*2把计算出的宽度转为偶数,再配合scale=iw:-2确保高度也保持偶数对齐,避免编码报错。

2. 解决水平黑边与cropdetect残留黑边问题

原滤镜逻辑是先按16:9缩放,会导致非16:9的画面被拉伸后补黑边,正确流程应该是先裁剪黑边再缩放:

步骤1:精准检测黑边区域

默认cropdetect可能因阈值或检测帧数不足导致识别不准,调整参数提升检测精度:

ffmpeg -i sfu11.mp4 -vf "cropdetect=limit=24:round=2:reset=100" -vframes 100 -f null -
  • limit=24:降低亮度阈值,更精准识别浅黑边(可根据实际画面调整数值)
  • round=2:确保裁剪后的分辨率为偶数,适配编码器要求
  • reset=100:每100帧重新检测一次,适配画面有变化的视频

执行后终端会输出类似crop=636:478:0:0的参数,这就是检测到的无黑边区域。

步骤2:裁剪+缩放至目标比例

用上一步得到的crop参数,先裁剪黑边,再缩放为16:9(或保持原比例):

# 假设检测到的参数是crop=636:478:0:0,缩放为16:9
ffmpeg -i sfu11.mp4 -vf "crop=636:478:0:0,scale=-2:ih*16/9,setsar=1" -y out.mp4

如果不需要强制16:9,只需裁剪黑边,直接用crop参数即可:

ffmpeg -i sfu11.mp4 -vf "crop=636:478:0:0,setsar=1" -y out.mp4

3. 实时验证效果

用ffplay预览调整后的效果,确认无黑边再执行编码:

ffplay -i sfu11.mp4 -vf "crop=636:478:0:0,scale=-2:ih*16/9,setsar=1"

内容的提问来源于stack exchange,提问作者watch-this

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:15:43