简介
由于之前常用的安装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时没删干净造成的吧。