在 Ubuntu 中安装 FFmpeg

2025年3月17日 | 阅读 10 分钟

FFmpeg 是什么?

FFmpeg 是一个开源免费的软件项目,由一系列用于处理音频、视频和其他多媒体流和文件的程序和库组成。其核心本身是一个命令行工具,即 ffmpeg,用于处理音频和视频文件。它广泛用于视频缩放、基本编辑(连接和剪辑)、格式转码、视频后期制作标准和效果合规性(ITU、SMPTE)。

此外,FFmpeg 还包含一些其他工具,如 ffplay,一个标准的媒体播放器,以及 ffprobe,一个命令行工具,用于显示媒体信息。其中包含的库有 libavcodec,一个被多个免费和商业软件产品使用的视频/音频编解码器库;libavformat,一个视频/音频 解复用库容器复用器;以及 libavfilter,一个用于增强和编辑 类似 Gstreamer 的 filtergraph 中过滤器的库。

它是许多其他软件项目的流程的一部分,并且所有库都是 VLC 等软件媒体播放器的核心组成部分,并且它已被添加到 BiliBiliYouTube 的核心处理中。它包含了多种视频和音频文件格式的解码器和编码器,使其非常适合转码不常见和常见的媒体文件。FFmpegGPL-2.0 或更高版本LGPL-2.1 或更高版本 下发布,具体取决于启用的选项。

FFmpeg 的历史

该项目由 Fabrice Bellard 于 2000 年开始,并由 Michael Niedermayer 于 2004 年至 2015 年期间指导。此外,FFmpeg 的一些开发人员也参与了 MPlayer 项目。

项目名称源自 MPEG 视频标准组,与 “FF” 完美契合,“FF” 代表 “快进”。其 徽标 应用了 锯齿形图案,显示了 MPEG 视频编解码器如何管理熵编码。

2014 年 1 月 10 日,两名 Google 员工宣布,在过去两年中,通过 模糊测试FFmpeg 的 1000 多个错误已得到解决。

作为 FFmpeg 长期组件的命令行程序 ffserver,于 2018 年 1 月被删除。此前,开发人员已弃用该程序,理由是由于其内部应用程序编程接口的使用,维护工作量过大。

该项目每三个月发布一个新版本。已发布的版本可从网站下载。FFmpeg 的开发人员建议用户通过当前从源代码 GIT 版本控制系统构建的源代码来使用该软件。

编解码器历史

FFmpeg 项目开发了两种视频编码格式及其相应的编解码器,以及一种容器格式。这两种视频编解码器是 无损 FFV1,以及 有损 Snow无损编解码器。Snow 的开发已延迟,其比特流格式尚未最终确定,自 2011 年以来一直处于实验状态。名为 NUT 的多媒体容器格式尚未积极开发,但仍得到支持。

FFmpeg 的开发人员 David Conrad、Ronald Bultje、Fiona Glazer 于 2010 年夏季宣布了 ffvp8 解码器。他们通过测试决定 ffvp8Googlelibvpx 解码器快。从 0.6 版本开始,FFmpeg 还支持 VP8WebM

FFmpeg 的组成部分

命令行工具

  • ffmpeg 是一个命令行工具,可以转换视频或音频格式。此外,它还可以从各种软件和硬件源(如电视捕捉卡)实时编码和捕获。
  • ffprobe 是一个命令行工具,用于显示媒体信息(JSON、XML、CSV 和文本)。
  • ffplay 是一个标准的媒体播放器,它使用 FFmpeg 库和 SDL。

FFmpeg 库

  • libswresample 是一个包含音频重采样例程的库。
  • libavresample 是一个包含通过 Libav 项目进行的音频重采样例程的库,它与 ffmpeg 中的 libswresample 相同。
  • libavcodec 是一个包含 FFmpeg 所有原生视频/音频解码器和编码器的库。大多数编解码器都是从头开始创建的,以确保高代码可重用性和最佳性能。
  • libavformat 是一个包含视频/音频容器格式的 复用器解复用器 的库。
  • libavutil 可以被描述为一个辅助库,包含 FFmpeg 中通用的多个例程。此库包含 Base64 解码器/编码器、LZO 解压缩器、密码哈希函数
  • libpostproc 是一个包含旧的 基于 H.263 的视频后处理例程的库。
  • libswscale 是一个包含视频像素格式/色彩空间和图像缩放转换例程的库。
  • libavfiltervhook 的替代品,它允许在编码器和解码器之间检查或修改音频/视频。所有过滤器都已从多个项目移植,包括 AvisynthMPlayer
  • libavdevice 是一个包含来自外部和内部设备的视频/音频 IO 的库。

