注:下面的一切都是在 root 模式下进行的,可以不再 root 模式下进行

1. 安装linux的基础环境

基础环境就是编译代码的基础库,Ubuntu联网安装软件很简单,一个语句即可搞定,这里列出语句如下:

# apt-get -y install autoconf automake build-essential libtool libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev

2. 安装依赖库

依赖库分两方面,参考以下网站列出的依赖库信息,本文选择的版本均参考于此网页: FFmpeg依赖库信息

2.1 FFmpeg推荐的依赖开发库(不需要独立安装)
# apt-get -y install libass-dev libfreetype6-dev libmp3lame-dev libtheora-dev libvorbis-dev libopus-dev libx264-dev yasm
2.2 FFmpeg 桌面应用推荐的依赖开发库(不需要独立安装)
# apt-get -y install libva-dev libvdpau-dev libsdl2-dev
2.3 需要独立安装的依赖开发库

首先创建 FFmpeg 代码目录,所有的源代码放在这个目录下

# mkdir ~/ffmpeg_sources
2.3.1 安装 fdk-aac-0.1.5:
# cd ~/ffmpeg_sources
# wget http://downloads.sourceforge.net/opencore-amr/fdk-aac-0.1.5.tar.gz
# tar -zxvf fdk-aac-0.1.5.tar.gz && mv fdk-aac-0.1.5 fdk-aac
# cd fdk-aac
# ./configure --prefix="$HOME/ffmpeg_build" --disable-shared
# make
# make install
# make distclean
2.3.2 安装 libvpx-1.6.1:
# cd ~/ffmpeg_sources
# wget http://storage.googleapis.com/downloads.webmproject.org/releases/webm/libvpx-1.6.1.tar.bz2
# tar -jxvf libvpx-1.6.1.tar.bz2 && mv libvpx-1.6.1 libvpx
# cd libvpx
# PATH="$HOME/bin:$PATH"
# ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests
# PATH="$HOME/bin:$PATH"
# make
# make install
# make distclean
2.3.3 安装 x265-2.4:
# cd ~/ffmpeg_sources
# sudo apt-get install cmake mercurial
# wget https://bitbucket.org/multicoreware/x265/downloads/x265_2.4.tar.gz
# tar -zxvf x265_2.4.tar.gz && mv x265_2.4 x265
# cd x265/build/linux
# PATH="$HOME/bin:$PATH"
# cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source
# make
# make install
# make clean
2.3.4 安装 x264:
# cd ~/ffmpeg_sources
# wget https://download.videolan.org/x264/snapshots/x264-snapshot-20170822-2245-stable.tar.bz2
# tar -jxvf x264-snapshot-20170822-2245-stable.tar.bz2 && mv x264-snapshot-20170822-2245-stable x264
# ./configure --prefix="$HOME/ffmpeg_build" --enable-shared --enable-pic
# make
# make install
# make distclean

3. 编译FFmpeg

# cd ~/ffmpeg_sources
# wget http://ffmpeg.org/releases/ffmpeg-3.3.3.tar.xz
# tar -Jxvf ffmpeg-3.3.3.tar.xz && mv ffmpeg-3.3.3 ffmpeg
# cd ffmpeg
# PATH="$HOME/bin:$PATH"
# export 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
# PATH="$HOME/bin:$PATH"
# make
# make install
# make distclean
# hash -r

FFmpeg 编译之后,即可使用。编译生成的可执行程序在 ~/bin 目录下

注:上面的 ./configure 配置编译后并不能进行调试,需要如下配置.

4. FFmpeg 代码 Debug

刚才的工程可以运行,但不能debug。解决此问题,首先认定一点,生成的可执行程序中,ffmpeg 不包含调试信息,调试信息在 ffmpeg_g 中,debug 要选择 ffmpeg_g。

另外,./config选项也是确定包含调试信息的核心,需要在config中添加:

  • -–enable-debug=3:开启debug调试
  • -–disable-asm:禁用 asm 优化
  • --disable-optimizations:禁用优化,以便调试时按函数顺序执行。
  • –-disable-stripping:禁用剥离可执行程序和共享库,即调试时可以进入到某个函数进行单独调试。

采用以下命令重新config:

PATH="/home/rong/bin:$PATH" PKG_CONFIG_PATH="/home/rong/ffmpeg_build/lib/pkgconfig" ./configure \
--prefix="/home/rong/ffmpeg_build" \
--pkg-config-flags="--static" \
--extra-cflags="-I/home/rong/ffmpeg_build/include" \
--extra-ldflags="-L/home/rong/ffmpeg_build/lib" \
--bindir="/home/rong/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

