1.编译说明
- 本次编译会在你的用户根目录下生成三个文件夹:ffmpeg_sources、ffmpeg_build、bin,其中ffmpeg_source为源代码目录,ffmpeg_build目录为项目编译目录,编译产出的库文件在这里,bin文件夹为编译产出的可执行文件存放目录。
- 本次编译产出的ffmpeg库为静态库,编译完成后,位于ffmpeg_build/lib目录下。
2.编译环境
- 阿里云ecs服务器
- 操作系统:centos7.6
如果是新装的系统,并新建的账号,需要为新建的账号赋予写权限,将账号加入到sudoers文件。
同时在~目录下创建三个目录:
ffmpeg_sources、ffmpeg_build、bin
3.编译
3.1安装依赖
命令行:
sudo yum install autoconf automake bzip2 bzip2-devel cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel
运行命令
到这里依赖就安装成功了,接下来开始安装ffmpeg的依赖库。
3.2 nasm安装
命令行:
cd ~/ffmpeg_sources
curl -O -L 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
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
make
make install
3.3 yasm安装
cd ~/ffmpeg_sources
curl -O -L 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
make install
3.4 libx264安装
cd ~/ffmpeg_sources
git clone --depth 1 https://code.videolan.org/videolan/x264.git
cd x264
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static
make
make install
3.5 libx265安装
cd ~/ffmpeg_sources
hg clone https://bitbucket.org/multicoreware/x265
cd ~/ffmpeg_sources/x265/build/linux
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source
make
make install
下载、编译略慢。
3.6 libfdk_aac安装
cd ~/ffmpeg_sources
git clone --depth 1 https://github.com/mstorsjo/fdk-aac
cd fdk-aac
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install
3.7 libmp3lame安装
cd ~/ffmpeg_sources
curl -O -L 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
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm
make
make install
3.8 libopus安装
cd ~/ffmpeg_sources
curl -O -L https://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz
tar xzvf opus-1.3.1.tar.gz
cd opus-1.3.1
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install
3.9 libvpx安装
cd ~/ffmpeg_sources
git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git
cd libvpx
./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm
make
make install
命令行中好像无法下载源代码。网上找一下吧,不能插入附件,也不能把握下载的放上来。
3.10 ffmpeg编译安装
由于在centos上libx265没有编译通过,因此在ffmpeg编译配置上取消了编译x265库。
cd ~/ffmpeg_sources
curl -O -L 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 \
--extra-libs=-lm \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-libfdk_aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libvpx \
--enable-libx264 \
--enable-nonfree
make
make install
hash -d ffmpeg
编译完成后,会生成各种库:
如果要支持硬件加速,即通过显卡对视频编解码/转换等进行加速,配置命令需要作如下改动(前提:安装cuda开发套件以及ffnvcodec,可以参考这篇文档:点击跳转)
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-cflags=-I/usr/local/cuda/include \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
--extra-ldflags=-L/usr/local/cuda/lib64 \
--extra-libs="-lpthread -lm" \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-gnutls \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libvpx \
--enable-libx264 \
--enable-shared \
--enable-cuda-sdk \
--enable-cuvid \
--enable-nvenc \
--enable-libnpp \
--enable-nonfree && \
PATH="$HOME/bin:$PATH" make -j10 && \
make install && \
hash -r
编译完成后,最好执行以下命令:export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
以能够链接最新安装的cuda
4.验证
ffmpeg库编译完成后,写了示例代码验证库是否可用。
代码在这里:https://github.com/liupengh3c/richffmpeg,代码下载后,进入build目录,执行:
cmake ..
make
下载后,要修改一下根目录下的CMakeLists.txt,将lib库的目录修改成自己的库目录。要修改的代码在L12。
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (richffmpeg)
#去哪里找头文件 相当于-I(i的大写字母)参数
include_directories(${PROJECT_SOURCE_DIR}/include)
# 链接第三方库
# 去哪里找库文件 .so相当于gcc 中的-L参数
set(LINK_DIR /home/liupeng/ffmpeg_build/lib)
link_directories(${LINK_DIR})
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 添加 lib 子目录
add_subdirectory(unpacker)
# 指定生成目标
add_executable(richffmpeg ${DIR_SRCS})
target_link_libraries(richffmpeg avdevice avfilter postproc avformat avcodec avutil stdc++ rt x264 dl vpx pthread opus mp3lame fdk-aac freetype z swresample swscale avutil m bz2 unpacker)
#target_link_libraries(richffmpeg avdevice avfilter postproc avformat avcodec avutil stdc++ X11 xcb-shm xcb-xfixes xcb-render xcb-shape xcb Xau Xdmcp asound pulse-simple pulse Xext rt x264 dl vpx pthread vorbisenc vorbis ogg opus mp3lame fdk-aac ass harfbuzz fontconfig fribidi expat freetype x265 numa z swresample swscale avutil m vdpau va va-drm va-x11 unpacker)
编译完成后,通过命令行:./richffmpeg standar test.mp4,从mp4文件中解封装出h264编码的图像数据、aac编码的音频数据。
x265库没有编译成功,因此ffmpeg中也没有编译x265。
参考:https://trac.ffmpeg.org/wiki/CompilationGuide/Centos
致敬雷神:https://blog.csdn.net/leixiaohua1020/article/details/39767055