假设我有两个视频(如果重要的话,是 AVI 格式),比如movie1.avi
和movie2.avi
。
movie1.avi
帧速率为 10fps。movie2.avi
帧速率也是 10fps,但已在某处加速,因此应该以 5fps 播放。
现在我想制作一部新电影,它基本上由movie2.avi
投射在右下角的(减速)组成movie1.avi
。
我可以用什么方法来像这样合成这两部电影?我是否需要将它们分解成几帧,合成图像,然后制作一部新电影?这样能保持原有的质量吗?是否有容易获得的工具来获得我想要的东西?
无论是 Windows 还是 Linux 建议都可以为我完成这项工作。
答案1
您可以使用ffmpeg
滤镜来覆盖视频并创建画中画效果。要覆盖movie2.avi
,我们必须将其缩小,要以较低的帧速率播放,我们将使用另一个滤镜。
你的命令看起来是这样的:
ffmpeg -i movie1.avi \
-filter:v "movie=movie2.avi, scale=iw/2:ih/2, setpts=2.0*PTS [small];\
[in][small] overlay=main_w-overlay_w:main_h-overlay_h [out]" output.avi
为了便于阅读,我将命令拆分成几个部分\
。分解如下:
-i movie1.avi
是您的大输入电影。-filter:v "movie=movie2.avi
加载小电影。scale=iw/2:ih/2
将影片的宽度和高度缩小到原来的一半。iw
和ih
分别是接受输入宽度和高度的参数。看看scale
过滤选项如果你想调整它。setpts=2.0*PTS
通过“扩展”帧的单独显示时间戳,使视频显示速度比原始视频慢一倍。您可以使用 加快速度0.5*PTS
。请参阅setpts
。- 这被分配给
[small]
链接。 - 然后将
[in]
和[small]
链接与overlay
过滤器,将较小视频的左上角定位在帧的中间。main_w
和main_h
参数采用帧的宽度和高度,因此在这里,您要选择精确的中间点。 - 这被渲染为
[out]
。
它看上去可能是这样的:
以下是一些提示:
始终使用 的最新版本
ffmpeg
,而不是 Linux 发行版提供的版本。FFmpeg 下载页面有针对每个操作系统的静态构建列表。默认情况下,该命令将使用一些有关视频和音频编解码器的基本设置。这可能会导致质量看起来比原始质量差。您可以通过设置更高的比特率或使用可变质量标志来调整质量
-qscale
。看看XviD/MPEG-4 编码指南对于 AVI 视频,或选择 MP4 作为输出使用 x264 编码器。实际上,这可能看起来像下面这样:
ffmpeg -i movie1.avi … -c:v libxvid -qscale 2 output.avi ffmpeg -i movie1.avi … -c:v libx264 -crf 21 output.mp4
答案2
您可以通过逐帧分解来完成此操作,但是有很多免费的视频编辑软件可以让您更轻松地完成此操作。
举例来说,您可以将其视为Windows Movie Maker
Windows 解决方案,或kdenlive
视为 Linux 解决方案。
几乎每个视频编辑软件都可以像您描述的那样改变视频的播放速度或合成两个视频。