FFmpeg在14.04的官方软件仓库中是否缺失?

我尝试在trusty/Ubuntu 14.04中安装ffmpeg,遇到了以下信息:
$sudo apt-get install ffmpeg

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package ffmpeg is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'ffmpeg' has no installation candidate

为什么这个包裹不可用?

1如果你在返回的结果列表中没有看到ffmpeg,那么你的软件源管理器可能出了问题。暂时建议你通过源代码编译安装。从这里下载。 - wyas
2请注意,截至2018年,avconv不在ffmpeg中,libav-tools也不在Ubuntu存储库中! - Owl
10个回答

最新消息


FFmpeg和libav

Ubuntu软件仓库中的libav

Ubuntu在最近的版本中开始使用libav分支代替FFmpeg进行发行。如果你安装了ffmpeg软件包,实际上你安装的是libav-tools软件包以及一个程序,告诉你将来要使用avconv而不是ffmpeg,给人一种ffmpeg已经过时的印象,但事实并非如此。

过渡性的ffmpeg软件包似乎已经从trusty/Ubuntu 14.04中移除(对比一下源代码软件包中saucy和trusty的软件包文件列表)。

所以一个选择是安装libav-tools软件包并使用avconv代替(请注意,这不是“主线”FFmpeg,而是一个重要的分支)。

从Launchpad的PPA安装FFmpeg

另一个选择是使用提供FFmpeg的PPA。请查看FFmpeg下载页面,了解可用的PPA和软件包的详细信息。您应该定期检查各个PPA是否仍然更新。

相关问题:

从源代码安装

另一个选择是安装FFmpeg依赖包,然后从源代码手动编译+安装它。

使用静态构建

虽然从包装的角度来看可能有点尴尬,但您也可以使用来自“可信任”的静态构建。在我的情况下,我将FFmpeg Windows 32位和64位二进制文件以及x264-10位二进制文件放在一个文件夹中,以便在需要时在Wine或Windows上运行它们。
以下是我在研究这个主题时找到的内容。我没有密切关注这两个项目的发展,也不是有意指责任何人。作为读者的你也不应该这样做。
分叉是如何发生的?
维基百科上提到,分叉项目以及最初的发布是在2011年3月13日宣布的,但实际情况还要复杂一些。
深入研究Git提交记录。
18 Jan 2011 - 提交 f4f5cab94e0881cd30965b28f3d78d9c63d6918e FFmpeg项目负责人Michael Niedermayer被从MAINTAINERS文件中移除。
27 Jul 2011 - 提交 6291d7e41605c0b1e9debfae8a2b1d4cf7b0e0b3 引入了avconv: 创建了一个ffmpeg的副本,命名为avconv。 将会在此基础上进行进一步开发,并带来一些不兼容的改变。 ffmpeg.c将保持原样一段时间,因此使用它的脚本不会出错。
27 Jul 2011 - 提交 791a86c37a03b94207bc2d0ad4cbe7f39d7e495a 在fork版本的ffmpeg.c源代码中添加了一个警告,可能会误导那些没有注意到分支以及不再使用FFmpeg的用户。
12 Jan 2012 - 提交 0fec2cb15cc6ff1fcc724c774ec36abadcb7b6ad 从源代码中删除了ffmpeg.c。

libav.org 的官方公告

以下帖子来自新闻部分(按最旧到最新排序):

