使用 ImageMagick 同时缩放和变形

使用 ImageMagick 同时缩放和变形

我有同一地区的两张不同地图:一张是远景地图,一张是近景地图。

亚马逊盆地

马瑙斯地区

第一幅图像中的白色矩形代表第二幅图像的边框。

我想同时应用两种效果:放大第一张图像,直到白色矩形占据整个图像,然后将其与第二张图像变形,因此当缩放到最终位置时,第二张图像将完全可见。

我设法使用以下命令应用缩放:

convert A.png -duplicate 50 -distort SRT '916,401 %[fx:1+0.007*t*t] 0 %[fx:916-(116/50)*t],%[fx:401+(199/50)*t]' t.png

此命令创建了 50 张图像,稍后我会将其转换为视频。

现在我有两个选择:详细说明第一个命令以一次性完成所有操作,或者将第二个图像的变形应用于这 50 幅图像。但是,我都找不到。我该怎么做?

答案1

找到了使用 Linux bash 的解决方案for。但我确信纯 ImageMagick 解决方案会更快。

第一个命令创建的 50 张图像(实际上是 51 张)分别称为 t-0.png、t-1.png、... t-50.png。

#!/bin/bash
echo "Bash version ${BASH_VERSION}..."
mkdir -p blended
for x in {0..50}
do
    blend=$((x*x/25))
    xx="00${x}"
    xx="${xx: -2}"
    composite B.png t-$x.png -blend $blend blended/b-$xx.png
done
cd blended
ffmpeg -framerate 12 -pattern_type glob -i '*.png' -c:v libx264 -profile:v baseline -pix_fmt yuv420p B.mp4
ffmpeg -loop 1 -i b-00.png -t 3 -c:v libx264 -profile:v baseline -pix_fmt yuv420p A.mp4
ffmpeg -loop 1 -i b-50.png -t 5 -c:v libx264 -profile:v baseline -pix_fmt yuv420p C.mp4
ffmpeg -f concat -safe 0 -i <(for f in ./*.mp4; do echo "file '$PWD/$f'"; done) -c copy D.mp4

这会在之前创建的“blended”目录中创建图像 b-00.png、b-01.png、...b-50.png,并将它们转换为所需的影片剪辑。变量的作用xx是确保有 2 位数字,否则ffmpeg将使用错误顺序的图像创建视频。

但有一个问题:由于未知的原因,b-50.png 比 B.png 稍微暗一些,而我认为它们应该看起来完全相同。

相关内容