我想将放大的 1366x768 图像再次调整为其原始的 480x270。
每次我这样做,像素线就会放错位置。带有突出显示区域的示例。右侧的图像稍微偏离了框架,但是差异清晰可见。
我尝试使用以下命令的变体,但无济于事:
ffmpeg -i "imagepath" -q:v 1 -vf scale=480:-1 -sws_flags neighbor "outputpath"
如果能就发生了什么事情以及如何在不放错像素列和行的情况下对其进行重新采样提供一些建议,我将不胜感激。
答案1
您的结果是正常的,因为您的输入大小不是输出大小的精确倍数 - 它不是像 3 比 1 那样的精确缩小,而是更像 2.85(ish)比 1;所以最终将输出像素仅对应例如 2 个或 4 个或 3½ 个输入像素,并且必须进行拉伸或压缩。
提供的图像似乎有 3×3 个“大像素”(点?单元格?方块?我不知道该用什么词来表达),所以如果你说原始图像是 480×270,这意味着它实际上被放大到了 1440×810,然后裁剪适合 1366×768。所以可恢复的原始尺寸只有 456×256。
(为了直观地看到这一点,请在 GIMP 中打开文件,选择“启用网格”、“配置网格”,选择 3×3px。请注意,垂直方向上它甚至没有整数数量的“大像素”;最左边和最右边的列只有 2px 宽,导致所有内容都偏离网格。)
因此您需要做的是:
填充或裁剪图像,使两个尺寸均为 3 的倍数(“大像素”尺寸)。垂直尺寸已经很好了,但水平方向必须左右填充 1px - 这也会将列重新对齐到网格。我使用了 GIMP 的“画布大小”,因为我不知道 ffmpeg 过滤器。
缩小至456:256或 456:-1,因为那是您获得的实际数据 – 其余部分已被裁剪掉。我为此使用了您的 ffmpeg 命令。
结果如下: