简介

由于之前常用的安装FFmpeg的PPA变成了收费的,以后只能自己从源码编译FFmpeg和MPV,这里记录一下操作流程。

安装FFmpeg-6.0

根据这里的官方的教程可以比较简单地完成FFmpeg的编译,但通常没必要装到用户的home目录,所以要更改一些选项。注意MPV最新版可能需求FFmpeg-6.0,所以源码要下载6.0的。

安装依赖

先装上一些apt能装的依赖。统计并不全,如果编译过程提示找不到xxx,那就先试试sudo apt-get install libxxx-dev。有的包可能会出现apt显示已安装,但编译器还是会说找不到.so文件,可能是因为之前卸载包时候没有卸干净,这时候就要sudo apt-get install libxxx-dev --reinstall来重装一下这些包。

sudo apt-get update
sudo apt-get install \
  autoconf \
  automake \
  build-essential \
  cmake \
  git-core \
  libfreetype6-dev \
  libgnutls28-dev \
  libmp3lame-dev \
  libsdl2-dev \
  libtool \
  libva-dev \
  libvdpau-dev \
  libvorbis-dev \
  libxcb1-dev \
  libxcb-shm0-dev \
  libxcb-xfixes0-dev \
  libunistring-dev \
  libaom-dev \
  libx264-dev \
  libx265-dev \
  libnuma-dev \
  libvpx-dev \
  libfdk-aac-dev \
  libopus-dev \
  libjpeg-dev \
  pkg-config \
  texinfo \
  wget \
  yasm \
  nasm \
  zlib1g-dev

其中,libx264用于H.264编码,libx265和libnuma用于H.265编码,libvpx用于VP9编码,libfdk-aac用于AAC音频编码,libopus用于Opus音频编码。

meson和ninja用pip可以安装最新的版本,注意要sudo。

sudo apt-get install python3-pip
sudo pip3 install meson ninja

libsvtav1, libdav1d, libvmaf, libass需要自己编译。
(注:Ubuntu22.04官方的apt提供了libsvtav1-dev,libdav1d-dev,libass-dev,版本都比较老。libsvtav1-dev装的是0.9.0版本,但ffmpeg不认,必须手动编译,另外两个似乎能用,可以考虑不折腾。)

源码编译libsvtav1

直接从master编译应该也无所谓,但checkout到release分支感觉安心一点。FFmpeg只用到了Encoder,所以设置BUILD_DEC为OFF。

git clone https://gitlab.com/AOMediaCodec/SVT-AV1.git
cd SVT-AV1
git checkout v1.7.0
mkdir build && cd build
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUILD_DEC=OFF -DBUILD_SHARED_LIBS=OFF ..
make
sudo make install

源码编译libdav1d

dav1d是个比libaom速度快得多的AV1解码器,可能有的apt-get的repo提供libdav1d-dev,但我这的没有,所以也要从源码编译。同样的,切到最新的release分支。

git clone https://code.videolan.org/videolan/dav1d.git
cd dav1d
git checkout 1.2.0
mkdir build && cd build
meson setup --default-library=static ..
ninja
sudo ninja install

源码编译libvmaf

libvmaf用于计算网飞的VMAF指标。从这里下载最新的release源码并解压,会得到一个vmaf-x.x.x的文件夹,比如vmaf-2.3.1。

cd vmaf-2.3.1/libvmaf
mkdir build && cd build
meson setup -Denable_tests=false -Denable_docs=false --buildtype=release ..
ninja
sudo ninja install

源码编译libass

Ubuntu20.04的apt-get是有libass-dev的,但版本太老了,所以还是自己来编译吧。从这里下载最新release的源码(source code zip),解压得到libass-x.x.x,比如0.17.1。

先要装一些依赖。如果libfontconfig-dev安装了还是提示缺失,需要sudo apt-get upgrade libfontconfig-dev --reinstall

sudo apt-get update
sudo apt-get install \
  libfreetype6-dev \
  libfontconfig-dev \
  libfribidi-dev \
  libharfbuzz-dev

然后配置并安装libass。

cd libass-0.17.1
./autogen.sh
./configure
make
sudo make install

源码编译FFmpeg

一套操作下来终于可以开始编译FFmpeg了。从这里下载FFmpeg-6.0的源码,解压得到文件夹ffmpeg-6.0。

