FFmpeg pad过滤器计算错误的宽度

FFmpeg pad filter calculating wrong width

我正在使用

ffmpeg.exe -i in.jpg -filter_complex "[0:v]pad=iw:ih+10:0:0" out.jpg

在图像和视频的底部添加 10px 的填充。 在大多数情况下,它会按预期工作,但有些情况下宽度会偏离 1px,导致失败并出现错误:

[Parsed_pad_0 @ 000002ba70617c40] Input area 0:0:623:640 not within the padded area 0:0:622:650 or zero-sized
[Parsed_pad_0 @ 000002ba70617c40] Failed to configure input pad on Parsed_pad_0
Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument
Error while processing the decoded data for stream #0:0

可以看到输入区域的宽度是623,填充区域的宽度是622,但是应该不是这样的,因为我们是用iw设置的填充的宽度。

这是一张失败的示例图片。

事实证明,您无法在奇数边界处填充子采样像素格式。 解决方法是使用

来创建边界
ffmpeg.exe -i in.jpg -filter_complex "[0:v]pad=ceil(iw/2)*2:ceil((ih+10)/2)*2:0:0" out.jpg