FFmpeg 支持的硬件

CPU

FFmpeg 包含音频和视频解压缩及压缩算法的软件实现。这些可以在不同的指令集上进行编译和执行。FFmpeg 提供了几个广泛使用的指令集,包括 MIPS、SPARC、DEC Alpha、ARM、PPC PowerPC 和 x86(x86-64 和 IA-32)。

专用硬件

有一系列用于视频/音频解压缩和压缩的应用特定集成电路(ASIC)。这些可以完全或部分将计算过程卸载到主机 CPU。而不是完整实现算法,API 仅需要像 ASIC 一样使用。

与 FFmpeg 工具应用

内部硬件的加速解码通过选项 -hwaccel 激活。通常,它开始解码,但当在硬件中找到可解码的流时,解码器会为该硬件执行所有重要处理,从而加速解码过程。

当找不到可解码的流时(例如,当编解码器的配置文件不受支持时),硬件加速将被跳过,并且仍然在软件中解码。选项 -hwaccel_device 用于当硬件需要特定设备工作时,特别是当存在多个图形卡时。

支持的格式和编解码器

图像格式

FFmpeg 支持一些不常见和常见的图像格式。PGMYUV 图像格式是二进制 (P5) PGM Netpbm 格式的自制版本。此外,它还支持 PPM 和 PGM 16 位深度格式,以及带或不带 Alpha 通道的二进制 (P7) PAM 格式,对于 pix_fmts rgb64be、rgba、ya8、rgb48be、rgb24、gray16be、gray、monob,深度为 16 位或 8 位。

复用器

FFmpeg 中生成的格式(许多容器格式和其他创建结果流的方式)称为 “复用器”。以下列出了一些 FFmpeg 支持的 复用器

  • AIFF
  • AVI 和通过 AviSynth 输入
  • ASF
  • BFI
  • FLV
  • CAF
  • GIF
  • HLS (代表 HTTP Live Streaming)
  • GXF (代表 General eXchange Format)
  • IFF
  • Matroska (包括 WebM)
  • ISO 基本媒体文件格式 (包括 MP4、3GP 和 QuickTime)
  • Maxis XA
  • MPEG 程序流
  • MPEG-DASH
  • MPEG 传输流 (包括 AVCHD)
  • MSN 摄像头流
  • MXF (代表 Material eXchange Format)
  • Ogg
  • NUT
  • RL2
  • OMA
  • 用于创建分段视频流的段
  • WTV
  • TXD
  • Smooth Streaming

像素格式

FFmpeg 支持多种像素格式。其中一些格式仅作为输入格式支持。它不支持 Log RGB、RGBE、CYMK、AI44、IMC1-IMC4 等格式。此外,它还不支持不常用的 ARGB 2:10:10:10、1:5:5:5 或其他 BMP 位域格式。

FFmpeg 支持的协议

开放标准

  • IETF RFC
    • UDP-Lite
    • UDP
    • TCP
    • TLS
    • SRTP
    • SDP
    • SCTP
    • RTSP
    • RTP
    • HTTPS
    • HTTP
    • HLS
    • 地鼠
    • FTP
  • IETF I-D
    • SFTP (通过 libssh)
  • SRT Alliance 标准
    • SRT (通过 libsrt)
  • OASIS 标准
    • AMQP 0-9-1 (通过 librabbitmq)
  • CENELEC
    • SAT>IP
  • Microsoft OSP
    • HTTP 上的 MMS (MS-WMSP)
    • HTTP 上的 MMS (MS-MMSP)
    • SMB/CIFS (通过 libsmbclient)

