如何使用 FFmpeg 加速或减慢视频速度

在本文中,我们将介绍如何使用 FFmpeg 加快或减慢视频的速度。无论您是视频编辑者、处理媒体文件的开发人员,还是对视频操作充满好奇的爱好者,您都会发现本指南的价值。

我们将从在系统上设置 FFmpeg 开始,深入了解一些基本命令,然后转向我们的重点–使用 FFmpeg 来减慢和加速视频。

设置 FFmpeg

在学习使用 FFmpeg 加快或减慢视频速度之前,我们首先要在电脑上安装它。在电脑上设置 FFmpeg,无论是 Windows、macOS 还是 Linux 系统,都是一个简单明了的过程。不过,不同平台的步骤略有不同。以下是安装步骤

对于 Windows 用户:

  • 从官方网站下载最新的 FFmpeg static build。确保为系统选择了正确的架构(32 位或 64 位)。
  • 解压下载的 ZIP 文件。你会发现一个名为 “ffmpeg-<version>-essentials_build”的文件夹。
  • 将该文件夹中的 “bin “目录添加到系统的 PATH 中。这一步可以让你从命令行运行 FFmpeg,而不管你在哪个目录下。

对于 macOS 用户:

  1. 打开终端。
  2. 如果您安装了 Homebrew,只需输入brew install ffmpeg. 如果没有,请考虑先安装 Homebrew。它简化了 macOS 上的软件安装过程。

对于 Linux 用户:

FFmpeg 软件包通常包含在大多数 Linux 发行版的标准软件仓库中。使用发行版的软件包管理器安装 FFmpeg。例如,在 Ubuntu 上,使用 sudo apt-get install ffmpeg。

安装完成后,在命令行中输入 ffmpeg -version 进行验证。输出结果应如下所示:

(base) krishna@debian:~/research$ ffmpeg -version -hide_banner
ffmpeg version N-111859-g3c397a1d46-20230830 Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 13.1.0 (crosstool-NG 1.25.0.196_227d99d)
libavutil      58. 17.100 / 58. 17.100
libavcodec     60. 23.100 / 60. 23.100
libavformat    60. 10.101 / 60. 10.101
libavdevice    60.  2.101 / 60.  2.101
libavfilter     9. 11.100 /  9. 11.100
libswscale      7.  3.100 /  7.  3.100
libswresample   4. 11.100 /  4. 11.100
libpostproc    57.  2.100 / 57.  2.100

如果看到已安装的 FFmpeg 版本的详细信息,则表明您已成功设置它。

现在,让我们学习使用 FFmpeg 减慢视频速度。之后,我们将学习如何加速视频。

如何使用 FFmpeg 减慢视频速度

现在,我们将探讨如何使用 FFmpeg 中的 setpts 视频过滤器来减慢视频播放速度。setpts “代表 “设置演示时间戳”,它能调整帧时间戳,从而有效地减慢或加快视频播放速度。

下面是使用 FFmpeg 和 setpts 参数减慢视频速度的基本命令:

ffmpeg -i input.mp4 -vf "setpts=2.0*PTS" output.mp4

在此命令中:

  • -vf 选项告诉 FFmpeg 我们要应用视频滤镜。
  • setpts=2.0*PTS” 部分是我们选择的过滤器。PTS 代表视频流中的 Presentation TimeStamp(演示时间戳),将其乘以 2.0,我们就能有效地将视频的长度加倍,从而将速度减慢一半。

setpts 过滤器可以将任何正浮点数作为参数。如果想进一步减慢视频播放速度,只需增加数值即可。例如,使用 setpts=4.0*PTS 将使视频以四分之一的速度播放。

如何使用 FFmpeg 加快视频速度

加快视频播放速度就是缩短视频的整体播放时长。因此,如果您有一段 10 分钟(600 秒)的视频,而您将其加速了 10 倍,那么输出的视频将只有 1 分钟长(60 秒)。我们可以使用 FFmpeg 中的 setpts 过滤器轻松加快视频的播放速度,具体方法如下。

大家可能还记得,”setpts “过滤器会调整帧时间戳,从而影响播放速度。要加快视频播放速度,我们需要使用一个小于 1.0 的值。具体方法如下:

ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4

该命令可将时间戳减半,从而有效地将视频速度提高一倍。您可以根据需要调整乘数。数值越小,视频速度越快。

在结束本文之前,我想简要介绍一下演示文稿时间戳,以便您在更改其值时了解它们的含义。

SetPts 会对视频重新编码

提醒您注意的是,在 FFmpeg 中使用 setpts 时,它会丢弃帧数以达到所要求的速度。这将迫使 FFmpeg 重新编码您的内容。请始终记住,在加速或减速视频时,您可以使用 CBR、Capped VBR 或 CRF 技术设置所需的视频质量。

附录: 什么是 PTS 或演示时间戳?

呈现时间戳(或 PTS)是视频和音频流数据的一部分,用于指示何时应向观众或听众呈现帧(视频)或数据包(音频)。

从本质上说,它是一个时间戳,告诉媒体播放器 “这是显示或播放特定帧或数据包的准确时间”。

为了更好地理解,请看一部电影。电影的每一帧在屏幕上出现的时间都是特定的。这种定时可确保所有帧以正确的顺序和速度显示,让您获得流畅的观看体验。这些帧的时间由其 PTS 值决定。

现在,PTS 值以 “时基单位 “表示,即一秒的分数。时基由视频或音频流的帧频或采样率决定。例如,如果视频的帧频为每秒 30 帧(fps),则每一帧的持续时间为 1/30 秒,随后每一帧的 PTS 值都将以此为单位递增。

因此,如果我们有一连串 PTS 值为 0、1/30、2/30、3/30 等的帧,那么视频播放器将在前一帧之后的 1/30 秒内精确显示每一帧,从而以正确的速度流畅播放视频。

当我们操作 PTS 值时,就像使用 FFmpeg 对视频进行降速或提速一样,我们会改变这些时间戳。例如,如果我们将视频的播放速度减慢 2 倍(使用 setpts=2.0PTS),我们就会有效地将每一帧的 PTS 值加倍。这使得视频播放器显示每帧的时间延长了一倍,视频播放速度减半。反之,如果我们将视频速度提高 2 倍(使用 setpts=0.5PTS),我们就会将 PTS 值减半,使帧的显示速度提高一倍,播放速度提高一倍。

值得注意的是,对 PTS 值的操作并不会改变实际的媒体内容(即视频帧中的图像或音频样本),而是改变它们的呈现时间,这就是实现速度变化的方法。

值得注意的是,PTS 值可以以不同的方式呈现。如前所述,它们通常以时基单位表示,但也可以根据具体情况以实时单位表示。pkt_pts_time 字段显示的是以秒为单位的 PTS 值,也就是实时值。

结论

至此,您已对如何使用 FFmpeg 的 setpts 过滤器来加快或减慢视频速度有了扎实的了解。请记住,这涉及到重新编码,您可以随时调整编码参数,以达到所需的输出视频质量。

作者: Krishna Rao Vijayanagar
译自:https://ottverse.com/how-to-speed-up-slow-down-video-playback-using-ffmpeg/

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/43233.html

(0)

相关推荐

发表回复

登录后才能评论