如何在 ffmpeg 中将视频加速 60 倍?

wat*_*der 61 speed ffmpeg

我找到了这个例子

 ffmpeg -i input.mkv -filter:v "setpts=0.5*PTS" output.mkv 
Run Code Online (Sandbox Code Playgroud)

但我有一个视频,我想将速度提高 60 倍,而不仅仅是 2 倍。

Gya*_*yan 79

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

ffmpeg -i input.mkv -filter:v "setpts=PTS/60" output.mkv
Run Code Online (Sandbox Code Playgroud)

这不会影响音频速度。使用-an忽略音频。


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

ffmpeg -itsscale 0.01666 -i input.mkv -c copy output.mkv
Run Code Online (Sandbox Code Playgroud)

其中0.016661/60十进制表示。

  • 虽然播放速度似乎为此而改变,但视频时长似乎表示不正确;例如,加速 3 倍的 3 分钟视频仍将显示为 3 分钟长。如果您在视频播放器(例如 VLC)中播放它,视频将只占用第一分钟,然后在剩余的 2 分钟内冻结在一个帧上。 (12认同)
  • ffmpeg 会保留视频的全长确实是有道理的,因为仍有音频数据。很好,事实证明,它确实有音频(我的扬声器静音)。使用`-an`参数,正确设置视频的长度。 (9认同)
  • 是的,视频播放速度受数据包元数据控制。60x 是一个非常高的加速,玩家通常会窒息。你会看到更多的预期结果,比如 6 倍的加速。播放器不能“跳过”压缩视频比特流中的帧,因为几乎所有帧都依赖于一个或多个周围的帧进行解码。因此,您必须丢帧并重新编码,即游戏中时光倒流,例如`ffmpeg -i input -vf framestep=60,setpts=N/30/TB -r 30 -an out.mp4` (5认同)
  • 有音频吗? (2认同)
  • 这两种方法在文件大小方面存在很大差异,至少对于我的特定电影而言。前者输出一个约 100 倍的视频,而后者输出一个与原始文件大小相同的文件。 (2认同)

dop*_*xxx 19

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

ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2[a]" -map "[v]" -map "[a]" output.mkv
Run Code Online (Sandbox Code Playgroud)

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

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

  ffmpeg -i input.mkv -filter_complex "[0:v]setpts=<1/x>*PTS[v];[0:a]atempo=<x>[a]" -map "[v]" -map "[a]" output.mkv
Run Code Online (Sandbox Code Playgroud)

例如,如果你想乘以 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
Run Code Online (Sandbox Code Playgroud)

  • atempo 现在的范围可达 100:https://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=29cddc99cd8302e462bbae572e885e88f63d6dc3 (2认同)

Mat*_*haq 7

速度提升 60 倍,每秒帧数是原来的 60 倍

ffmpeg -i input.mkv -filter:v "setpts=PTS/60" -an output.mkv
Run Code Online (Sandbox Code Playgroud)

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

ffmpeg -i input.mkv -filter:v "setpts=PTS/60,fps=24" -an output.mkv
Run Code Online (Sandbox Code Playgroud)
  • setpts=PTS/60将每帧的呈现时间戳除以 60。
  • fps=24每秒输出 24 帧。
  • -an删除音频。

  • 这个答案非常有帮助,因为我的目标是同时加速和压缩。谢谢你! (2认同)

Jac*_*k G 5

我也想多次加速音频和视频,超过 2 倍。对于 60 倍速度,请执行以下操作。它可能有点冗长,但效果很好。问题是速度不能大于 2 或小于 0.5,所以我们必须多次重复速度才能使声音达到我们想要的速度。

ffmpeg -i input.mkv -filter:v "setpts=PTS/60" -filter:a "atempo=2,atempo=2,atempo=2,atempo=2,atempo=2,atempo=1.875" output.mkv
Run Code Online (Sandbox Code Playgroud)

按 Ctrl+Shift+I,然后单击“控制台”选项卡。然后,将此代码复制并粘贴到控制台中。在 Chrome 中,单击蓝色箭头的右侧。在 Firefox 中,allow pasting在控制台中输入以允许复制'n'粘贴。然后,按Enter运行以下JS代码生成其他速度。该代码还适用于放慢视频速度。

var speed=eval(prompt("Enter speed up or slowdown factor (>1 is speedup, " +
    "<1 is slowdown; can use 1/X for slowdown): ", "60"));

var k=speed, audio="";
while (2 < k && k === k) k /= 2, audio+="atempo=2,";
while (k < 0.5 && k === k) k *= 2, audio+="atempo=0.5,";
audio += "atempo=" + k;
prompt(
    "Copy the following commandline: ",
    'ffmpeg -i input.mkv -filter:v "setpts=PTS/' + speed +
    '" -filter:a "' + audio + '" output.mkv'
);
Run Code Online (Sandbox Code Playgroud)

此代码将提示您输入一个值并显示结果。进入60产生 600.1倍的加速,进入产生 10 倍的减速,进入1/30产生 30 倍的减速。我希望这有帮助。