事实标准

  • RIST (librist)
  • ZeroMQ (通过 libzmq)
  • RealMedia RDT/RTSP
  • Adobe RTMP、RTMPS、RTMPE 和 RTMPTE
  • Icecast 协议
  • TLS 上的 RTSP

支持的接口和媒体

FFmpeg 通过外部库支持以下设备

物理接口

  • IEEE1394 (也称为 FireWire;通过 libraw1394 和 libdc1394;仅输入)
  • Brooktree 视频采集芯片 (通过 bktr 驱动程序;仅输入)
  • DeckLink
  • IEC 61883 (通过 libiec61883;仅输入)

媒体

  • 光盘 (通过 libcdio;仅输入)

音频 IO

  • Open Sound System (OSS)
  • Advanced Linux Sound Architecture (ALSA)
  • PulseAudio
  • OpenAL (仅输入)
  • Sndio
  • JACK Audio Connection Kit (JACK;仅输入)
  • Core Audio (macOS)
  • AudioToolbox (仅输出)
  • AVFoundation (仅输入)

视频 IO

  • Android Camera (仅输入)
  • Windows DirectShow
  • Video for Windows (仅输入)
  • Video4Linux2

屏幕输出和捕获

  • Kernel Mode Setting (通过 libdrm;仅输入)
  • X video extension (XV;通过 Xlib;仅输出)
  • X Window System (X11;通过 XCB;仅输入)
  • Graphics Device Interface (GDI;仅输入)
  • Linux 帧缓冲 (fbdev)
  • OpenGL (仅输出)
  • Simple DirectMedia Layer 2 (仅输出)

其他

  • ASCII art (通过 libcaca;仅输出)

FFmpeg 支持的滤镜

FFmpeg 支持以下滤镜

Audio(音频)

  • 重采样
  • 停/通滤波器
    • Butterworth 带阻滤波器 (bandreject)
    • Butterworth 带通滤波器 (bandpass)
    • 全通滤波器 (allpass)
    • 高通滤波器 (highpass)
    • 低通滤波器 (lowpass)
  • 任意无限脉冲响应滤波器 (afir)
  • 任意有限脉冲响应滤波器 (aiir)
  • 均衡器
    • 二阶滤波器
    • FIR 均衡器
    • Xbox 360 均衡器
    • 高频棚滤波器
    • 低频棚滤波器
    • Chebyshev/Butterworth Type1/Type2 多段均衡器
    • 峰值均衡器

视频

  • 转换
    • 转置 (transpose)
    • 旋转 (rotate)
    • 填充 (pad)
    • 缩放 (scale)
    • 渐变 (fade)
    • 裁剪 (cropdetect, crop)
  • 其他
    • 透视校正
    • OpenCV 滤波
    • 镜头校正
  • 时间编辑
    • 修剪 (trim)
    • 循环 (loop)
    • 帧率 (framerate, fps)
  • 过滤
    • 模糊 (smartblur, sab, avgblur, gblur, boxblur)
    • 卷积滤波器
    • 锐化掩模
    • Prewitt 滤波器
    • Sobel 滤波器
    • 边缘检测
    • 卷积

支持的测试图案

  • EBU 彩条 (pal100bars 和 pal75bars)
  • SMPTE 彩条 (smptehdbars 和 smptebars)

支持的 LUT 格式

  • Pandora m3d
  • DaVinci Resolve dat
  • Adobe After Effects 3dl
  • Iridas Cube
  • cineSpace LUT 格式

FFmpeg 的应用

法律方面

FFmpeg 包含 100 多种编解码器,几乎所有编解码器都采用某种压缩方法。其中一些压缩方法可能涉及与软件专利相关的法律索赔。这些索赔可能在某些拥有软件专利的国家(如 美国)具有强制执行力,但在某些 欧盟 成员国则被视为无效或不可执行。

某些旧编解码器(如所有 MPEG-2 和 MPEG-1 编解码器以及 AC3)的专利已过期。FFmpeg 在 LGPL 许可下授权,但是,如果特定的 FFmpeg 构建链接到一个 GPL 库,那么整个二进制文件将在 GPL 许可下授权。

