当前位置: 首页 > 教程资源 > FFmpeg 教程 > 正文
如何使用 FFmpeg 对视频进行压缩高级教程

如何使用 FFmpeg 对视频进行压缩高级教程

作者:大眼仔~旭 日期:2个月前 (07-27) 评论:0 条

摘要:无损视频 - 直接从摄像机传输或由动态图形软件生成的视频通常非常大。未压缩视频的文件大小可能会占用每分钟视频千兆字节的磁盘空间。这对于高端电影或广播视频制作非常有用,但对于大多数日常视频任务,尤其是在线视频任务,就不那么有用了。 需要压缩视频的原因有多种,包括: 压缩后的视频尺寸更小,更易于存储、共享和在互联网上传输。…

无损视频 – 直接从摄像机传输或由动态图形软件生成的视频通常非常大。未压缩视频的文件大小可能会占用每分钟视频千兆字节的磁盘空间。这对于高端电影或广播视频制作非常有用,但对于大多数日常视频任务,尤其是在线视频任务,就不那么有用了。

需要压缩视频的原因有多种,包括:

  • 压缩后的视频尺寸更小,更易于存储、共享和在互联网上传输。
  • 压缩视频消耗的带宽更少,因此播放更流畅,缓冲更少。
  • 文件存储和带宽都需要成本,较小的文件大小可以降低这些成本。
  • 许多网站和平台对上传的视频都有特定的文件大小限制。

在本篇文章中,我们将学习如何使用 FFmpeg 以不同方式压缩视频文件大小。FFmpeg 是一款开源命令行工具,可用于通过调整编解码器、分辨率、比特率和帧速率来压缩视频。

FFmpeg 对视频进行压缩

前提条件

要学习本教程,请从 FFmpeg 官方下载页面为您的操作系统下载并安装最新版本的 FFmpeg。本教程还假定你掌握了一些在终端运行命令的工作知识。

您还需要一个大尺寸、高分辨率、低压缩率的测试视频。在本教程中,我们将使用 1080p MOV 示例文件。

关于示例 MOV 文件

样本视频时长 28 秒,大小为 269MB,分辨率为 1920×1080 像素,帧频为 23.976,比特率为 78,270 kb/s。它使用 Apple ProRes 422 LT 编解码器压缩,类似于现代 iPhone、大疆无人机或高端摄像机录制视频的方式。音频编解码器为 PCM (pcm_s161e),这是一种无损音频压缩算法。

由于视频时间短,文件大小,因此非常有必要将视频压缩到更小的大小,同时保持较高的视觉质量。

通过更改编解码器压缩视频

压缩视频的第一步是使用不同的视频压缩编解码器。编解码器只是一种算法,用于将视频编码和压缩到更小的文件大小,同时不损失视觉质量。MP4 是最流行、最受广泛支持的视频格式之一。这主要归功于它使用 H.264 编解码器提供的视频压缩选项–这是一种高效的开源压缩算法,可以创建非常小的文件大小,同时将视觉质量损失降到最低。

要将 MOV 文件转换为 MP4 并使用 H.264 编解码器进行压缩,请在保存 input.mov 示例文件的文件夹中运行以下命令:

1
ffmpeg -i input.mov -c:v libx264 -pix_fmt yuv420p output.mp4

以下是该命令的详细说明:

  • -i input.mov:- 指定输入的视频文件。
  • -c:v libx264: – 将视频压缩编解码器设置为 H.264 (libx264)。
  • -pix_fmt yuv420p – 将 ProRes 像素格式(4:2:2)更改为 H.264 兼容像素格式(4:2:0)。
  • output.mp4 – 输出文件的名称。

如果比较一下输入.mov 文件和新的输出.mp4 文件的大小,你会发现文件大小减少了 220MB,压缩后的 MP4 文件只有 49MB。

值得注意的是,你还可以使用其他编解码器和文件格式(容器)来压缩视频。例如,你可以使用 H.265 编解码器作为 MP4 文件,也可以使用 VP9 编解码器作为 WebM 文件。

H265 编解码器和 MP4 容器

1
ffmpeg -i input.mov -c:v libx265 -pix_fmt yuv420p output.mp4

VP9 编解码器和 WEBM 容器

1
ffmpeg -i input.mov -c:v libvpx-vp9 -pix_fmt yuv420p output.webm

如果运行这两个命令,可能会遇到一些问题。H265 编解码器的文件大小要小得多,但当我尝试使用 Windows 内置的媒体播放器打开文件时,我必须付费安装一个新的编解码器 – 这会让很多人望而却步。使用 VP9 编解码器编码时,速度非常慢,而且最终文件比使用 H264/MP4 文件大。正是由于这些原因,H264/MP4 文件仍然是最流行的格式。

使用恒定速率因子 (CRF) 压缩视频

进一步压缩视频的方法之一是使用恒定速率因子 (CRF)。这是在不控制单个设置的情况下控制压缩的最简单方法。您可以提供一个介于 0-51 之间的值。数值越小,视频质量越高,但文件越大;数值越大,视觉质量越低,但文件越小。对于 MP4 文件来说,合理的值介于 17 和 28 之间,但您也可以尝试使用不同的值来找到平衡质量和文件大小的最佳位置。默认值为 23。

添加 -crf 28 选项后的命令如下:

1
ffmpeg -i input.mov -c:v libx264 -pix_fmt yuv420p -crf 28 output.mp4

新的文件大小现在为 22.6MB,但你可能会发现视觉质量略有下降,色彩也不那么鲜艳。

优化压缩和编码设置

