Ubuntu 下 FFmpeg 编译与调试
初始环境
系统环境:Vmware 15 下的 Mint 18.0(Ubuntu 16.04)
尝试过使用 Ubuntu 20,会遇到找不到 guint 的问题,于是降级到 ubuntu16. 使用 mint 仅使因为其资源占用低,对虚拟机较为友好。
换源、更新软件到最新。
安装 Visual Studio Code 或 Gedit 等文本编辑软件。
源码安装 FFmpeg
FFmpeg 是一个开源工具。因此,可以从源代码手动构建这个程序。一般情况下可以从源安装。仅因需要测试 bug 时,才推荐使用此方法。查看官方的 Ubuntu FFmpeg 编译指南。
编译需要的依赖环境
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24sudo apt-get update -qq && sudo apt-get -y install \
autoconf \
automake \
build-essential \
cmake \
git-core \
libass-dev \
libfreetype6-dev \
libgnutls28-dev \
libsdl2-dev \
libtool \
libva-dev \
libvdpau-dev \
libvorbis-dev \
libxcb1-dev \
libxcb-shm0-dev \
libxcb-xfixes0-dev \
meson \
ninja-build \
pkg-config \
texinfo \
wget \
yasm \
zlib1g-dev现在,准备一个专用目录来存储源代码和编译后的二进制文件。
1
mkdir -pv ~/ffmpeg_source ~/bin
安装第三方库。FFmpeg 官网提供了源码安装选项,不过由于在本机上进行调试,源安装也够用了。
1
2
3
4
5sudo apt install -y nasm //NASM:一些库所依赖的汇编程序
sudo apt install -y libx264-dev libx265-dev libnuma-dev libvpx-dev //H.264, H.265视频编码器,VP8/VP9 视频编解码器
sudo apt install -y libfdk-aac-dev libmp3lame-dev libopus-dev //ACC、MP3音频编码器,Opus音频编解码器
// sudo apt install -y libaom-dev //AV1视频编解码器,不稳定,后面编译不通过,放弃。
sudo apt install -y libunistring-dev // 可能会遇到使用pkg-config时找不到gnutls的错误。要解决这个问题,系统中必须存在一个特定的包。您可以安装相关的包,并通过命令修复这个错误现在可以开始从源代码构建 FFmpeg 了。通过执行以下命令获取源代码:
1
2
3cd ~/ffmpeg_source
wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar -xvf ffmpeg-snapshot.tar.bz2进入目录,更新 PATH 环境变量并运行配置脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23cd 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-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-nonfree编译、安装 FFmpeg
1
2
3PATH="$HOME/bin:$PATH" make -j4
sudo make install
hash -r重新加载环境变量,并查看 FFmpeg,及其所支持的编解码器。至此,FFmpeg 安装成功。
1
2
3
4source ~/.profile
ffmpeg -version
ffmpeg -encoders
ffmpeg -decoders但是,安装好的 FFmpeg 可以正常使用,但不支持调试。需要在 FFmpeg 目录下,重新 config
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24cd 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" \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libtheora \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree \
--enable-pthreads \
--enable-debug=3 \
--disable-optimizations \
--disable-asm \
--disable-stripping
安装 JDK
Eclipse 需要 JDK 环境,因此要先安装 JDK。但现在 Ubuntu 一般都自带 OpenJDK,所以这一部分可以先跳过,如果无法使用再安装。
首先,查看系统位数。然后准备下载对应位数的 JDK。
1
getconf LONG_BIT
访问 JDK 的官方下载页面,选择 “Linux x64 Compressed Archive”,同意协议,下载(获得下载链接)。
下载到 Home 并创建 Java 目录,解压
1
2
3axel -n8 https://download.oracle.com/otn-pub/java/jdk/15.0.2+7/0d1cfde4252546c6931946de8db48ee2/jdk-15.0.2_linux-x64_bin.tar.gz?AuthParam=1612765351_4ae3e59c9574a27f8e8903853c439d1e
mkdir ~/Java
tar -zxvf jdk-15.0.2_linux-x64_bin.tar.gz -C ~/Java/设置环境变量
1
sudo gedit /etc/profile
1
2
3
4export JAVA_HOME=/home/luov/Java/jdk-15.0.2/
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH使环境变量生效
1
source /etc/profile
查看系统目前的环境
1
source /etc/profile
查看系统中已有的 JDK 版本
1
2
3sudo update-alternatives --config java
sudo update-alternatives --config javac
sudo update-alternatives --config javaws设置系统默认 JDK
1
2sudo update-alternatives --install /usr/bin/java java /home/xxx/Java/jdk1.8.0_131/bin/java 2000
sudo update-alternatives --install /usr/bin/javac javac /home/xxx/Java/jdk1.8.0_131/bin/javac 2000查看 java 版本,如果查看到与安装的一致,则说明安装成功
1
java -version
安装 Eclipse
下载并安装 Eclipse
访问 Eclipse 的官方下载页面,选择 “Eclipse IDE for C/C++ Developers”,Linux 版本下载,点击进去,下载(获得下载链接)。
1
2axel -n 8 https://ftp.yz.yamagata-u.ac.jp/pub/eclipse//technology/epp/downloads/release/2020-12/R/eclipse-cpp-2020-12-R-linux-gtk-x86_64.tar.gz
tar -zxvf eclipse-cpp-2020-12-R-linux-gtk-x86_64.tar.gz && mv eclipse ~/Eclipse 解压之后直接使用,开启 Eclipse
1
2cd ~/eclipse
./eclipse配置 Eclipse(可跳过)
因为安装的是 Eclipse for C/C++,所以 CDT 以及 CPP 运行库已经默认安装好了,无需再次配置,这一步可以跳过。
在 Eclipse 菜单中选择 help → install new software,点击 “Add…” 按钮,添加下面的软件源地址,并命名为 CDT。可以在官方网站上获得对应的版本链接
选好后确定,即可看到要求我们选择要安装的软件。其实安装 CDT Main Features 和 CDT Optional Features 中的 GCC 就可以了,一些选项还依赖于其它可能没有安装好的库,装了也不会起作用。不过在这里浪费时间没必要,都选了就得了~
然后选择 “Next → Next → Finsh” 就开始安装了,安装结束后,会弹出如下要求重启 Eclipse 提示框。点击 Yes 重启 Eclipse,这样就安装成功了。重启之后可以新建 C++ Project 了。
另外需要注意的是我们在编译 C++ 的时候要注意配置编译器的路径和 C++ 运行库的路径,具体方法是打开 windows→preference->C/C++→Environment1
2C_INCLUDE_PATH=/usr/include
C_PLUS_INCLUDE_PATH=/usr/include/c++/4.6.3其中,/usr/include/c++/4.6.3 为 C++ 编译器的所在路径。
建立 FFMPEG 工程
建立已有工程
选择 New-> Makefile project from existing code,在弹出对话框中,选择 FFmpeg 代码目录,设定工程名,FFmpegTest,选择 Liuux GCC 作为编译器,确定即可。编译工程,
右击工程名称,点击 Build project,完成编译过程。运行程序。
为程序添加参数:右击工程名称,Run As →C/C+ Application(双击)→ Debug Configerations 中选择 Arguments 选项卡,选择 ffmpeg,在其中添加
-i 01.mkv 01.mp4
,可以实现格式转换。
将 01.mkv 文件拷贝到到 FFmpeg 目录。
运行程序,可以实现文件格式转换。调试程序
类似地,为程序添加参数:右击工程名称,Debug As →C/C+ Application(双击)→ Debug Configerations 中选择 Arguments 选项卡,选择 ffmpeg_g,在其中添加-i 01.mkv 01.mp4
。
点击 Debug 按钮,即可成功进行逐步调试。