2016-02-16 39 views
0

我想要做的是以16:9的宽高比拍摄视频,并通过裁剪生成另一种1:1的宽高比,以便作物区域随时间变化。例如,假设源是1920×1080:MLT,随时间变化的作物

  • 帧从0到1080
  • 框架200作物X 0作物x在240〜1080 + 240
  • 帧350-380顺畅地滑动

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

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

这是直接与mlt?到目前为止,我已经尝试过附加仿射过滤器,设置transition.geometry,但我很困惑我正在使用哪个坐标(我想用哪些源坐标映射到极端的左/右来指定事情)。

回答

1

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

下面是一个例子:

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是一个16×9源(1920×1080将工作)
  • 剪辑是720帧长(例如30秒在24 fps)

让我为你分解的例子。

第一部分指定一个640x640的自定义配置文件,它具有正方形的宽高比。您不需要每次创建文件。您可以根据您的规格进行定制。

-profile ./square_profile.txt 

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

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

+0

谢谢。我确实阅读了“完整”文档。在“几何”一个只发现: 标题:矩形 类型:几何 只读:没有 要求:没有 像你这样的解释,以什么参数做。我确实注意到(0,0)将缩放剪辑的左上角放置在左上角(而不是右下角)。 –

+0

好点。我编辑了答案以减少混淆。 – Brian

+0

没有很多志愿者加强文档。所以有时候需要一些发现。我发现理解这些参数的最简单方法之一是安装使用MLT(即KDENLIVE或Shotcut或Flowblade)的开放源代码视频编辑器,使用GUI制作您正在查找的效果,然后检查保存的项目文件。 MLT项目文件是XML,易于阅读,并可帮助发现参数(如几何)的工作方式。 – Brian