为什么我不能使用 between 函数来减慢 ffmpeg 的视频速度?

为什么我不能使用 between 函数来减慢 ffmpeg 的视频速度?

当我使用此代码时:

ffmpeg -i a.mp4 -filter:v "setpts='if(between(T,3,5),PTS*3,PTS)'" -b:v 3000k -s 1440x720 d.mp4

我得到的输出在第 3 秒停止,从第 9 秒开始慢动作运行,并在第 14 秒的某个时间结束。重新缩放和更改比特率不会影响这一点。输出时没有显示警告。那么为什么它会冻结输出 6 秒呢?

答案1

您的 setpts 表达式在 t=3 之后留下了空白。

这是从输入到输出时间戳的映射:

0 --> PTS   --> 0
1 --> PTS   --> 1
2 --> PTS   --> 2
3 --> PTS*3 --> 9
4 --> PTS*3 --> 12
5 --> PTS*3 --> 15
6 --> PTS   --> 6 --> 15.001
7 --> PTS   --> 7 --> 15.002
8 --> PTS   --> 8 --> 15.003

...

更简单但更长的方法是使用 trim、setpts 和 concat 过滤器的组合,如下所示https://video.stackexchange.com/q/21800/

相关内容