人们普遍认为,由于许可原因,FFmpeg 的预编译 Windows 可执行文件开箱即用,带有较低质量的编码器 - 特别是当涉及到默认 AAC 编码器和默认重采样器时。
根据这些来源,解决方案是从源代码编译程序:
FFmpeg 支持两种 AAC-LC 编码器(aac 和 libfdk_aac)和一种 HE-AAC (v1/2) 编码器 (libfdk_aac)。libfdk_aac 的许可与 GPL 不兼容,因此当 GPL 许可代码也包含在内时,GPL 不允许分发包含不兼容代码的二进制文件。因此,此编码器已被指定为“非免费”,您无法下载支持它的预构建 ffmpeg。这可以通过自己编译 ffmpeg 来解决...
Fraunhofer FDK AAC 编解码器库。这是目前 ffmpeg 可用的最高质量的 AAC 编码器。需要使用 --enable-libfdk-aac 配置 ffmpeg(如果您还使用 --enable-gpl,还需要使用 --enable-nonfree)。
...
如果你想要 FDK-AAC ,你必须自己编译 handbrake。我做到了,现在音频听起来很棒。
我的机器上已经安装了 Cygwin,我宁愿用它来编译程序,也不愿设置另一个软件生态系统或刻录整个 Linux 发行版。
我如何使用 Cygwin 来编译带有更好外部库的 FFmpeg?
这说起来容易做起来难,我花了一个多月的时间才弄清楚如何做到没有任何问题,但我花了足够多的时间在这上面,所以我决定把这个过程记录得足够好,以便几乎无缝地完成任何人跟着我。
不幸的是,Cygwin 的默认工具链(即
gcc-core
包含在 Cygwin 安装程序中的包)对于交叉编译目的来说是固有的破坏,并且 Cygwin 维护者似乎没有任何修复这个问题的意图,所以目前,唯一的编译方法Windows with Cygwin的软件是在其下建立一个MinGW-w64工具链。值得庆幸的是,这就像安装几个软件包一样简单。在此之后,我们将编译剩余的包,然后再使用两者的组合来编译 FFmpeg 本身。使用本指南
完整地遵循本指南将构建一个静态 FFmpeg 安装,其中包含外部库, 例如
fdk-aac
,和 SOX 重采样器。如果我收到足够多的针对特定库的请求,我可能会考虑在指南中添加有关编译特定外部库的说明。libopus
x265
本指南使用的依赖项 - 由 MinGW-w64 交叉编译工具链本身、安装的
apt-cyg
所有包和从源代码编译的所有包组成 - 将占用高达 2.8GB 的磁盘空间,尽管本指南还包括清理命令除了 FFmpeg 安装之外的所有内容都已完成。安装本身由二进制文件和文档组成,仅占用超过 200MB 的磁盘空间。本指南将在您的主目录中创建一个名为 的文件夹,
ffmpeg_sources
它将在其中下载并编译所有从源代码构建的包。FFmpeg会安装到/usr/local
,FHS标准建议安装用户自己编译的软件。此位置还有一个次要优势,即PATH
在 Cygwin 中默认位于系统上,因此不需要$PATH
更新环境变量。安装包管理器依赖项
首先,下载最新版本的Cygwin安装程序以安装
wget
、tar
和包。好消息是这些包是一个工具的依赖项,可以防止您再次使用 Cygwin 安装程序。gawk
git
安装
apt-cyg
包管理器接下来,安装kou1okada 的 apt-cyg 包管理器的分支。如果您目前没有使用 Cygwin 的包管理器,那么这一步不仅会使本指南的其余部分变得轻而易举,而且还会使您的 Cygwin 体验与任何 Linux 发行版相媲美。
即使您已经使用了 Cygwin 的包管理器,例如原始版本的不同分支
apt-cyg
,我也强烈建议您将其替换为这个,与原始版本相比,它是一个更加成熟的软件,以及目前正在积极开发的 Cygwin 的唯一包管理器。安装 kou1okada 的
apt-cyg
:安装构建工具并设置 MinGW-w64 交叉编译器
编译依赖
下面的每个部分都编译了一个外部库,允许您在启用该库的支持的情况下编译 FFmpeg。将每个命令的全部内容复制并粘贴到您的 shell 中。
如果您决定不需要您的 FFmpeg 构建来支持给定的库,请跳过它的部分并在本指南的最后阶段编译 FFmpeg 时删除相应的行。
--enable-package
使用以下命令在 Cygwin 安装的根目录中创建一个目录:
这是我们将源代码下载到的目录,并从中编译它。
libmp3lame
要为 MP3 编译 LAME 音频编解码器:
libx264
要编译 x264 视频编解码器:
libx265
要编译 x265 视频编解码器:
libogg/libvorbis
Ogg 格式是 Vorbis 音频编解码器的依赖项,因此需要在它之前进行编译:
然后正常编译 Vorbis:
利宝
编译 AV1 视频编码器:
力宝
编译 Opus 音频编码器:
libfdk-aac
为 AAC 编译 Fraunhofer FDK 编码器:
libsoxr
要编译 SOX 重采样器库,您首先需要为 MinGW-w64 工具链创建一个 CMAKE 工具链文件,因为该项目默认不包含一个。
在 Cygwin 根目录中创建一个新文件,并调用它
toolchain-x86_64-mingw32.cmake
(确保 Windows 显示扩展名,并且扩展名是.cmake
)。将以下内容复制并粘贴到文件中:
现在您可以正常编译 SOX 重采样器:
编译 FFmpeg 二进制文件
唯一剩下的就是使用上面下载或编译的库编译 FFmpeg 本身:
请记住为上面列表中的每个包删除
--enable-\*package\*
您没有为其下载或编译库的行。编译 FFmpeg 将比编译外部库花费更长的时间,但一旦完成,您应该拥有一个完全可用的二进制文件,其中包含您编译它时使用的所有库。要运行它,只需
ffmpeg
在 Cygwin 终端中运行即可。清理/卸载
到指南中的这一点,您将占用大约 2.8 GB 的磁盘空间进行下载、安装和编译。其中大部分现在是多余的,应该清理掉。超过 2.6 GB 的文件可以安全地清除,这使我们的 FFmpeg 安装的总占用空间减少到 200MB。
安装后清理
运行以下命令将释放超过 2.3GB 的磁盘空间:
除了删除
ffmpeg_sources
目录和不需要的静态库之外,这还将删除之前安装的不再需要的任何包,除了那些在 Cygwin/Linux 上构建工具通常需要的包。删除交叉编译器
如果您不再打算使用本指南前面构建的 MinGW-w64 交叉编译工具链编译任何其他程序,您可以安全地卸载它,以及之前安装的所有剩余包:
这将释放额外的 ~450 MB 空间。
卸载 FFmpeg
如果您需要反转本指南中的所有步骤并从系统中清除 FFmpeg 二进制文件,只需运行以下命令:
这将删除本指南过程中安装的所有内容,并将您的系统恢复到启动前的状态。
Instead of doing everything manually, you can use the
media-autobuild_suite
for Windows, which builds FFmpeg with almost all of its dependencies:The script gets continuously updated, and for most users, it will be the preferred way to get FFmpeg compiled under Windows.