cd ffmpeg-6.0
./configure \
  --extra-libs="-lpthread -lm" \
  --ld="g++" \
  --enable-gpl \
  --enable-gnutls \
  --enable-libaom \
  --enable-libass \
  --enable-libfdk-aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libsvtav1 \
  --enable-libdav1d \
  --enable-libvorbis \
  --enable-libvpx \
  --enable-libx264 \
  --enable-libx265 \
  --enable-pic \
  --enable-nonfree
make
sudo make install

这样就把FFmpeg,FFplay,FFprobe装到了/usr/local/bin。可以ffmpeg试试能不能用。

安装MPV

MPV是个跨平台的视频播放器,可以按官方的安装教程,一键把所有该装的全装了,但我们已经自己装了FFmpeg和libass,没有重装一次的必要,所以我们自己只编译安装MPV。安装完后参考vcb的教程去配置播放器。

安装依赖

参考了mpv-build/debian/control,不清楚哪些是已经装好的,总之就都装一下吧。

sudo apt-get update
sudo apt-get install \
  ladspa-sdk \
  libasound2-dev \
  libarchive-dev \
  libbluray-dev \
  libbs2b-dev \
  libcaca-dev \
  libcdio-paranoia-dev \
  libdrm-dev \
  libdvdnav-dev \
  libegl1-mesa-dev \
  libepoxy-dev \
  libgl1-mesa-dev \
  libgbm-dev \
  libgme-dev \
  libgsm1-dev \
  libjack-jackd2-dev \
  libbrotli-dev \
  liblcms2-dev \
  liblircclient-dev \
  liblua5.2-dev \
  libmodplug-dev \
  libopenal-dev \
  libopencore-amrnb-dev \
  libopencore-amrwb-dev \
  libpulse-dev \
  librtmp-dev \
  librubberband-dev \
  libssh-dev \
  libsoxr-dev \
  libspeex-dev \
  libtool \
  libuchardet-dev \
  libvdpau-dev \
  libvorbis-dev \
  libvo-amrwbenc-dev \
  libunwind-dev \
  libvulkan-dev \
  libwayland-dev \
  libx264-dev \
  libx11-dev \
  libxext-dev \
  libxinerama-dev \
  libxkbcommon-dev \
  libxpresent-dev \
  libxrandr-dev \
  libxss-dev \
  libxv-dev \
  libxvidcore-dev \
  libxxhash-dev \
  x11proto-core-dev

源码编译libplacebo

按官方介绍,libplacebo是mpv的基础库。按官方README来编译安装,meson build那一步能看到可选特性中d3d11, glslang, libdovi, shaderc, vk-proc-addr这几项是NO,用apt安装glslang-dev会导致更多的怪问题,libdovi是杜比音效相关的库,一般用不到,shaderc可以去这里的Downloads部分下载,然后把对应的文件夹放进/usr/local/,这套东西解压了有2.8G……

git clone --recursive https://code.videolan.org/videolan/libplacebo
cd libplacebo
mkdir build && cd build
meson ..
ninja
sudo ninja install

源码编译MPV

终于到了最后一步,就很简单了。

git clone https://github.com/mpv-player/mpv.git
cd mpv
mkdir build
meson setup build
meson compile -C build
sudo meson install -C build

最后输入mpv或者直接找个视频双击看看能不能打开,如果命令行mpv提示类似mpv: error while loading shared libraries: libplacebo.so.277,需要用sudo ldconfig刷新一下shared libraries。

官方一键安装教程

这里也记录下一键安装教程,参见官方的安装教程

git clone https://github.com/mpv-player/mpv-build.git
cd mpv-build
./rebuild -j4
sudo ./install

非常的简单,提示有什么依赖缺失就装什么,或者去mpv-build/debian/control把所有要装的都装了。像libdav1d这种要自己编译的参考上面的FFmpeg安装。

后续小问题

  • 后来安装obs-studio的时候提示找不到ffmpeg_aac编码器,检查具体log后发现是找不到libsndio.so.7.0,执行sudo apt-get install libsndio7.0 libsndio-dev --reinstall后解决,可能又是删除那个坑比ffmpeg的收费PPA时没删干净造成的吧。
Last modification:February 5, 2025
点赞喵,点个赞谢谢喵