0%

Ubuntu下FFmpeg编译与调试

  • 英语:

写在前面

因为项目需要需要了解FFmpeg的编解码细节。一开始是想在Visual Studio上进行的。但对FFmpeg始终会报“无法打开源文件”libavutil/avconfig.h”的错误”,几次尝试,还是没法解决,还是转头在Linux环境下进行尝试。毕竟Windows下的一些编译环境太麻烦了,不知道是哪里的错误。网络上的参考资料比较多,但也没有很顺利的。所以将自己的过程记录下来,以飨读者。

初始环境

  1. 系统环境:Vmware 15下的Mint 18.0(Ubuntu 16.04)

    尝试过使用Ubuntu 20,会遇到找不到guint的问题,于是降级到ubuntu16.使用mint仅使因为其资源占用低,对虚拟机较为友好。

  2. 换源、更新软件到最新。

  3. 安装Visual Studio Code 或Gedit等文本编辑软件。

源码安装FFmpeg

  1. FFmpeg是一个开源工具。因此,可以从源代码手动构建这个程序。一般情况下可以从源安装。仅因需要测试bug时,才推荐使用此方法。查看官方的Ubuntu FFmpeg编译指南

  2. 编译需要的依赖环境

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    sudo 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
  3. 现在,准备一个专用目录来存储源代码和编译后的二进制文件。

    1
    mkdir -pv ~/ffmpeg_source ~/bin
  4. 安装第三方库。FFmpeg官网提供了源码安装选项,不过由于在本机上进行调试,源安装也够用了。

    1
    2
    3
    4
    5
    sudo 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的错误。要解决这个问题,系统中必须存在一个特定的包。您可以安装相关的包,并通过命令修复这个错误
  5. 现在可以开始从源代码构建FFmpeg了。通过执行以下命令获取源代码:

    1
    2
    3
    cd ~/ffmpeg_source
    wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
    tar -xvf ffmpeg-snapshot.tar.bz2
  6. 进入目录,更新PATH环境变量并运行配置脚本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    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-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
  1. 编译、安装FFmpeg
    1
    2
    3
    PATH="$HOME/bin:$PATH" make -j4
    sudo make install
    hash -r
  1. 重新加载环境变量,并查看FFmpeg,及其所支持的编解码器。至此,FFmpeg安装成功。

    1
    2
    3
    4
    source ~/.profile
    ffmpeg -version
    ffmpeg -encoders
    ffmpeg -decoders
  2. 但是,安装好的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
    24
    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" \
    --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

  1. Eclipse需要JDK环境,因此要先安装JDK。但现在Ubuntu一般都自带OpenJDK,所以这一部分可以先跳过,如果无法使用再安装。

  2. 首先,查看系统位数。然后准备下载对应位数的JDK。

    1
    getconf LONG_BIT
  3. 访问JDK的官方下载页面,选择“Linux x64 Compressed Archive”,同意协议,下载(获得下载链接)。

  4. 下载到Home并创建Java目录,解压

    1
    2
    3
    axel -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/
  5. 设置环境变量

    1
    sudo gedit /etc/profile
    1
    2
    3
    4
    export 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
  6. 使环境变量生效

    1
    source /etc/profile
  7. 查看系统目前的环境

    1
    source /etc/profile
  8. 查看系统中已有的JDK版本

    1
    2
    3
    sudo update-alternatives --config java
    sudo update-alternatives --config javac
    sudo update-alternatives --config javaws
  9. 设置系统默认JDK

    1
    2
    sudo 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
  10. 查看java版本,如果查看到与安装的一致,则说明安装成功

    1
    java -version

安装Eclipse

  1. 下载并安装Eclipse
    访问Eclipse的官方下载页面,选择“Eclipse IDE for C/C++ Developers”,Linux版本下载,点击进去,下载(获得下载链接)。


    1
    2
    axel -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 ~/
  2. Eclipse解压之后直接使用,开启Eclipse

    1
    2
    cd ~/eclipse
    ./eclipse
  3. 配置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++→Environment

    1
    2
    C_INCLUDE_PATH=/usr/include
    C_PLUS_INCLUDE_PATH=/usr/include/c++/4.6.3

    其中,/usr/include/c++/4.6.3为C++编译器的所在路径。

建立FFMPEG工程

  1. 建立已有工程
    选择New-> Makefile project from existing code,在弹出对话框中,选择FFmpeg代码目录,设定工程名,FFmpegTest,选择Liuux GCC作为编译器,确定即可。

  2. 编译工程,
    右击工程名称,点击Build project,完成编译过程。

  3. 运行程序。

    为程序添加参数:右击工程名称,Run As →C/C+ Application(双击)→ Debug Configerations中选择Arguments选项卡,选择ffmpeg,在其中添加-i 01.mkv 01.mp4,可以实现格式转换。

    将01.mkv文件拷贝到到FFmpeg目录。
    运行程序,可以实现文件格式转换。
  4. 调试程序
    类似地,为程序添加参数:右击工程名称,Debug As →C/C+ Application(双击)→ Debug Configerations中选择Arguments选项卡,选择ffmpeg_g,在其中添加-i 01.mkv 01.mp4
    点击Debug按钮,即可成功进行逐步调试。

参考
  1. Install and Use FFmpeg on Ubuntu 20.04
  2. FFmpeg之Linux下编译与调试
  3. FFMPEG(1):Linux下FFMPEG编译与调试(Eclipse平台)
-------全文结束  感谢您的阅读-------
  • 本文作者: LuoV
  • 本文链接: https://xian6ge.cn/posts/fe334eec/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!