MLT,时变农作物

时间:2016-02-16 17:56:42

标签: crop pan mlt

我想做的是以16:9的宽高比拍摄视频,并通过裁剪以1:1的宽高比生成另一个视频,以使裁剪区域随时间变化。例如,假设source是1920x1080:

  • 第0帧裁剪x从0到1080
  • 第200帧裁剪x从240到1080 + 240
  • 第350-380帧顺利滑动

最终以给定的分辨率(例如640x640)生成宽高比为1:1的视频。

ffmpeg可以静态地执行此操作(即,vf crop = x:y:w:h,scale = 640x640),但我正在尝试执行此操作以使裁剪的部分发生变化。基本上我希望适应宽屏视频在谷歌纸板(和类似的)上观看。

mlt是否直截了当?到目前为止,我已经尝试附加仿射过滤器,设置transition.geometry,但我对我正在使用的坐标感到困惑(我想根据哪个源坐标映射到极左/右)。

1 个答案:

答案 0 :(得分:3)

仿射滤镜是一种很好的方法。

以下是一个例子:

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

这告诉mel使用您的自定义配置文件。

transition.geometry= ...

这就是你如何告诉仿射转换(仿射过滤器在内部使用)你想要它做什么。每个几何条目的第一个数字是它适用的帧编号。过滤器将在帧之间插值。几何条目的语法是:" K = X,Y:WxH"在哪里" K"是几何体适用的关键帧。

0=0,0:1138x640

第一个几何条目告诉仿射滤镜将图像缩放到1138x640并将图像定位在0,0。

640是输出的高度 - 告诉仿射将原始图像缩放到640的高度以填充输出帧。 1138是16×9图像的宽度,其为640像素高。 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