本次文档测试的系统为Ubuntu 16.04,很多通过apt install安装的库都很破旧
想要vlc实现解码稀有编码格式必须能够完整地安装vlc,通过snap或apt安装的vlc没有办法以root用户运行,因此只能重新编译vlc,并在编译前配置时加入允许root用户运行的选项(enable-run-as-root),当然如果转码程序本身可以在不用root用户运行的情况下就能够正常运行的话直接通过snap install vlc就可以(通过apt安装的vlc十分破旧),不需要再按照这个文档编译vlc
- 安装依赖
(Install Requirements)
sudo apt-get install build-essential pkg-config libfreetype6-dev libfontconfig1-dev libx11-dev libxext-dev libxinerama-dev \
libv4l-dev libxcb-shm0-dev libxcb-xv0-dev libav-tools libavcodec-dev \
libavformat-dev zoo libswscale-dev libqt4-dev autopoint flex gettext bison \
liblua5.2-dev lua5.2 luajit libxcb-composite0-dev libxcb-xkb-dev
- 重新编译cmake, x265, aom, svtav1, protobuf, ffmpeg
(Recompile cmake, x265, aom, svtav1, protobuf, ffmpeg)
重新编译ffmpeg的原因:vlc会用到ffmpeg的库,而用到的ffmpeg的库必须在编译时加入"-fPIC"选项
重新aom的原因:aom是ffmpeg会用到的一个组件,而aom也需要在编译时加入"-fPIC"选项
重新编译svtav1的原因:旧版本的svtav1可能会与最新版的ffmpeg(6.0)不匹配,导致在编译ffmpeg前配置时出错,显示不符合ffmpeg当前版本的配置要求
重新编译x265的原因:编译vlc必须用到编译了share库的x265,如果之前在编译x265时没有选择开启ENABLE_SHARED,会在编译vlc时出错
重新编译protobuf的原因:除了编译protobuf也可以通过apt install protobuf-compiler来安装,但是通过该命令安装的protobuf的版本可能过低
重新编译cmake的原因:通过apt install cmake安装的cmake版本的可能过低,不满足编译x265、aom、svtav1的要求
x265、svtav1、aom在本文档中都默认安装到$HOME/ffmpeg_build/下 (1) Recompile cmake
version=3.20
build=0
mkdir ~/temp
cd ~/temp
wget https://cmake.org/files/v$version/cmake-$version.$build.tar.gz
tar -xzvf cmake-$version.$build.tar.gz
cd cmake-$version.$build/
./bootstrap
make -j$(nproc)
sudo make install
cmake --version
(2) Recompile x265
sudo apt-get install libnuma-dev && \
cd ~/ffmpeg_sources && \
wget -O x265.tar.bz2 https://bitbucket.org/multicoreware/x265_git/get/master.tar.bz2 && \
tar xjvf x265.tar.bz2 && \
cd multicoreware*/build/linux && \
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=on ../../source && \
PATH="$HOME/bin:$PATH" make && \
make install
(3) Recompile aom
cd ~/ffmpeg_sources && \
git -C aom pull 2> /dev/null || git clone --depth 1 https://aomedia.googlesource.com/aom && \
mkdir -p aom_build && \
cd aom_build && \
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_TESTS=OFF -D CMAKE_POSITION_INDEPENDENT_CODE=ON -DENABLE_NASM=on -DBUILD_SHARED_LIBS=ON -DCMAKE_CXX_FLAGS="-fPIC" -DCMAKE_C_FLAGS="-fPIC" ../aom && \
PATH="$HOME/bin:$PATH" make && \
make install(OR sudo make install)
(4) Recompile SVTAV1
cd ~/ffmpeg_sources && \
git -C SVT-AV1 pull 2> /dev/null || git clone https://gitlab.com/AOMediaCodec/SVT-AV1.git && \
mkdir -p SVT-AV1/build && \
cd SVT-AV1/build && \
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DCMAKE_BUILD_TYPE=Release -DBUILD_DEC=OFF -DBUILD_SHARED_LIBS=OFF .. && \
PATH="$HOME/bin:$PATH" make && \
make install
(5) Recompile protobuf
如果protobuf的版本过低再重编译
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.17.3/protobuf-all-3.17.3.tar.gz
tar xvf protobuf-all-3.17.3.tar.gz
cd protobuf-3.17.3
./configure
make
make check
sudo make install
sudo ldconfig
(6) Recompile ffmpeg
./configure --prefix=/home/transcode2/ffmpeg_build --pkg-config-flags=--static --extra-cflags='-fPIC -I/home/transcode2/ffmpeg_build/include' --extra-ldflags=-L/home/transcode2/ffmpeg_build/lib --extra-libs='-lpthread -lm' --bindir=/home/transcode2/bin --enable-gpl --enable-gnutls --enable-libaom --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libsvtav1 --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree --enable-libzimg
上述命令运行后如出现警告,请输入下述命令
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$HOME/ffmpeg_build/lib/pkgconfig/
make -j8
make install
安装完使用ffmpeg
命令测试一下是否可以正常输出
如果无法正常输出,把缺少的.so文件复制到/usr/lib/下
3. 编译vlc
(Compile vlc)
git clone https://github.com/videolan/vlc.git
cd vlc
git checkout remotes/origin/3.0.x
mkdir -p /usr/local/vlc
./bootstrap
./configure --prefix=/usr/local/vlc --enable-run-as-root --enable-lua --disable-a52 --disable-qt
make -j8
sudo make install
注意,这个vlc没有界面,因为禁止qt了(因为我实在是装不上,反正也用不着)