在本文中,我们将介绍如何使用 FFmpeg 加快或减慢视频的速度。无论您是视频编辑者、处理媒体文件的开发人员,还是对视频操作充满好奇的爱好者,您都会发现本指南的价值。
我们将从在系统上设置 FFmpeg 开始,深入了解一些基本命令,然后转向我们的重点–使用 FFmpeg 来减慢和加速视频。
设置 FFmpeg
在学习使用 FFmpeg 加快或减慢视频速度之前,我们首先要在电脑上安装它。在电脑上设置 FFmpeg,无论是 Windows、macOS 还是 Linux 系统,都是一个简单明了的过程。不过,不同平台的步骤略有不同。以下是安装步骤
对于 Windows 用户:
- 从官方网站下载最新的 FFmpeg static build。确保为系统选择了正确的架构(32 位或 64 位)。
- 解压下载的 ZIP 文件。你会发现一个名为 “ffmpeg-<version>-essentials_build”的文件夹。
- 将该文件夹中的 “bin “目录添加到系统的 PATH 中。这一步可以让你从命令行运行 FFmpeg,而不管你在哪个目录下。
对于 macOS 用户:
- 打开终端。
- 如果您安装了 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