2011年8月9日 更新于2011年9月12日。 为了与我们的新名称保持一致,我们将ffplay更名为avplayffserver更名为avserverffprobe更名为avprobe。它们的功能保持不变,只是名称发生了变化。
对于命令行工具ffmpeg,我们决定利用这个机会解决一些长期存在的易用性问题,这可能导致不兼容。因此,我们添加了一个名为avconv的新工具,它基于ffmpeg,但在某些选项的语法上有所不同(希望更强大、更易于使用)。ffmpeg将保持当前状态一段时间,因此不会破坏使用它的脚本或前端。然而,它将不再进行进一步的开发。 avconvffmpeg之间的区别是:
[...]
请注意,目前avconv界面尚不稳定。在接下来的几周内可能会出现更多不兼容的更改。当avconv稳定时,我们将在此处通知大家。
而在2011年初:
2011年3月18日 我们刚刚从0.6版本分支推出了另一个补丁发布版本:Libav 0.6.2。这是另一个仅针对两个安全问题进行维护的版本。
从现在开始,我们将使用我们的新项目名称libav。但不要担心,与之前的0.6.1版本相比,唯一的功能变化是VC1和APE解码器的两个安全修复。这意味着libav可以无痛替代现有的FFmpeg安装。
此外,我们很自豪地提供适用于win32平台的可执行文件和库。这些二进制文件包括使用捆绑的x264库进行H.264编码。请享用!
鼓励经销商和系统集成商更新并共享与我们的发布分支相关的补丁。
2011年3月17日 我们刚刚从0.5版本分支推出了另一个补丁发布版本:FFmpeg 0.5.4。这是另一个仅针对多个安全问题进行维护的版本。
鼓励经销商和系统集成商更新并共享与我们的发布分支相关的补丁。
2011年3月13日 作为一群FFmpeg开发人员,我们决定在Libav的名义下继续开发FFmpeg。所有现有基础设施将转移到libav.org域名下。
网站:http://www.libav.org/ Git: git://git.libav.org/libav.git (查看 http://libav.org/download.html) FATE:http://fate.libav.org/ Roundup:https://roundup.libav.org/ Patchwork:http://patches.libav.org/ 邮件列表:http://lists.libav.org/(开发者列表:libav-devel@libav.org)
您可以使用以下命令更新您的git存储库:
git remote set-url origin 'git://git.libav.org/libav'
目前我们仍然可以通过FFmpeg的邮件列表和IRC频道联系到,但我们将迁移到libav.org的对应项目。在过渡期间,网站和源代码可能仍然涉及FFmpeg的引用。这些引用将逐渐消失,除非具有历史意义。
2011年2月24日 FFmpeg的开发已经转移到了Git,SVN存储库不再更新。SVN存储库可能会在不久的将来被删除,因此建议您使用Git存储库
最后提交给SVN的修订版本是2011-01-19的r26402,并用独立复制替换了svn:external libswscale。
请注意,FFmpeg的开发实际上已经转移到了一个Git存储库,并且有两个Git存储库。请查看相应项目的下载页面。

这个变化是什么时候发生的? - Seth
@Seth 你是指替换FFmpeg为libav的运输方式,还是放弃过渡包?我找到了一封邮件,指向技术委员会的团队报告,并在launchpad上添加了一个源代码包的链接,可以比较saucy和trusty的软件包列表,但我不知道具体细节。 - LiveWireBT
我是指放弃这个包裹,不过如果可能的话,我对两者的时间框架都很感兴趣。 - Seth
3我可能会把如何安装ffmpeg的ppa放到最后。就像是一种"如果你真的喜欢逆流而上,并且已经阅读了所有这些内容...那么你可以这样做。"而不是将其放在最前面。比如,鼓励使用主要/统一/多个源,如果可以避免使用PPA。 - RobotHumans
@ Seth,我刚刚通过查阅libav的git树和他们在项目页面上发布的新闻,添加了我能找到的内容。FFmpeg邮件列表中的一些邮件似乎已被删除(例如http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2011-January/103440.html)。这个回答可能有点冗长,但对于那些好奇的人来说,提供了一些方向。 - LiveWireBT
1@hbdgaf 我添加了http://askubuntu.com/q/35629/ 作为一个提醒。FFmpeg PPA已经是最新的,没有考虑到新添加的历史部分。与其纯粹地涉及政治(可能是仇恨),我更愿意讨论FFmpeg中的不同功能,比如新的去隔行滤镜w3fdif(但这是离题的)。我不明白为什么显然我被点踩了(我并不特别责怪你),只是试图客观地解释发生了什么。我与这些项目之一没有任何关联,并打算尽可能客观。 - LiveWireBT
15.04有回报,但16.04却不见了(?!?) - matanster
你是什么意思?这个软件包在软件库中存在,并包含了二进制文件 http://packages.ubuntu.com/xenial/amd64/ffmpeg/filelist - LiveWireBT

