虽然我无法在没有抖动的情况下捕捉平滑的慢动作视频,但我能够使用 ffmpeg 将捕捉到的视频转换为慢动作,结果非常流畅甚至。为了在 android 中集成 FFmpeg,我们可以使用预编译库,如ffmpeg-android .
根据所讨论的情况,我们可以从相机捕获视频,然后使用 ffmpeg 将其转换为慢动作。
要创建慢动作视频,我们可以使用以下命令 -
String[] complexCommand = {"-y", "-i", inputFileAbsolutePath, "-filter_complex", "[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.5[a]", "-map", "[v]", "-map", "[a]", "-b:v", "2097k", "-r", "60", "-vcodec", "mpeg4", outputFileAbsolutePath};
这里,
-y
不询问就覆盖输出文件
-一世
ffmpeg 从 -i 选项指定的任意数量的输入“文件”中读取
-地图
输出链接标签用 -map 引用。
-b:v
设置视频比特率
-r
设置帧率
-vcodec
设置视频编解码器
-filter_complex 过滤器图
定义一个复杂的过滤器图,即具有任意数量的输入和/或输出的过滤器图。过滤器通过更改每个视频帧的演示时间戳 (PTS) 来工作。要减慢视频速度,您必须使用大于 1 的乘数。例如,如果在时间戳 1 和 2 处显示两个连续的帧,并且您想要放慢视频速度,这些时间戳需要分别变为 2 和 4。因此,我们必须将它们乘以 2.0。
您可以使用 atemto 音频过滤器加速或减慢音频。 atempo 过滤器仅限使用 0.5 和 2.0 之间的值(因此它可以将其减慢到不低于原始速度的一半,并且加速不超过两倍输入)。要将音频减慢到一半的速度,我们必须使用 atempo 值 0.5 。
查看我在博客上写的这个fffmpeg 视频编辑器教程,其中包括创建慢动作视频和教程的完整代码。