我该如何在Ubuntu上安装最新的FFmpeg开发库?

我正准备在我的Ubuntu系统中安装最新版本的FFmpeg 2.0.1。我已经安装了旧版本的开发库。在之前的安装中,我没有从源代码构建它们,而是使用了"Synaptic Package Manager"。
有人可以帮我解决以下问题吗:
1. 为什么Synaptic Package Manager不显示最新版本,以便我可以轻松更新?我能做些什么来修复它吗?
2. 我如何找到已经安装在我的系统上的库的版本?(我确定它是一个旧版本,但我想知道具体的版本号)。
3. 我正在尝试完全删除旧版本,并再次从源代码安装新的库。有人可以帮我解决这个问题吗?
2个回答

为什么Synaptic软件包管理器不显示最新版本?
来自Ubuntu Wiki – 稳定发布更新
一旦Ubuntu发布完成并公开,只有在特定情况下才会发布更新,并且必须遵循称为“稳定发布更新”或SRU的特殊程序。
这意味着软件包通常无法与活跃的上游源保持同步。
我能做些什么来修复它吗?
您可以按照逐步指南编译和安装自己的最新版本ffmpeg及其库:在Ubuntu、Debian或Mint上编译FFmpeg。此指南执行本地安装,因此不会干扰存储库软件包或系统文件,但如果您正在编译依赖于新库的内容,则可能需要告诉它您的新ffmpeg库位于何处。
如果您要编译许多程序或需要比提供的更多最新软件包,则从长远来看,Ubuntu可能不是最高效的发行版。
如何找到已安装在我的系统上的库的版本?
主要版本号包含在软件包名称中,例如libavcodec53
我正在尝试完全删除旧版本,并从源代码重新安装新的库。
如果您想执行系统安装以替换ffmpeg或libav-tools软件包和/或库,则可以简单地删除现有软件包,然后编译ffmpeg,最后使用checkinstall或其他方法将其安装到系统中。请参阅先前提到的指南的旧版本,该指南执行所有这些操作,但请注意它已过时,至少您可能需要在ffmpeg配置行中添加--extra-libs=-ldl
如果您想进行本地安装,请按照当前版本的编译指南进行操作。

误导性的软件包名称

你应该知道,所谓的“ffmpeg”软件包并不是来自FFmpeg,而是来自一个叫做libav的分支。请参考谁能告诉我ffmpeg、libav和avconv之间的区别和关系?


安装过程是在本地安装静态的ffmpeg库。您能否提供一种方法使其动态,并将.so文件的路径添加到LD_LIBRARY_PATH中?我不熟悉终端命令。 - progammer
@jsp99 抱歉,我从不以共享方式构建。请参考每个程序的 ./configure --help - llogan
我刚刚安装了Geany,并且正在尝试设置"构建命令",以便它能够识别FFmpeg库并生成"a.out"文件。你可以帮忙吗?谢谢 :) - progammer
但是我怎么知道我的新ffmpeg库位于哪里,并告诉其他我正在编译的软件呢?我甚至可以按照指南下载最新的源代码并进行编译,但我的问题是,即使它制作并安装了Debian软件包,'ffmpeg'命令在命令行中也无法访问,并且其他我正在编译的软件也看不到这些新的库。 - Nickolai Leschov
@NickolaiLeschov 这个指南不会安装Debian软件包,也不会向系统中安装任何东西。如果新编译的ffmpeg在命令行中无法访问,则可能需要运行. ~/.profile - llogan
我相信旧版本确实安装了一个Debian软件包。不管怎样,现在我按照你的建议操作后,FFmpeg在命令行中显示出来了:太好了!但是,我正在编译的软件无法识别新的库:“configure: error: libswscale not found.”libswscale是FFmpeg的一部分。我该如何让配置脚本看到这些新的库呢? - Nickolai Leschov

这个答案是为了帮助新手安装最新的FFmpeg开发库并与之一起工作。我通过艰难的方式了解到,安装一个开发库只是开始。真正困难的部分是编译(使用适当的标志)并将源文件成功地制作成可执行文件。

上述链接中的步骤非常直接(尽管有些冗长且耗时)。您需要复制命令并粘贴到终端中。

  • 上述步骤创建了一个本地安装的FFmpeg库。这是一个静态库。所谓本地安装是指系统对该库一无所知。
关于图书馆类型和如何使用它们的信息可以通过谷歌来获取。这已经足够让你入门了:图书馆类型。如果你只关心使用图书馆进行源代码编译,那么可以跳过阅读。
现在,这是困难的部分。我花了几个小时才弄清楚这一部分。你需要让编译器知道你的FFmpeg库。实际上,在下一步中给它适当的标志时,你会做到这一点。但在下一步之前,你需要做一些准备工作。

/home/jsp99/ffmpeg_build/lib/pkgconfig目录下的所有.pc文件复制并粘贴到/usr/local/lib/pkgconfig目录下

由于在Ubuntu中复制和粘贴不太容易,可以点击此链接查看说明。

要实际编译源代码并生成可执行文件,请在终端中输入以下命令:
gcc -Wall -o module1.out -I/home/jsp99/ffmpeg_build/include -L/home/jsp99/ffmpeg_build/lib module1.c $(pkg-config --cflags --libs libavformat libavcodec libswscale)
/home/jsp99 是当前用户的主文件夹。
module1.c 是我的源文件名称。
module1.out 是可执行文件(输出)的名称。