ffmpeg在之前的版本中被libav项目的avconv程序所取代。

要安装avconv,您需要安装libav-tools软件包:

sudo apt-get install libav-tools

avconvffmpeg非常相似,但它们在语法上也有一些差异。

编辑:看起来Ubuntu 16.04LTS再次在他们的软件源中包含了ffmpeg,所以libav-tools只是一个虚拟包,并且只创建了一个别名avconv -> ffmpeg(以及其他)。


简单的答案,但是所有在线的指南都是关于如何使用ffmpeg来完成任务,而不是avconv,这就是我来到这个页面的原因。对Rutrus表示歉意:减一分。也许如果你解释一下它们之间的区别,我们就能够使用它了。 - Aaron Hall
3@aaron-hall 我认为你的-1评分是不公平的。你对某件事情有错误的期望。2014年提出的问题非常清楚:在14.04版本中是否缺失?答案是肯定的,在一些之前的版本中,ffmpeg只是avconv的别名而已。无论你在寻找什么,都无关紧要。也许你在点击这个页面之前没有阅读页面的标题。但是不用担心,我会编辑并加上一个免责声明,针对那些声望为184的人,他们不知道如何使用StackExchange。 - Rutrus
我还在使用14.04版本,想要使用ffmpeg,avconv是一个可以直接替代的工具吗?它们之间有什么区别? - Aaron Hall
你在这个网站上的绝大部分声誉都是因为这个答案,而我完全可以根据顶级答案中的材料来写出这个答案。你应该通过撰写一个至少简短而概括地说明差异的体面答案来赚取你的声誉。挥手是浪费时间。除非它真的只是一个别名,否则语法上不应该有任何差异。如果你这样做了,你会改变我的对答案的看法,但目前它自相矛盾!让我知道我什么时候可以删除这些评论。 - Aaron Hall
2libav-tools是从ffmpeg分支出来的。在Ubuntu软件仓库中,从2012年到2014年,ffmpegavconv取代了。你可以提出这个新问题来获得答案,或者自己找一个。自从Ubuntu 15.04起,你可以再次使用ffmpeg。简而言之,libav与ffmpeg的语法兼容,但反过来则不一定。 - Rutrus
@Rutrus 如果我没记错的话,你把它写反了。FFmpeg支持libav语法(尽管可能存在一些不兼容性),但反过来则不成立。 - Wlerin
这在2017年仍然有效,非常完美。 - ABCD

ffmpeg已经从Ubuntu的仓库中移除了,而不是libav。你应该添加ppa:
sudo add-apt-repository ppa:mc3man/trusty-media
sudo apt-get update
sudo apt-get install ffmpeg gstreamer0.10-ffmpeg

注意你的输出

