参考文章
https://blog.csdn.net/leixiaohua1020/article/details/47008825 雷霄骅
1. 编译环境
-
NDK:android-ndk-r15c
-
FFMPEG: ffmpeg-3.4.4
-
Android P: 21(该环境限制最少21)
-
Ubuntu:18.0.1
-
部分安装库
sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev \ libsdl2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev \ libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev
2. 下载ffmpeg到本地,配置编译脚本
-
下载到本地,官网:http://ffmpeg.org/
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg cd ffmpeg
-
修改configure文件,方便自动导出熟悉的文件名称
#修改前,方便.so库自动生成我们熟知的命名 #SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)' #SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)' #LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"' #SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)' #SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)' #修改后, SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)' LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"' SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' SLIB_INSTALL_LINKS='$(SLIBNAME)'
-
arm编译脚本如下,替换下面编译平台NDK目录成你自己的
#!/bin/bash make clean export NDK=/home/felix/wd500g/android-sdk/android-ndk-r14b export SYSROOT=$NDK/platforms/android-21/arch-arm/ export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 export CPU=arm export ARCH=arm export PREFIX=$(pwd)/android/$CPU export ADDI_CFLAGS="-marm" ./configure --target-os=linux \ --prefix=$PREFIX \ --enable-shared \ --disable-static \ --disable-x86asm \ --arch=arm \ --disable-doc \ --disable-symver \ --enable-gpl \ --disable-ffplay \ --disable-ffprobe \ --disable-ffserver \ --disable-symver \ --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ --enable-cross-compile \ --sysroot=$SYSROOT \ --extra-cflags="-Os -fpic $ADDI_CFLAGS" \ --extra-ldflags="$ADDI_CFLAGS" \ $ADDITIONAL_CONFIGURE_FLAG make clean make make install
3. 问题修复(限于该环境配置):
- 将libavcodec/opus_pvq.c文件的变量B0改成b0
- 将libavcodec/hevc_mvs.c文件的变量B0改成b0,xB0改成xb0,yB0改成yb0
- 将libavcodec/aaccoder.c文件B0变量替换成b0
4. 如何裁切
-
推荐一篇很好的翻译文章:ffmpeg configure配置选项
-
通过 --help,可以查看当前配置可以添加或者删除的功能
/configure --help
如下:
Configuration options:
--disable-static do not build static libraries [no]
--enable-shared build shared libraries [no]
--enable-small optimize for size instead of speed
--disable-runtime-cpudetect disable detecting CPU capabilities at runtime (smaller binary)
--enable-gray enable full grayscale support (slower color)
--disable-swscale-alpha disable alpha channel support in swscale
--disable-all disable building components, libraries and programs
--disable-autodetect disable automatically detected external libraries [no]
Program options:
--disable-programs do not build command line programs
--disable-ffmpeg disable ffmpeg build
--disable-ffplay disable ffplay build
--disable-ffprobe disable ffprobe build
Documentation options:
--disable-doc do not build documentation
--disable-htmlpages do not build HTML documentation pages
--disable-manpages do not build man documentation pages
--disable-podpages do not build POD documentation pages
--disable-txtpages do not build text documentation pages
Component options:
--disable-avdevice disable libavdevice build
--disable-avcodec disable libavcodec build
--disable-avformat disable libavformat build
--disable-swresample disable libswresample build
--disable-swscale disable libswscale build
--disable-postproc disable libpostproc build
--disable-avfilter disable libavfilter build
--enable-avresample enable libavresample build (deprecated) [no]
--disable-pthreads disable pthreads [autodetect]
--disable-w32threads disable Win32 threads [autodetect]
--disable-os2threads disable OS/2 threads [autodetect]
--disable-network disable network support [no]
--disable-dct disable DCT code
--disable-dwt disable DWT code
--disable-error-resilience disable error resilience code
--disable-lsp disable LSP code
--disable-lzo disable LZO decoder code
--disable-mdct disable MDCT code
--disable-rdft disable RDFT code
--disable-fft disable FFT code
--disable-faan disable floating point AAN (I)DCT code
--disable-pixelutils disable pixel utils in libavutil
5. ffmpeg配置不同扩展功能
因为功能分离的缘故,在使用ffmpeg编译集成不同功能时需要下载关联扩展库,如libmp3lame
- 以libmp3lame为例:(不安装报错:ERROR: libmp3lame >= 3.98.3 not found)
前往MP3lame官网下载:http://lame.sourceforge.net/
安装:
tar zxf lame-3.100.tar.gz
cd lame-3.100
./configure
make
sudo make install
-
其余的部分扩展功能可以参考官方给出:https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu#RevertingChangesMadebyThisGuide
An assembler used by some libraries. cd ~/ffmpeg_sources && \ wget https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.bz2 && \ tar xjvf nasm-2.13.03.tar.bz2 && \ cd nasm-2.13.03 && \ ./autogen.sh && \ PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \ make && \ make install Yasm An assembler used by some libraries. If your repository provides yasm version ≥ 1.2.0 then you can install that instead of compiling: sudo apt-get install yasm Otherwise you can compile: 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 && \ make install libx264 H.264 video encoder. See the H.264 Encoding Guide for more information and usage examples. Requires ffmpeg to be configured with --enable-gpl --enable-libx264. If your repository provides libx264-dev version ≥ 118 then you can install that instead of compiling: sudo apt-get install libx264-dev Otherwise you can compile: cd ~/ffmpeg_sources && \ git -C x264 pull 2> /dev/null || git clone --depth 1 https://git.videolan.org/git/x264 && \ 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 && \ make install libx265 H.265/HEVC video encoder. See the H.265 Encoding Guide for more information and usage examples. If your repository provides libx265-dev version ≥ 68 then you can install that instead of compiling: sudo apt-get install libx265-dev libnuma-dev Otherwise you can compile: sudo apt-get install mercurial libnuma-dev && \ cd ~/ffmpeg_sources && \ if cd x265 2> /dev/null; then hg pull && hg update; 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 && \ make install libvpx VP8/VP9 video encoder/decoder. See the VP9 Video Encoding Guide for more information and usage examples. Requires ffmpeg to be configured with --enable-libvpx. If your repository provides libvpx-dev version ≥ 1.4.0 then you can install that instead of compiling: sudo apt-get install libvpx-dev Otherwise you can compile: 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 && \ make install libfdk-aac AAC audio encoder. See the AAC Audio Encoding Guide for more information and usage examples. Requires ffmpeg to be configured with --enable-libfdk-aac (and --enable-nonfree if you also included --enable-gpl). If your repository provides libfdk-aac-dev then you can install that instead of compiling: sudo apt-get install libfdk-aac-dev Otherwise you can compile: 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 && \ make install libmp3lame MP3 audio encoder. Requires ffmpeg to be configured with --enable-libmp3lame. If your repository provides libmp3lame-dev version ≥ 3.98.3 then you can install that instead of compiling: sudo apt-get install libmp3lame-dev Otherwise you can compile: 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 && \ make install libopus Opus audio decoder and encoder. Requires ffmpeg to be configured with --enable-libopus. If your repository provides libopus-dev version ≥ 1.1 then you can install that instead of compiling: sudo apt-get install libopus-dev Otherwise you can compile: 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 && \ make install libaom AV1 video encoder/decoder: cd ~/ffmpeg_sources && \ git -C aom pull 2> /dev/null || git clone --depth 1 https://aomedia.googlesource.com/aom && \ 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 && \ make install FFmpeg cd ~/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 && \ make install && \ hash -r Now re-login or run the following command for your current shell session to recognize the new ffmpeg location: source ~/.profile Compilation and installation are now complete and ffmpeg (also ffplay, ffprobe, lame, x264, & x265) should now be ready to use. The rest of this guide shows how to update or remove FFmpeg.