有没有办法在ffmpeg的过滤器中使用当前帧和总帧作为变量?

问题描述

我正在尝试编写一个愚蠢的命令来顺时针旋转整个视频。我唯一需要的是一个变量来告诉过滤器当前帧数和总帧数。

这是我计划的命令(cf = 当前帧,tf = 总帧数)

ffmpeg -i input.mp4 -vf rotate=(cf*(tf/360))/PI*180 output.mp4

有人愿意帮忙吗?

解决方法

rotate filter documentation 说:

角度和输出尺寸的表达式可以包含 以下常量和函数:

  • n 是输入帧的序号,从0开始。在过滤第一帧之前总是NAN。
  • t 是输入帧的时间(以秒为单位),配置过滤器时设置为 0。在第一帧之前总是 NAN 过滤。

总持续时间没有变量,但您可以使用 ffprobe 获取输入文件的持续时间。见How to get video duration in seconds?

在 10 秒内顺时针旋转 1 圈的示例:

ffmpeg -i input.mp4 -vf "rotate=(2*PI*t)/10" -c copy output.mp4