仿射滤波器是一种很好的方法。
这是一个例子:
echo "
description=Square
frame_rate_num=24
frame_rate_den=1
width=640
height=640
progressive=1
sample_aspect_num=1
sample_aspect_den=1
display_aspect_num=1
display_aspect_den=1
colorspace=708
" > square_profile.txt
melt -profile ./square_profile.txt clip.mp4 -filter affine transition.geometry="0=0,0:1138x640; 720=-498,0:1138x640"
该示例假设:
- clip.mp4 是 16x9 源(1920x1080 可以)
- 剪辑长度为 720 帧(例如 24 fps 时为 30 秒)
让我为你分解这个例子。
第一部分指定一个 640x640 且具有方形纵横比的自定义配置文件。您不需要每次都创建文件。您可以根据自己的规格对其进行自定义。
-profile ./square_profile.txt
这告诉 melt 使用您的自定义配置文件。
transition.geometry= ...
这就是你告诉仿射转换(仿射过滤器在内部使用)你想要它做什么的方式。每个几何条目的第一个数字是它适用的帧号。过滤器将在帧之间插入值。几何条目的语法是:“K=X,Y:WxH”,其中“K”是几何适用的关键帧。
0=0,0:1138x640
第一个几何条目告诉仿射滤波器将图像缩放到 1138x640 并将图像定位在 0,0。
640 是输出的高度 - 告诉仿射将原始图像缩放到 640 的高度以填充输出帧。1138 是 640 像素高的 16x9 图像的宽度。1138 比输出图像宽。由于我们指定图像定位在 0,0,图像的右侧部分将被仿射滤波器裁剪掉。
720=-498,0:1138x640
第二个几何条目告诉仿射滤波器保持相同的缩放比例,但将图像定位在 -498 的 x 位置。489 = 1138 - 640。也就是说,在第一帧中从图像中裁剪掉的像素数。负数告诉仿射将图像定位到输出帧的左侧,以便裁剪图像的左侧部分。"720=" 指定这是第 720 帧的几何图形。
0 到 720 之间的所有帧的 x 位置将由仿射滤波器自动插值。因此,您将看到图像在播放时从左向右滚动。
您可以向几何图形添加更多关键帧,使其在特定位置暂停或前后移动。仿射转换(仿射过滤器使用)还有其他有趣的操作,如镜像和循环。您可以在此处查看完整文档:
http ://www.mltframework.org/bin/view/MLT/TransitionAffine#scale