如何在 ffmpeg 中将视频速度提高 60 倍?

如何在 ffmpeg 中将视频速度提高 60 倍?

我发现这个例子

 ffmpeg -i input.mkv -filter:v "setpts=0.5*PTS" output.mkv 

但是我有一个视频想加速 60 倍,而不仅仅是 2 倍。

答案1

只需乘以速度因子的倒数即可。

ffmpeg -i input.mkv -filter:v "setpts=PTS/60" output.mkv

这不会影响音频速度。用于-an在输出中不包含音频。


一种更快的方法,但可能会产生音频意外的结果(暂停或异步):

ffmpeg -itsscale 0.01666 -i input.mkv -c copy output.mkv

其中0.016661/60十进制表示。

答案2

如果您还想加快音频速度,您需要执行以下操作:

ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2[a]" -map "[v]" -map "[a]" output.mkv

文档:https://trac.ffmpeg.org/wiki/How%20to%20speed%20up%20/%20slow%20down%20a%20video

如果您想将速度乘以 2,上述命令有效。如果您想乘以任意值x(0 到 100 之间),参数将变为:

  ffmpeg -i input.mkv -filter_complex "[0:v]setpts=1/<x>*PTS[v];[0:a]atempo=<x>[a]" -map "[v]" -map "[a]" output.mkv

例如,如果你想乘以 1.15,命令是

  ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.87*PTS[v];[0:a]atempo=1.15[a]" -map "[v]" -map "[a]" output.mkv

答案3

速度提升 60 倍,fps 为原先的 60 倍

ffmpeg -i input.mkv -filter:v "setpts=PTS/60" -an output.mkv

加速 60 倍,然后重新采样为 24 fps

ffmpeg -i input.mkv -filter:v "setpts=PTS/60,fps=24" -an output.mkv
  • setpts=PTS/60划分每帧的演示时间戳60。
  • fps=24每秒输出24帧。
  • -an删除音频。

答案4

对我来说,setpts与 一起使用atempo会使音频速率较低(并且音调较低)。最终对我有用的是:

#!/bin/sh
# Note: First use ffprobe to get the audio rate.
# Adjust below if it's not 48000.
# The example below increases the speed of audio and video
# rate by a factor of 4 (adjust as needed).
# Sources:
# https://superuser.com/questions/1261678/how-do-i-speed-up-a-video-by-60x-in-ffmpeg
# https://stackoverflow.com/questions/53374590/ffmpeg-change-tone-frequency-pitch-audio
ffmpeg -i $1 -filter:v "setpts=PTS/4" -af "asetrate=48000*4,aresample=48000" out.mp4

相关内容