我们还可以使用许多其他命令行选项来配置 FFmpeg 执行压缩的方式。请看这条命令:

1
ffmpeg -i input.mov -c:v libx264  -pix_fmt yuv420p -crf 28 -preset fast -tune zerolatency -c:a aac output.mp4

让我们来看看附加参数:

  • -preset fast: 预设选项设置压缩效率,进而影响编码速度。可用选项包括超快、快、中、慢和安慰剂。根据你的优先级选择预设值。例如,如果你想要更快的编码速度,可以选择快速或超快速。反之,如果你想获得更高的质量,并且不介意较长的编码时间,则可以选择较慢或慢速。
  • -tune zerolatency: 可使用 -tune 选项根据输入视频的类型来配置设置。例如,使用 zerolatency 来优化编码以减少延迟。其他可用选项包括:电影、动画、静态图像和快速解码。
  • -c:a aac: 为了进一步压缩,我们还可以确保对音频进行压缩,这里使用的是 AAC 编解码器。
  • 现在 output.mp4 文件的大小只有 18.6MB,减少了 93%。

有关如何使用 FFmpeg 和 H.264 编解码器压缩视频的更多详情,请查看 FFmpeg H.264 编码指南

通过降低分辨率压缩视频

缩小视频大小的另一种方法是改变分辨率,即视频的尺寸。我们的 input.mov 文件是 1920px x 1080px,这是高清视频的常用分辨率。不过,你也可以使用较低的分辨率,尤其是如果视频将在移动设备上观看或嵌入到网页中。

让我们来看几个如何使用 FFmpeg 通过降低分辨率来压缩视频的例子:

缩小视频宽度和高度

1
ffmpeg -i input.mov -c:v libx264 -pix_fmt yuv420p -crf 28 -vf scale=1280:720 output.mp4

在上述命令中,我们将缩放滤镜添加到之前的命令中,将视频的宽度和高度调整为 1280px x 720px。-vf 选项用于应用滤镜,是视频滤镜的简称。

新文件大小为 9.8MB,总共缩小了 96%。

保持视频的宽高比也很常见,这样视频就不会失真。为此,我们可以使用带有 -1 值的缩放过滤器,它会根据其他尺寸自动计算出正确的高度或宽度。就像这样:

1
ffmpeg -i input.mov -c:v libx264 -pix_fmt yuv420p -crf 28 -vf scale=-1:720 output.mp4

这将把高度调整为 720px,同时保持视频的原始宽高比。

通过降低比特率压缩视频

降低视频的比特率也会影响其文件大小,并让您对压缩有很大的控制权。比特率是用于编码视频的每秒比特数。比特率越高,视频质量越高,但文件大小也越大。相反,比特率越低,视频质量越低,但文件大小越小。

我们来看几个例子:

降低视频比特率

1
ffmpeg -i input.mov -c:v libx264 -pix_fmt yuv420p -b:v 1000k -vf scale=-1:720 output.mp4

在这里,我们替换掉 -crf 参数,使用 -b:v 1000k 选项将视频比特率设置为 1000 Kbps。

现在文件大小为 3.35MB,缩小了近 99%。你肯定能看到视觉质量有所下降,但根据你的使用情况,这也许是可以接受的。

降低音频比特率

1
ffmpeg -i input.mov -c:v libx264 -pix_fmt yuv420p -b:v 1000k -b:a 128k -vf scale=-1:720 output.mp4

我们添加了 -b:a 128k,将音频比特率设置为 128 Kbps。这对我们的样本视频不会有任何影响,因为它没有任何音频。

通过降低帧频压缩视频

最后,我们可以通过降低帧频来进一步压缩视频。帧频是指播放视频时每秒显示的帧数(fps)。帧频越高,视频越流畅,但文件大小也越大。相反,帧频越低,视频越不流畅,但文件尺寸越小。

1
ffmpeg -i input.mov -c:v libx264 -pix_fmt yuv420p -b:v 1000k -b:a 128k -vf scale=-1:720 -r 15 output.mp4

在上述命令中,我们使用 -r 选项将输出帧频设置为每秒 15 帧。

奇怪的是,这实际上将文件大小增加到了 3.37MB,因此如果与其他压缩选项结合使用,可能就不需要这个选项了。

如果我们像这样运行命令,不使用任何其他压缩选项,我们可以看到文件大小为 46.5MB,比保持原来 23.976 帧率时的 49MB 略有减少:

1
ffmpeg -i input.mov -c:v libx264 -pix_fmt yuv420p -r 15 output.mp4

最终的压缩视频

在本文中,大眼仔展示了如何使用 FFmpeg 通过更改属性来压缩视频。通过使用 FFmpeg 并应用正确的压缩设置,您可以在优化视觉质量水平的同时大幅减少视频的文件大小。

在我们的例子中,我们可以将原始文件大小从 269MB 减少到 3.35MB,减幅高达 99%。即使不走极端,将视频压缩 80-90% 也能节省大量存储和带宽成本,并通过更快的下载速度和更流畅的播放带来更好的用户体验。

声明:大眼仔旭 | 本文采用署名-非商业性使用-相同方式共享 4.0 国际许可协议[CC BY-NC-SA]进行授权
文章名称:《如何使用 FFmpeg 对视频进行压缩高级教程
文章固定链接:http://www.dayanzai.me/ffmpeg-compress-video.html
本站资源仅供个人学习交流,请于下载后 24 小时内删除,不允许用于商业用途,否则法律问题自行承担。
转载声明
全部评论: (0条)
^_^ 暂无评论!

发表评论

返回顶部