简介
由于之前常用的安装FFmpeg的PPA变成了收费的,以后只能自己从源码编译FFmpeg和MPV,这里记录一下操作流程。
安装FFmpeg
根据这里的官方的教程可以比较简单地完成FFmpeg的编译,但通常没必要装到用户的home目录,所以要更改一些选项。注意MPV最新版可能需求FFmpeg-6.0以上,所以源码直接下最新的就好。
安装依赖
先装上一些apt能装的依赖。统计并不全,如果编译过程提示找不到xxx,那就先试试sudo apt-get install libxxx-dev
。有的包可能会出现apt显示已安装,但编译器还是会说找不到.so文件,可能是因为之前卸载包时候没有卸干净,这时候就要sudo apt-get install libxxx-dev --reinstall
来重装一下这些包。下面这些包从Ubuntu 20.04开始就有提供。
sudo apt-get update
sudo apt-get install \
autoconf \
automake \
build-essential \
cmake \
git \
libfreetype-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在Ubuntu 24.04可以直接用apt安装。
sudo apt-get install ninja-build meson
老版本的Ubuntu可能apt仓库里没有新版的meson和ninja,可以用pip可以安装最新的版本,注意要sudo(新的系统自带Python甚至不允许你直接用pip安装软件,其实是个很合理的设计)。
sudo apt-get install python3-pip
sudo pip3 install meson ninja
用于AV1格式编解码的libsvtav1, libdav1d和用于字幕的libass在Ubuntu 24.04的官方仓库都有比较新的版本了,可以直接安装。
sudo apt-get install libsvtav1-dev libdav1d-dev libass-dev
Ubuntu22.04官方的apt提供了libsvtav1-dev,libdav1d-dev,libass-dev,版本都比较老。其中libsvtav1-dev装的是0.9.0版本,ffmpeg不认,必须手动编译。另外两个似乎能用,可以考虑不折腾。更老的Ubuntu应该是都要手动编译了。
源码编译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
源码编译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
源码编译libvmaf
libvmaf用于计算网飞的VMAF指标,所有的Ubuntu版本都需要手动编译。从这里下载最新的release源码并解压,会得到一个vmaf-x.x.x的文件夹,比如vmaf-3.0.0。
cd vmaf-3.0.0/libvmaf
meson build --buildtype release
ninja -vC build
ninja -vC build test
sudo ninja -vC build install
源码编译FFmpeg
一套操作下来终于可以开始编译FFmpeg了。从这里下载FFmpeg的源码,解压得到文件夹ffmpeg-x.x.x。
cd ffmpeg-x.x.x
./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
在Ubuntu 24.04,libplacebo也可以从官方仓库安装MPV可以使用的最低版本了。
sudo apt-get install libplacebo-dev
按官方介绍,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
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时没删干净造成的吧。