Ubuntu 16.04 下编译 FFmpeg

2022-12-19 13:34:56 浏览数 (2)

转载请以链接形式标明出处: 本文出自:103style的博客


官方文档

创建相关文件夹

代码语言:javascript复制
cd $HOME
mkdir ffmpeg_sources
mkdir ffmpeg_build
mkdir bin

安装依赖安装报错请往下看。

代码语言:javascript复制
sudo apt-get update -qq && sudo apt-get -y install 
autoconf 
automake 
build-essential 
cmake 
git-core 
libass-dev 
libfreetype6-dev 
libsdl2-dev 
libtool 
libva-dev 
libvdpau-dev 
libvorbis-dev 
libxcb1-dev 
libxcb-shm0-dev 
libxcb-xfixes0-dev 
pkg-config 
texinfo 
wget 
zlib1g-dev

如果出现类似下列打印信息:xxx:依赖: xxx 但是它将不会被安装

代码语言:javascript复制
libass-dev : 依赖: libfontconfig1-dev 但是它将不会被安装
            依赖: libharfbuzz-dev 但是它将不会被安装

解决办法:安装 aptitude 工具

代码语言:javascript复制
sudo apt-get install aptitude 

然后修改运行一下指令,

代码语言:javascript复制
sudo apt-get update -qq && sudo aptitude -y install 
autoconf 
automake 
build-essential 
cmake 
git-core 
libass-dev 
libfreetype6-dev 
libsdl2-dev 
libtool 
libva-dev 
libvdpau-dev 
libvorbis-dev 
libxcb1-dev 
libxcb-shm0-dev 
libxcb-xfixes0-dev 
pkg-config 
texinfo 
wget 
zlib1g-dev

如果出现类似下面的报错

代码语言:javascript复制
无法下载 http://dl.google.com/linux/chrome/deb/dists/stable/main/binary-amd64/Packages  
无法发起与 dl.google.com:80 (2404:6800:4005:805::200e) 的连接 - connect (101: 网络不可达)

则使用Ubuntu国内镜像: 镜像地址

代码语言:javascript复制
sudo chmod -R 777 /etc/apt/sources.list
gedit /etc/apt/sources.list

添加上面链接中的镜像地址到最后。

然后注释掉 /etc/apt/sources.list.d/google-chrome.list中的源

代码语言:javascript复制
sudo gedit /etc/apt/sources.list.d/google-chrome.list

修改为以下内容:

代码语言:javascript复制
### THIS FILE IS AUTOMATICALLY CONFIGURED ###
# You may comment out this entry, but any other modifications may be lost.
# deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main

然后再次执行上面的命令。


安装其他依赖

  • NASM
代码语言:javascript复制
cd ~/ffmpeg_sources && 
wget https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.bz2 && 
tar xjvf nasm-2.14.02.tar.bz2 && 
cd nasm-2.14.02 && 
./autogen.sh && 
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && 
make -j4 && 
make install
  • Yasm
代码语言:javascript复制
cd ~/ffmpeg_sources && 
wget -O yasm-1.3.0.tar.gz https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz && 
tar xzvf yasm-1.3.0.tar.gz && 
cd yasm-1.3.0 && 
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && 
make -j4 && 
make install
  • libx264
代码语言:javascript复制
cd ~/ffmpeg_sources && 
git -C x264 pull 2> /dev/null || git clone --depth 1 https://code.videolan.org/videolan/x264.git && 
cd x264 && 
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --enable-pic && 
PATH="$HOME/bin:$PATH" make -j4 && 
make install
  • libx265
代码语言:javascript复制
sudo apt-get install mercurial libnuma-dev && 
cd ~/ffmpeg_sources && 
if cd x265 2> /dev/null; then hg pull && hg update && cd ..; else hg clone https://bitbucket.org/multicoreware/x265; fi && 
cd x265/build/linux && 
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off ../../source && 
PATH="$HOME/bin:$PATH" make -j4 && 
make install
  • libvpx
代码语言:javascript复制
cd ~/ffmpeg_sources && 
git -C libvpx pull 2> /dev/null || git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git && 
cd libvpx && 
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm && 
PATH="$HOME/bin:$PATH" make -j4 && 
make install
  • libfdk-aac
代码语言:javascript复制
cd ~/ffmpeg_sources && 
git -C fdk-aac pull 2> /dev/null || git clone --depth 1 https://github.com/mstorsjo/fdk-aac && 
cd fdk-aac && 
autoreconf -fiv && 
./configure --prefix="$HOME/ffmpeg_build" --disable-shared && 
make -j4 && 
make install
  • libmp3lame
代码语言:javascript复制
cd ~/ffmpeg_sources && 
wget -O lame-3.100.tar.gz https://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz && 
tar xzvf lame-3.100.tar.gz && 
cd lame-3.100 && 
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm && 
PATH="$HOME/bin:$PATH" make -j4 && 
make install
  • libopus
代码语言:javascript复制
cd ~/ffmpeg_sources && 
git -C opus pull 2> /dev/null || git clone --depth 1 https://github.com/xiph/opus.git && 
cd opus && 
./autogen.sh && 
./configure --prefix="$HOME/ffmpeg_build" --disable-shared && 
make -j4 && 
make install
  • libaom
代码语言:javascript复制
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_SHARED=off -DENABLE_NASM=on ../aom && 
PATH="$HOME/bin:$PATH" make -j4 && 
make install

git无法连接的话, 笔者提供了这个 下载地址,或者打开这里 自己点击 Download

将下载的 aom.rar 复制到 之前创建的 ffmpeg_sources 目录,然后依次运行下面的命令:

代码语言:javascript复制
cd $HOME/ffmpeg_sources
sudo apt-get install unrar
rar x aom.rar
mv aom1/ aom/

然后继续执行下面一串命令:

代码语言:javascript复制
mkdir aom_build && 
cd aom_build && 
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off -DENABLE_NASM=on ../aom && 
PATH="$HOME/bin:$PATH" make -j4 && 
make install

下载编译FFmpeg

执行以下命令:

代码语言:javascript复制
cd $HOME/ffmpeg_sources && 
wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && 
tar xjvf ffmpeg-snapshot.tar.bz2 && 
cd ffmpeg && 
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure 
  --prefix="$HOME/ffmpeg_build" 
  --pkg-config-flags="--static" 
  --extra-cflags="-I$HOME/ffmpeg_build/include" 
  --extra-ldflags="-L$HOME/ffmpeg_build/lib" 
  --extra-libs="-lpthread -lm" 
  --bindir="$HOME/bin" 
  --enable-gpl 
  --enable-libaom 
  --enable-libass 
  --enable-libfdk-aac 
  --enable-libfreetype 
  --enable-libmp3lame 
  --enable-libopus 
  --enable-libvorbis 
  --enable-libvpx 
  --enable-libx264 
  --enable-libx265 
  --enable-nonfree && 
PATH="$HOME/bin:$PATH" make -j4 && 
make install && 
hash -r

执行完毕会在 $HOME/bin 目录下生成对应的文件。

如果编译报错提示类似下面的信息:

代码语言:javascript复制
 libass-dev : 依赖: libfontconfig1-dev 但是它将不会被安装
              依赖: libharfbuzz-dev 但是它将不会被安装

则执行以下命令

代码语言:javascript复制
sudo aptitude install libass-dev

如果出现 y / n / q类似的提示时,则按 n 找到一个全部降级的选项方案,然后按y安装。

再次执行FFmpeg的编译命令。

如果还有提示对应的包未安装的话,则继续用sudo aptitude install 安装对应的包。


以上

0 人点赞