FFmpeg命令行之ffmpeg调整音视频播放速度


FFmpeg对音频、视频播放速度的调整的原理不一样。下面简单的说一下各自的原理及实现方式:

一、调整视频速率

视频的倍速主要是通过控制filter中的setpts来实现,setpts是视频滤波器通过改变每一个pts时间戳来实现倍速的效果,如下只要把PTS缩小一半就可以实现2倍速,相反的是PTS增加一倍就达到2倍慢放的效果。
实现:
ffmpeg -i test.mp4 -an -filter:v "setpts=0.5*PTS" output.mp4
ffmpeg -i test.mp4 -an -filter:v "setpts=2*PTS" output.mp4
注意:视频调整的速度倍率范围为:[0.25, 4]

如果只调整视频的话最好把音频禁掉。

对视频进行加速时,如果不想丢帧,可以用-r 参数指定输出视频FPS,方法如下:
ffmpeg -i test.mp4 -an -r 60 -filter:v "setpts=2.0*PTS" output.mp4

二、调整音频速率

调整视频速率的原理为:简单的方法是调整音频采样率,但是这种方法会改变音色, 一般采用通过对原音进行重采样,差值等方法。

音频的倍速则是通过控制filteratempo来实现,atempo的配置区间在0.5和2.0之间,如果需要更高倍速,则需要多个atempo串一起,下面是2、4倍速的实现命令。
ffmpeg -i test.mp4 -filter:a "atempo=2.0" -vn output.mp4
注意:倍率调整范围为[0.5, 2.0]

如果需要调整4倍可采用以下方法:
ffmpeg -i test.mp4 -filter:a "atempo=2.0,atempo=2.0" -vn output.mp4

如果需要音视频同时调整,可以采用如下的方式来实现:
2倍:
ffmpeg -i test.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4
4倍:
ffmpeg -i test.mp4 -filter_complex "[0:v]setpts=0.25*PTS[v];[0:a]atempo=4.0[a]" -map "[v]" -map "[a]" output4.mp4

三、参考资料

http://trac.ffmpeg.org/wiki/How to speed up / slow down a video