使用 FFmpeg 的项目

FFmpeg 被 FFmpeglnterop、OpenMAX IL、Perian 和 Gstreamer FFmpeg 插件使用,以扩展相应多媒体平台的解码和编码功能。

FFmpeg 被 MPC-HC、VirtualDub fork、VirtualDub2、YouTube、HandBrake、Blender、Kodi、Plex、Cinelerra-GG 视频编辑器、Shotcut、xine 和 VLC 媒体播放器等软件使用。它在 Google Chrome 和 Firefox Linux 版本中管理音频和视频播放媒体。对于 FFmpeg,已经集成了图形用户界面前端,例如 XMedia Recode。

作为 NASA 的火星 2020 任务 的一部分,毅力号火星车火星 上使用 FFmpeg 对视频和图像进行压缩,然后传输回地球。

如何在 Ubuntu 中安装 FFmpeg?

FFmpeg 是一个开源免费的命令行工具,用于转码多媒体文件。它包含一组共享的视频和音频库,如 libavutil、libavformat 和 libavcodec。我们可以使用 FFmpeg 在多种视频和音频格式之间进行转换、调整视频大小和设置采样率。

它是一个非常著名的软件项目,由一组用于处理视频和音频文件转换、录制其他多媒体文件和流的库和程序组成。它是一个命令行工具箱,用于转换、流式传输和操作多媒体内容。

在本文中,我们将解释如何在 Ubuntu 的 20.04 版本中安装 FFmpeg。

安装过程

有几种在 Ubuntu 20.04 版本中安装 FFmpeg 的方法,例如使用 Ubuntu 的官方软件包存储库、使用源代码以及使用 snap store 进行安装。

安装稳定版 FFmpeg 最方便、最简单的方法是使用 APT 包管理器进行安装。

我们将安装 4.2.4 版本,该版本可在 Ubuntu 的 APT 包存储库中找到。

1. 我们需要先更新系统的 APT 缓存存储库才能安装它。下面提供了更新系统的命令


Install FFmpeg Ubuntu

2. 更新完系统的 APT 缓存存储库后,我们可以使用下面的命令安装 FFmpeg 软件


Install FFmpeg Ubuntu

3. 它可能会要求在安装过程中占用额外的磁盘空间,我们需要输入 “y” 然后按 Enter 键。

4. FFmpeg 现在已安装在我们的 Ubuntu 20.04 LTS 版本中。

5. 接下来,我们应该通过在批准安装后使用命令来检查 FFmpeg 版本。下面提供了该命令


Install FFmpeg Ubuntu

打印/查看解码器和编码器

我们需要在终端窗口中输入以下命令来打印/查看 FFmpeg 中可用的解码器和编码器


Install FFmpeg Ubuntu

Install FFmpeg Ubuntu

FFmpeg 在我们的系统上运行正常并已安装。让我们尝试一些其他任务,例如提取文件信息、使用视频文件提取音频以及将音频或视频文件转换为其他格式。

提取文件信息

我们可以使用 Ubuntu 20.04 LTS 系统中的终端窗口执行以下命令,以获取任何媒体文件的所有信息,并使用 FFmpeg

请确保将 “audio_file_mp3” 替换为我们的视频或音频文件名。我们可以使用上面提供的相同命令获取视频文件的信息。

使用视频文件提取音频

我们可以使用终端窗口中的以下命令,使用 ffmpeg 从任何视频文件中提取音频

我们可以使用上面的命令从任何视频文件中提取音频。我们需要将 “video_file_mp4” 替换为我们的视频文件名,然后给出我们即将提取的新音频文件的名称。

将任何媒体文件转换为其他格式

如果我们希望将视频或音频文件转换为我们需要的其他格式,可以通过在终端窗口中输入以下命令来实现。例如,将一个视频(MP4 格式)转换为 WEBM 格式,假设。

这就是我们将媒体文件转换为其他文件格式的方法。

命令与上面的类似,可以将音频文件转换为任何其他格式。我们需要先给出要转换到的文件的名称,然后给出带有文件格式的新文件名。