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