一些注意事项:

  1. 在使用 ffplay 播放生成 h264 格式的视频时,播放速度会加快,解决方式:不要使用 FFmpeg 转码生成纯 h264 格式的视频,要使用一种容器包含 h264 视频,即生成一种音视频流格式,也就是不要生成纯粹的 h264 码流,而是生成诸如 mkv 等格式的文件。

FFmpeg之Linux下编译与调试的更多相关文章

  1. 在Linux下编译带调试功能的Bochs

    在Linux下使用Bochs参考: http://wangcong.org/articles/bochs.html http://kinglaw05.blog.163.com/blog/static/ ...

  2. Linux下编译与调试

    gcc/g++编译器 对于.c格式的C文件,可以采用gcc或g++编译 对于 .cc..cpp格式的C++文件,应该采用g++进行编译 常用的选项: -c  表示编译源文件 -o  表示输出目标文件 ...

  3. FFmpeg在Linux下编译使用

    文章转自:http://www.cnblogs.com/CoderTian/p/6655568.html 1.FFmpeg编译 1.1.安装yasm 这里我是直接通过ubuntu包安装的,当然也可以通 ...

  4. FFmpeg在Linux下安装编译过程

    转载请把头部出处链接和尾部二维码一起转载,本文出自:http://blog.csdn.net/hejjunlin/article/details/52402759 今天介绍下FFmpeg在Linux下 ...

  5. linux下编译ffmpeg 引入外部库x264

    Found no assembler Minimum version is nasm-2.13 If you really want to compile without asm, configure ...

  6. FFmpeg在Linux下搭建 ***

    今天介绍下FFmpeg在Linux下安装编译过程,总体过程比较顺利,就是在ffmpeg等的时间稍长点,仅当记录. 关于FFmpeg FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采 ...

  7. linux下编译qt5.6.0静态库——configure配置

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  8. linux下编译qt5.6.0静态库——configure配置(超详细,有每一个模块的说明)(乌合之众)

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  9. [转载]linux下编译php中configure参数具体含义

    编译N次了   原来这么回事 原文地址:linux下编译php中configure参数具体含义作者:捷心特 php编译参数的含义 ./configure –prefix=/usr/local/php ...

随机推荐

  1. Python 序列操作符与函数(字符串)

    Python序列包括:元组.列表.字符串. 1.1 序列共同支持的函数: 函数 功能 说明 cmp(seq1,seq2) 比较序列大小 从左到右依次比较,直到比较出大小 len(seq1) 获取序列长 ...

  2. 远程操控批量复制应用(scp/pssh/pscp.pssh/rsync/pslurp)

    scp命令: scp [options] SRC... DEST/两种方式: scp [options] [user@]host:/sourcefile /destpath scp [options] ...

  3. 008.建立主从表(sql实例)

    CREATE TABLE info(snumb int primary key identity(1,1),sname varchar(20),sex bit,birthday datetime ch ...

  4. 正则表达式 re模块的使用

    一 正则表达式 首先, 我们在网页上进行行注册或者登陆的时候经常能看到一些格式上的错误提示. 比如:你在注册百度账号的时候  https://passport.baidu.com/v2/?reg&am ...

  5. [CodeForces 160A] Twins

    题目链接:http://codeforces.com/problemset/problem/160/A 注意排序是从大到小排,不要上来就sort导致从小到大排,细节水题. AC代码: #include ...

  6. Matlab---读取 .txt文件

    Matlab读取 .txt文件 这里提供两种方法:1,load()函数.2,importdata()函数. ---------------------------------------------- ...

  7. [TJOI2019]唱、跳、rap和篮球——容斥原理+生成函数

    先附一组sd图 然后放上原题链接 注意,队伍不同指的是喜好不同,不是人不同 先想到\(DP\),然后你会发现并没有什么优秀的状态设计,然后我们考虑容斥 设\(lim\)表示选的癌坤组数的上限,\(f_ ...

  8. 【Linux】解决用vi修改文件,保存文件时,提示“readonly option is set”

    当在终端执行sudo命令时,系统提示“hadoop is not in the sudoers file”: 其实就是没有权限进行sudo,解决方法如下(这里假设用户名是cuser): 1.切换到超级 ...

  9. 1.打开windows中功能的快捷方式

    1.打开组策略 命令:gpedit.msc 2.打开注册表 命令:regedit 3.快速打开本地安全组策略 命令:secpol.msc 4.打开服务 命令:services.msc 5.系统退域的时 ...

  10. 在laravel5.8中集成swoole组件----用协程实现的服务端和客户端(二)---静态文件如何部署

    目前,较为成熟的技术是采用laravelS组件,注意和laravel 区别laravelS多了一个大写的S,由于laravelS默认监听5200端口,所以laravel项目要做一些调整 例如: 静态文 ...