1必须是:`sudo add-apt-repository ppa:mc3man/trusty-media :) 无法编辑此内容,字符更改不够。 - IndexOutOfBoundsException
1这不是FFmpeg.org上列出的当前官方PPA。(此外,维护PPA的项目成员可能会更改,这就是我决定不包含如何添加特定PPA的说明的原因。) 此外,如果您查看此PPA,它会更新比仅仅ffmpeg更多的软件包。 - LiveWireBT
这个不再起作用了。 - MadeOfAir
它确实有效。我刚刚添加了这个PPA,现在正在安装FFMPEG。 - Muhammad bin Yusrat
虽然对于Utopic Unicorn来说不起作用 :( - Tamsyn Michael
太好了!它能在我的Linux Mint 17.2上运行。 - Luca Steeb
3@LiveWireBT(和其他人),现在PPA已经作为Ubuntu链接提供在FFmpeg下载页面上... - Wilf

你也可以使用这个PPA: ppa:jon-severinsson/ffmpeg 编辑:这个PPA已经从Launchpad中删除了,我不知道为什么。 你可以使用samrog131 PPA(适用于Trusty、Utopic和Vivid)代替。
sudo add-apt-repository ppa:samrog131/ppa
sudo apt-get update
sudo apt-get install ffmpeg-set-alternatives

PPA中还包含其他您可能不需要的软件包。安装后请删除该ppa。
sudo add-apt-repository --remove ppa:samrog131/ppa
sudo apt-get update

1修复apt-add-repository -> add-apt-repository。如果apt-add-repository对您不再起作用,请尝试以下方法:https://stackoverflow.com/questions/13018626/add-apt-repository-not-found - RedPixel
2这基本上是我在答案中发布的相同信息,但没有在建议用户安装PPA软件包之前提供的警告。此外,未来可能会有其他人接管ffmpeg PPA的维护工作,或者PPA可能会被移动或重命名。因此,链接到官方说明是正确的做法,因为它减少了冗余和维护工作量。 - LiveWireBT
2这个版本没有提供GStreamer-ffmpeg集成。Duong的回答(mc3man的PPA)提供了集成功能。 - Victor Sergienko
此ppa不支持utopic。 - Amir Ali Akbari
在我的Ubuntu 14.04 LTS上安装这个软件,让我能够在IPython笔记本上播放MP4视频。 - Pablo Reyes
请注意,这是来自ffmpeg.org的真正的 FFmpeg。最近的Debian和Ubuntu软件包使用了Libav(来自libav.org),这是一个著名的FFmpeg分支。 - Penghe Geng
12而现在这个PPA已被删除。 - MFern

FFMPEG软件包自一段时间以来已从Debian软件源中移除。关于是否将该软件包重新纳入软件源,目前仍有持续的辩论。作为Debian的派生版,Ubuntu取决于上游所做的决定。很久以前,该软件包只是一个依赖于libav的空包。然而,这在2012年5月12日发生了变化,当时该软件包被删除并从存档中移除。
libav (6:0.8.99-1537-gacb2c79-1) experimental; urgency=low

  * New upstream snapshot
    - Drop patches applied upstream
    - Longer build libpostproc, dropped upstream
    - follow soname bump of libavcodec and libavformat 53->54
    - New library: libswresample
  * no longer build and use dirac, removed upstream in favor of libschroedinger
  * remove deprecated ffmpeg package
  * bump shlibs version

 -- Reinhard Tartler <siretart@tauware.de>  Sat, 12 May 2012 22:02:03 +0200

1不要说它是空的,辣味包里面包含一个二进制文件 dpkg --contents ffmpeg_0.8.7-1ubuntu2_amd64.deb [...] -rwxr-xr-x root/root 106624 2013-10-11 10:41 ./usr/bin/ffmpeg - LiveWireBT
1@LiveWireBT 你能单独使用这个软件包吗?那个单一文件只是一个用来链接avconv二进制文件的二进制文件。过渡性软件包通常被视为空包。 - Braiam
1我们可能只是在想同样的事情,而且彼此之间产生了误解。 :) - LiveWireBT

我在尝试运行时遇到了相同的错误。
sudo apt-get install ffmpeg

所以我结合了其他几个答案,以及这个网站的内容,得到了对我有效的以下食谱:
sudo apt-get install ppa-purge
sudo ppa-purge ppa:mc3man/trusty-media  # ignore warning if not found
sudo add-apt-repository ppa:mc3man/trusty-media
sudo apt-get update
sudo apt-get dist-upgrade

sudo apt-get install ffmpeg

现在我可以看到ffmpeg已经安装了:

sudo find / -type f -name "ffmpeg"

返回 /opt/ffmpeg/bin/ffmpeg

从bash提示符中,命令ffmpeg现在应该可以在任何文件夹中使用。


2安装 ffmpeg 不需要进行 dist-upgrade - Raptor

如果你想在Ubuntu 14.04上安装ffmpeg 2.2.1(从源代码),你可以尝试使用以下选项:
对于64位操作系统:
依赖列表:
yasm frei0r-plugins-dev gnutls-bin libgnutls-dev libass-dev libgsm1-dev libmp3lame-dev libopencv-dev libopenjpeg-dev libopus-dev libpulse-dev libschroedinger-dev libsoxr-dev libspeex-dev libtheora-dev libv4l-dev libvorbis-dev libvpx-dev libx264-dev libxvidcore-dev libopenal-dev libcdio-paranoia-dev

编译选项:
./configure --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib/x86_64-linux-gnu/  --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' --enable-bzlib --disable-crystalhd --enable-frei0r --enable-gnutls --enable-libass --enable-libcdio --enable-libdc1394 --disable-indev=jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopencv --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib/x86_64-linux-gnu/ --enable-runtime-cpudetect

对于32位操作系统:
依赖项列表:
yasm frei0r-plugins-dev gnutls-bin libgnutls-dev libass-dev libgsm1-dev libmp3lame-dev libopencv-dev libopenjpeg-dev libopus-dev libpulse-dev libschroedinger-dev libsoxr-dev libspeex-dev libtheora-dev libv4l-dev libvorbis-dev libvpx-dev libx264-dev libxvidcore-dev libopenal-dev libcdio-paranoia-dev libopencore-amrwb-dev libopencore-amrnb-dev

编译选项:
./configure --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/lib --mandir=/usr/share/man --enable-runtime-cpudetect --enable-gpl --enable-version3 --enable-postproc --enable-avfilter --enable-pthreads --enable-x11grab --enable-vdpau --disable-avisynth --enable-frei0r --enable-libdc1394 --enable-libgsm --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 -grecord-gcc-switches -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables' --disable-stripping  

更多信息请查看我的YouTube视频


为什么建议将amd64作为共享库?这样做几乎没有什么好处,而且可能会破坏依赖于这些共享库的其他应用程序。 - doug
你忘了提到从哪里下载源代码。 - Akira Yamamoto

如果您想要最新的从github发布的版本,满足来自youtube-dl产生的错误。
ERROR: ffprobe or avprobe not found. Please install one.

然后执行以下命令:
sudo apt-get build-dep ffmpeg

git clone https://github.com/FFmpeg/FFmpeg.git

cd FFmpeg

./configure   --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --enable-shared --disable-stripping --enable-avresample --enable-avisynth --enable-frei0r --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-openal --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libxvid --enable-libzvbi --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-libssh --enable-libsoxr --enable-libx264 --enable-libopencv --enable-libx265

make -j8
sudo make install

享受,

首先安装avconv
$ sudo apt-get install libav-tools

然后创建一个名为ffmpeg的软链接指向avconv
$ sudo ln -s /usr/bin/avconv /usr/bin/ffmpeg

现在你可以正常使用ffmpeg了。

1/usr/bin目录下添加符号链接通常不是一个好主意。如果您升级到最新的Ubuntu版本并尝试从软件仓库安装ffmpeg,会发生什么呢?此外,avconvffmpeg的一个较差的替代品:它缺少许多功能、滤镜等。 - llogan

我花了两个星期的时间安装最新版本的ffmpeg 2.8.11。这个版本适用于Ubuntu 16.04。我建议你应该安装这个版本。我在Ubuntu 12.04和Ubuntu 14.04上进行了测试,效果很好。你可以按照上面的指示安装libav-tools,但是会遇到兼容性问题。因为libav-tools和ffmpeg现在由两个不同的团队开发。 按照我的指示操作。如果有任何问题,请通过电子邮件发送给我:hohaidang.khtn@gmail.com
$ sudo apt-get update
$ sudo apt-get -y install build-essential checkinstall git libfaac-dev libgpac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev librtmp-dev libtheora-dev libvorbis-dev pkg-config texi2html yasm zlib1g-dev  libavcodec-extra-53
$ sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev
$ sudo apt-get install libdc1394-22 libdc1394-22-dev libgsm1 libgsm1-dev libopenjpeg-dev libschroedinger-1.0-0 libschroedinger-dev libschroedinger-doc libspeex-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libvorbis-dev libx11-dev libxfixes-dev libxvidcore-dev libx264-dev
$ wget https://www.ffmpeg.org/releases/ffmpeg-2.8.11.tar.xz
$ tar xf ffmpeg-2.8.11.tar.xz
$ cd ffmpeg-2.8.11/
./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-x11grab --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libdc1394 --enable-libfaac --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --disable-yasm // disable yasm if you are using Ubuntu 12.04, if not --enable-yasm
$ make
$ sudo make install

在终端中检查ffmpeg、ffserver、ffplay和ffprobe。 祝你好运。