1. 安裝編譯環(huán)境
sudo apt-get install yasm
2. 下載源碼
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
3. 配置選項
通過configure來配置需要編譯的ffmpeg庫
./configure xxx
3.1 armv7a庫配置項
- 配置項
./configure --target-os=android \
--prefix=$FF_BUILD_OUT \
--enable-runtime-cpudetect \
--disable-stripping \
--disable-asm \
--arch=arm \
--enable-cross-compile \
--cc=$FF_PREBUILT/bin/arm-linux-androideabi-gcc \
--cross-prefix=$FF_PREBUILT/bin/arm-linux-androideabi- \
--nm=$FF_PREBUILT/bin/arm-linux-androideabi-nm \
--sysroot=$FF_PLATFORM \
--enable-gpl --enable-static --disable-shared --enable-nonfree --enable-version3 --enable-small \
--enable-zlib --disable-ffprobe --disable-ffplay --disable-ffmpeg --disable-ffserver --disable-debug \
--extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a"
- 執(zhí)行編譯命令
make
make install
3.2 高級選項配置(可選CPU)
下面提供的腳本可以正常編譯arm內(nèi)核的格郁,X86內(nèi)核可以正常編譯靜態(tài)庫,生成動態(tài)庫時有問題
將以下三個腳本存放到build文件夾独悴,并與ffmpeg源碼同級目錄放置
進入到build目錄執(zhí)行以下命令編譯即可例书,加上debug將不會減小庫的大小,并且會打開log記錄刻炒,關(guān)閉優(yōu)化等
build_ffmpeg.sh armv5|armv7a|arm64|x86|x86_64 debug
build_ffmpeg.sh all32 debug
build_ffmpeg.sh arm debug
build_ffmpeg.sh all debug
build_ffmpeg.sh clear
build_ffmpeg.sh check
build_ffmpeg.sh决采,用于選擇編譯類型或者清除編譯數(shù)據(jù)
#! /usr/bin/env bash
FF_ARCH=$1
FF_DEBUG=$2
FF_BUILD_PATH=`pwd`
FF_ACT_ARCHS_32="armv5 armv7a x86"
FF_ACT_ARCHS_ARM="armv5 armv7a arm64"
FF_ACT_ARCHS_64="armv5 armv7a arm64 x86 x86_64"
FF_ACT_ARCHS_ALL=$FF_ACT_ARCHS_64
echo_archs() {
echo "===================="
echo "[*] check archs"
echo "FF_ALL_ARCHS = $FF_ACT_ARCHS_ALL"
echo "FF_ACT_ARCHS = $*"
echo "===================="
echo ""
}
echo_usage() {
echo "Usage:"
echo " build_ffmpeg.sh armv5|armv7a|arm64|x86|x86_64"
echo " build_ffmpeg.sh all32"
echo " build_ffmpeg.sh arm"
echo " build_ffmpeg.sh all"
echo " build_ffmpeg.sh clear"
echo " build_ffmpeg.sh check"
echo ""
}
echo_exit() {
echo ""
echo "--------------------"
echo "[*] Finished"
echo "--------------------"
}
#----------
case "$FF_ARCH" in
"")
echo_archs armv7a
sh $FF_BUILD_PATH/do_build_ffmpeg.sh armv7a
echo_exit
;;
armv5|armv7a|arm64|x86|x86_64)
echo_archs $FF_ARCH $FF_DEBUG
sh $FF_BUILD_PATH/do_build_ffmpeg.sh $FF_ARCH $FF_DEBUG
echo_exit
;;
arm)
echo_archs $FF_ACT_ARCHS_ARM
for ARCH in $FF_ACT_ARCHS_ARM
do
sh $FF_BUILD_PATH/do_build_ffmpeg.sh $ARCH $FF_DEBUG
done
echo_exit
;;
all32)
echo_archs $FF_ACT_ARCHS_32
for ARCH in $FF_ACT_ARCHS_32
do
sh $FF_BUILD_PATH/do_build_ffmpeg.sh $ARCH $FF_DEBUG
done
echo_exit
;;
all|all64)
echo_archs $FF_ACT_ARCHS_ALL
for ARCH in $FF_ACT_ARCHS_ALL
do
sh $FF_BUILD_PATH/do_build_ffmpeg.sh $ARCH $FF_DEBUG
done
echo_exit
;;
clear)
echo_archs $FF_ACT_ARCHS_ALL
echo "clear build file/folder"
for ARCH in $FF_ACT_ARCHS_ALL
do
sh $FF_BUILD_PATH/do_build_ffmpeg.sh $ARCH clear
done
echo_exit
;;
check)
echo_archs $FF_ACT_ARCHS_ALL
;;
*)
echo_usage
;;
esac
do_build_ffmpeg.sh實際編譯腳本
#!/user/bin/bash
FF_ARCH=$1
FF_DEBUG=$2
FF_BUILD_PATH=`pwd`
FF_OUT=$FF_BUILD_PATH/../out
FF_SOURCE=$FF_BUILD_PATH/../ffmpeg
TMPDIR=$FF_OUT
NDK=$ANDROID_NDK
FF_PLATFORM=
FF_PREBUILT=
FF_BUILD_OUT=
FF_LIBS_OUT=
FF_INCLUDE_OUT=
FF_CFLAGS="-O3 -Wall -pipe -std=c99 -ffast-math -fstrict-aliasing -Werror=strict-aliasing -Wno-psabi -Wa,--noexecstack -DANDROID -DNDEBUG"
#FF_CFLAGS="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a"
FF_COMMON_FLAGS=
FF_CONFIG=
FF_EXTRA_CFLAGS=
FF_EXTRA_LDFLAGS=
FF_CONFIG=
FF_TOOLCHAIN_NAME=
FF_CROSS_PREFIX=
FF_BUILD_NAME=
FF_PLATFORM_SUB_DIRS=
FF_GCC_32_VER=4.9
FF_GCC_64_VER=4.9
FF_GCC_VER=
FF_ANDROID_PLATFORM=android-21
if [ "$FF_ARCH" = "armv7a" ]; then
FF_BUILD_NAME="armeabi-v7a"
FF_CROSS_PREFIX=arm-linux-androideabi
FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_32_VER}
FF_CONFIG="$FF_CONFIG --arch=arm --cpu=cortex-a8"
FF_CONFIG="$FF_CONFIG --enable-neon"
FF_CONFIG="$FF_CONFIG --enable-thumb"
FF_EXTRA_CFLAGS="$FF_CFLAGS -march=armv7-a -mcpu=cortex-a8 -mfpu=vfpv3-d16 -mfloat-abi=softfp -mthumb"
FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS -Wl,--fix-cortex-a8"
FF_PLATFORM_SUB_DIRS="arm"
FF_GCC_VER=$FF_GCC_32_VER
elif [ "$FF_ARCH" = "arm64" ]; then
FF_ANDROID_PLATFORM=android-21
FF_BUILD_NAME="arm64-v8a"
FF_CROSS_PREFIX=aarch64-linux-android
FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_64_VER}
FF_CONFIG="$FF_CONFIG --arch=aarch64 --enable-yasm"
FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS"
FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS"
FF_PLATFORM_SUB_DIRS="arm64"
FF_GCC_VER=$FF_GCC_64_VER
elif [ "$FF_ARCH" = "armv5" ]; then
FF_BUILD_NAME="armeabi"
FF_CROSS_PREFIX=arm-linux-androideabi
FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_32_VER}
FF_CONFIG="$FF_CONFIG --arch=arm"
FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS -march=armv5te -mtune=arm9tdmi -msoft-float"
FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS"
FF_PLATFORM_SUB_DIRS="arm"
FF_GCC_VER=$FF_GCC_32_VER
elif [ "$FF_ARCH" = "x86" ]; then
FF_BUILD_NAME="x86"
FF_CROSS_PREFIX=i686-linux-android
FF_TOOLCHAIN_NAME=x86-${FF_GCC_32_VER}
FF_CONFIG="$FF_CONFIG --arch=x86 --cpu=i686 --enable-x86asm"
FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS -march=atom -msse3 -ffast-math -mfpmath=sse"
FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS"
FF_PLATFORM_SUB_DIRS="x86"
FF_GCC_VER=$FF_GCC_32_VER
elif [ "$FF_ARCH" = "x86_64" ]; then
FF_ANDROID_PLATFORM=android-21
FF_BUILD_NAME="x86_64"
FF_CROSS_PREFIX=x86_64-linux-android
FF_TOOLCHAIN_NAME=x86_64-${FF_GCC_64_VER}
FF_CONFIG="$FF_CONFIG --arch=x86_64 --enable-x86asm"
FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS"
FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS"
FF_PLATFORM_SUB_DIRS="x86_64"
FF_GCC_VER=$FF_GCC_64_VER
else
echo "unknown architecture $FF_ARCH";
exit 1
fi
FF_PLATFORM=$NDK/platforms/$FF_ANDROID_PLATFORM/arch-$FF_PLATFORM_SUB_DIRS
FF_PREBUILT=$NDK/toolchains/$FF_TOOLCHAIN_NAME/prebuilt/linux-x86_64
FF_BUILD_OUT=$FF_OUT/build/$FF_BUILD_NAME
FF_LIBS_OUT=$FF_OUT/libs/$FF_BUILD_NAME
FF_INCLUDE_OUT=$FF_OUT/include
#FF_CONFIG="$FF_CONFIG --arch=arm"
FF_CONFIG="$FF_CONFIG --target-os=android"
FF_CONFIG="$FF_CONFIG --prefix=$FF_BUILD_OUT"
FF_CONFIG="$FF_CONFIG --enable-runtime-cpudetect"
FF_CONFIG="$FF_CONFIG --disable-stripping"
FF_CONFIG="$FF_CONFIG --disable-asm"
FF_CONFIG="$FF_CONFIG --enable-cross-compile"
FF_CONFIG="$FF_CONFIG --cc=$FF_PREBUILT/bin/${FF_CROSS_PREFIX}-gcc"
FF_CONFIG="$FF_CONFIG --nm=$FF_PREBUILT/bin/${FF_CROSS_PREFIX}-nm"
FF_CONFIG="$FF_CONFIG --cross-prefix=$FF_PREBUILT/bin/${FF_CROSS_PREFIX}-"
FF_CONFIG="$FF_CONFIG --sysroot=$FF_PLATFORM"
FF_CONFIG="$FF_CONFIG --enable-static --disable-shared"
FF_CONFIG="$FF_CONFIG --enable-gpl --enable-nonfree --enable-version3"
FF_CONFIG="$FF_CONFIG --enable-zlib"
FF_CONFIG="$FF_CONFIG --disable-debug"
FF_CONFIG="$FF_CONFIG --incdir=$FF_INCLUDE_OUT"
case "$FF_DEBUG" in
debug)
FF_CONFIG="$FF_CONFIG --disable-optimizations"
FF_CONFIG="$FF_CONFIG --enable-debug"
FF_CONFIG="$FF_CONFIG --disable-small"
;;
*)
FF_CONFIG="$FF_CONFIG --enable-optimizations"
FF_CONFIG="$FF_CONFIG --disable-debug"
FF_CONFIG="$FF_CONFIG --enable-small"
;;
esac
. $FF_BUILD_PATH/ff_common_config.sh
#echo "------------------------"
#echo "[*] Define build path"
#echo "[*] FF_BUILD_PATH = $FF_BUILD_PATH"
#echo "[*] TMPDIR = $TMPDIR"
#echo "[*] NDK = $NDK"
#echo "[*] FF_PLATFORM = $FF_PLATFORM"
#echo "[*] FF-PREBUILT = $FF_PREBUILT"
#echo "[*] FF_BUILD_OUT = $FF_BUILD_OUT"
#echo "[*] FF_LIBS_OUT = $FF_LIBS_OUT"
#echo "[*] FF_CONFIG:"
#echo "$FF_CONFIG"
#echo "[*] FF_COMMON_FLAGS:"
#echo "$FF_COMMON_FLAGS"
#echo "[*] FF_EXTRA_CFLAGS:"
#echo "$FF_EXTRA_CFLAGS"
#echo "[*] FF_EXTRA_LDFLAGS:"
#echo "$FF_EXTRA_LDFLAGS"
#echo "------------------------"
create_folder(){
mkdir -p $TMPDIR
mkdir -p $FF_BUILD_OUT
mkdir -p $FF_LIBS_OUT
}
config(){
./configure --target-os=android \
--prefix=$FF_BUILD_OUT \
--enable-runtime-cpudetect \
--disable-stripping \
--disable-asm \
--arch=arm \
--enable-cross-compile \
--cc=$FF_PREBUILT/bin/arm-linux-androideabi-gcc \
--cross-prefix=$FF_PREBUILT/bin/arm-linux-androideabi- \
--nm=$FF_PREBUILT/bin/arm-linux-androideabi-nm \
--sysroot=$FF_PLATFORM \
--enable-gpl --enable-static --disable-shared --enable-nonfree --enable-version3 --enable-small \
--enable-zlib --disable-ffprobe --disable-ffplay --disable-ffmpeg --disable-ffserver --disable-debug \
--extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a"
}
config_1(){
./configure $FF_CONFIG \
$FF_COMMON_FLAGS \
--extra-cflags="$FF_EXTRA_CFLAGS" \
--extra-ldflags="$FF_EXTRA_LDFLAGS"
}
build_clear(){
rm -rf $FF_LIBS_OUT
rm -rf $FF_BUILD_OUT
rm -rf $FF_INCLUDE_OUT
make clean
}
build(){
make -j4
make install
cp -f config.h $FF_INCLUDE_OUT/config.h
}
compose(){
$FF_PREBUILT/bin/${FF_CROSS_PREFIX}-ld \
-rpath-link=$FF_PLATFORM/usr/lib \
-L$FF_PLATFORM/usr/lib -L$FF_BUILD_OUT/lib \
-soname libffmpeg.so -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o \
$FF_LIBS_OUT/libffmpeg.so \
$FF_BUILD_OUT/lib/libavcodec.a \
$FF_BUILD_OUT/lib/libavfilter.a \
$FF_BUILD_OUT/lib/libswresample.a \
$FF_BUILD_OUT/lib/libavformat.a \
$FF_BUILD_OUT/lib/libavutil.a \
$FF_BUILD_OUT/lib/libswscale.a \
$FF_BUILD_OUT/lib/libavdevice.a \
$FF_BUILD_OUT/lib/libpostproc.a \
-lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker \
$FF_PREBUILT/lib/gcc/${FF_CROSS_PREFIX}/${FF_GCC_VER}.x/libgcc.a
make clean
}
cd $FF_SOURCE
case "$FF_DEBUG" in
clear)
build_clear
;;
*)
create_folder
config_1
build
compose
;;
esac
cd $FF_BUILD_PATH
ff_common_config.sh 用于ffmpeg庫編譯選項
#! /usr/bin/env bash
export FF_COMMON_FLAGS=
# Program options:
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-programs"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-ffmpeg"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-ffplay"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-ffprobe"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-ffserver"
# Documentation options:
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-doc"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-htmlpages"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-manpages"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-podpages"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-txtpages"
# Component options:
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-avdevice"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-avcodec"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-avformat"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-avutil"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-swresample"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-swscale"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-postproc"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-avfilter"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-avresample"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-network"
# Hardware accelerators:
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-d3d11va"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-dxva2"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-vaapi"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-vda"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-vdpau"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-videotoolbox"
# Individual component options:
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-encoders"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-encoder=png"
# ./configure --list-decoders
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-decoders"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-decoder=aac"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-decoder=aac_latm"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-decoder=flv"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-decoder=h264"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-decoder=mp3*"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-decoder=vp6f"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-decoder=flac"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-decoder=hevc"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-hwaccels"
# ./configure --list-muxers
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-muxers"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-muxer=mp4"
# ./configure --list-demuxers
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-demuxers"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-demuxer=aac"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-demuxer=concat"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-demuxer=data"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-demuxer=flv"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-demuxer=hls"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-demuxer=live_flv"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-demuxer=mov"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-demuxer=mp3"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-demuxer=mpegps"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-demuxer=mpegts"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-demuxer=mpegvideo"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-demuxer=flac"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-demuxer=hevc"
# ./configure --list-parsers
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-parsers"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-parser=aac"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-parser=aac_latm"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-parser=h264"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-parser=flac"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-parser=hevc"
# ./configure --list-bsf
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-bsfs"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-bsf=chomp"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-bsf=dca_core"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-bsf=dump_extradata"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-bsf=hevc_mp4toannexb"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-bsf=imx_dump_header"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-bsf=mjpeg2jpeg"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-bsf=mjpega_dump_header"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-bsf=mov2textsub"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-bsf=mp3_header_decompress"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-bsf=mpeg4_unpack_bframes"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-bsf=noise"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-bsf=remove_extradata"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-bsf=text2movsub"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-bsf=vp9_superframe"
# ./configure --list-protocols
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-protocols"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-protocol=async"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-protocol=bluray"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-protocol=concat"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-protocol=crypto"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-protocol=ffrtmpcrypt"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-protocol=ffrtmphttp"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-protocol=gopher"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-protocol=icecast"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-protocol=librtmp*"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-protocol=libssh"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-protocol=md5"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-protocol=mmsh"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-protocol=mmst"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-protocol=rtmp*"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-protocol=rtmp"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --enable-protocol=rtmpt"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-protocol=rtp"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-protocol=sctp"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-protocol=srtp"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-protocol=subfile"
export FF_COMMON_FLAGS="$FF_COMMON_FLAGS --disable-protocol=unix"
4. 配置項說明
所有配置項都可通過下面命令查看
./configure --help
轉(zhuǎn)自:https://www.cnblogs.com/soniclq/p/3417833.html
Usage: configure [options]
用 法:configure [選項]
Options: [defaults in brackets after descriptions]
選 項:[描述之后的方括號里的是默認值]
Standard options:
標準選項:
--help print this message
打印這個信息,例如:./configure --help > ffmpegcfg.txt
--logfile=FILE log tests and output to FILE [config.log]
記錄測試日志并輸出到的文件[默認:config.log]
--disable-logging do not log configure debug information
不記錄調(diào)試日志信息
--prefix=PREFIX install in PREFIX []
安裝程序到指定目錄[默認:空]
--bindir=DIR install binaries in DIR [PREFIX/bin]
安裝程序到指定目錄[默認:/bin]
--datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
安裝數(shù)據(jù)文件到指定目錄[默認:/share/ffmpeg]
--libdir=DIR install libs in DIR [PREFIX/lib]
安裝靜態(tài)庫到指定目錄[默認:/lib]
--shlibdir=DIR install shared libs in DIR [PREFIX/lib]
安裝共享庫到指定目錄[默認:/lib]
--incdir=DIR install includes in DIR [PREFIX/include]
安裝頭文件到指定目錄[默認:/include]
--mandir=DIR install man page in DIR [PREFIX/share/man]
安裝man page到指定路徑[默認:/share/man]
Configuration options:
配置選項:
--disable-static do not build static libraries [no]
不構(gòu)建靜態(tài)庫[默認:關(guān)閉]
--enable-shared build shared libraries [no]
構(gòu)建共享庫[默認:關(guān)閉]
--enable-gpl allow use of GPL code, the resulting libs
and binaries will be under GPL [no]
允許使用 GPL 代碼坟奥,
產(chǎn)生的庫和程序?qū)㈦`屬于 GPL[默認:關(guān)閉]
--enable-version3 upgrade (L)GPL to version 3 [no]
升級GPL到版本3[默認:關(guān)閉]
--enable-nonfree allow use of nonfree code, the resulting libs
and binaries will be unredistributable [no]
允許使用非免費的代碼树瞭,
產(chǎn)生的庫和二進制程序?qū)⑹遣豢稍侔l(fā)行的[默認:關(guān)閉]
--disable-doc do not build documentation
不構(gòu)造文檔
--disable-ffmpeg disable ffmpeg build
禁止 ffmpeg 構(gòu)造
--disable-ffplay disable ffplay build
禁止 ffplay 構(gòu)造
--disable-ffprobe disable ffprobe build
禁止 ffprobe 構(gòu)造
--disable-ffserver disable ffserver build
禁止 ffserver 構(gòu)造
--disable-avdevice disable libavdevice build
禁止 libavdevice 構(gòu)造
--disable-avcodec disable libavcodec build
禁止 libavcodec 構(gòu)造
--disable-avcore disable libavcore build
禁止 libavcore 構(gòu)造
--disable-avformat disable libavformat build
禁止 libavformat 構(gòu)造
--disable-swscale disable libswscale build
禁止 libswscale 構(gòu)造
--enable-postproc enable GPLed postprocessing support [no]
啟用 GPLed 后加工支持[默認:關(guān)閉]
--disable-avfilter disable video filter support [no]
禁止視頻過濾器支持[默認:關(guān)閉]
--disable-pthreads disable pthreads [auto]
禁用 pthreads [默認:自動]
--enable-w32threads use Win32 threads [no]
使用 Win32 線程[默認:關(guān)閉]
--enable-x11grab enable X11 grabbing [no]
啟用 X11 攫取[默認:關(guān)閉]
--disable-network disable network support [no]
禁用網(wǎng)絡(luò)支持[默認:不禁用]
--disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]
快速的 MPEG 音頻解碼方式(但精度低)[默認:禁用]
--enable-gray enable full grayscale support (slower color)
啟用全部灰度的支持(感光性較低的顏色)
--disable-swscale-alpha disable alpha channel support in swscale
在軟縮放時 禁止 阿爾法 通道支持
--disable-fastdiv disable table-based division
禁止以表格為主劃分
--enable-small optimize for size instead of speed
啟用大小優(yōu)化,犧牲速度
--disable-aandct disable AAN DCT code
禁止 AAN DCT 碼
--disable-dct disable DCT code
禁止 DCT 碼
--disable-fft disable FFT code
禁止 FFT 碼
--disable-golomb disable Golomb code
禁止 Golomb 碼
--disable-huffman disable Huffman code
禁止 Huffman 碼
--disable-lpc disable LPC code
禁止 LPC 碼
--disable-mdct disable MDCT code
禁止 MDCT 碼
--disable-rdft disable RDFT code
禁止 RDFT 碼
--disable-vaapi disable VAAPI code
禁止 VAAPI 碼
--disable-vdpau disable VDPAU code
禁止 VDPAU 碼
--disable-dxva2 disable DXVA2 code
禁止 DXVA2 碼
--enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
啟用在運行時偵測 CPU 性能(更大的二進制程序)
--enable-hardcoded-tables use hardcoded tables instead of runtime generation
啟用硬編碼表而不是運行時產(chǎn)生
--enable-memalign-hack emulate memalign, interferes with memory debuggers
模擬memalign拇厢,內(nèi)存調(diào)試器干擾
--disable-everything disable all components listed below
禁用下面已列出的全部組件
--disable-encoder=NAME disable encoder NAME
禁用指定的編碼器
--enable-encoder=NAME enable encoder NAME
啟用指定的編碼器
--disable-encoders disable all encoders
禁用全部編碼器
--disable-decoder=NAME disable decoder NAME
禁用指定的解碼器
--enable-decoder=NAME enable decoder NAME
啟用指定的解碼器
--disable-decoders disable all decoders
禁用全部解碼器
--disable-hwaccel=NAME disable hwaccel NAME
禁用指定的硬件加速
--enable-hwaccel=NAME enable hwaccel NAME
啟用指定的硬件加速
--disable-hwaccels disable all hwaccels
禁用全部的硬件加速
--disable-muxer=NAME disable muxer NAME
禁用指定的混合器(音視頻合并成一個文件)
--enable-muxer=NAME enable muxer NAME
啟用指定的混合器(音視頻合并成一個文件)
--disable-muxers disable all muxers
禁用全部混合器(音視頻合并成一個文件)
--disable-demuxer=NAME disable demuxer NAME
禁用指定的解混器(音視頻從一個文件分解出來)
--enable-demuxer=NAME enable demuxer NAME
啟用指定的解混器(音視頻從一個文件分解出來)
--disable-demuxers disable all demuxers
禁用全部解混器(音視頻從一個文件分解出來)
--enable-parser=NAME enable parser NAME
啟用指定的分析器
--disable-parser=NAME disable parser NAME
禁用指定的分析器
--disable-parsers disable all parsers
禁用全部分析器
--enable-bsf=NAME enable bitstream filter NAME
啟用指定的位流過濾器
--disable-bsf=NAME disable bitstream filter NAME
禁用指定的位流過濾器
--disable-bsfs disable all bitstream filters
禁用全部的位流過濾器
--enable-protocol=NAME enable protocol NAME
啟用指定的協(xié)議
--disable-protocol=NAME disable protocol NAME
禁用指定的協(xié)議
--disable-protocols disable all protocols
禁用全部協(xié)議
--disable-indev=NAME disable input device NAME
禁用指定的輸入設(shè)備
--disable-outdev=NAME disable output device NAME
禁用指定的輸出設(shè)備
--disable-indevs disable input devices
禁用輸入設(shè)備
--disable-outdevs disable output devices
禁用輸出設(shè)備
--disable-devices disable all devices
禁用全部輸入輸出設(shè)備
--enable-filter=NAME enable filter NAME
啟用指定的過濾器
--disable-filter=NAME disable filter NAME
禁用指定的過濾器
--disable-filters disable all filters
禁用全部的過濾器
--list-decoders show all available decoders
顯示全部可用的解碼器
--list-encoders show all available encoders
顯示全部可用的編碼器
--list-hwaccels show all available hardware accelerators
顯示全部可用的硬件加速器
--list-muxers show all available muxers
顯示全部可用的混合器
--list-demuxers show all available demuxers
顯示全部可用的解混器
--list-parsers show all available parsers
顯示全部可用的分析器
--list-protocols show all available protocols
顯示全部可用的協(xié)議
--list-bsfs show all available bitstream filters
顯示全部可用的位流過濾器
--list-indevs show all available input devices
顯示全部可用的輸入設(shè)備
--list-outdevs show all available output devices
顯示全部可用的輸出設(shè)備
--list-filters show all available filters
顯示全部可用的過濾器
External library support:
外部庫支持:
--enable-avisynth enable reading of AVISynth script files [no]
啟用讀取 AVISynth 腳本文件[默認:關(guān)閉]
--enable-bzlib enable bzlib [autodetect]
啟用 bzlib[默認:自動偵測]
--enable-frei0r enable frei0r video filtering
啟用 frei0r 視頻篩選
--enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
啟用 AMR-NB 編解碼通過 libopencore-amrnb[默認:關(guān)閉]
1. AMR: Adaptive Multi-Rate 相對相對WB而言又稱 AMR-NB,
自適應多速率編碼晒喷,主要用于移動設(shè)備的音頻孝偎,
壓縮比比較大,但相對其他的壓縮格式質(zhì)量比較差凉敲,
由于多用于人聲衣盾,通話,效果還是很不錯的爷抓。
語音帶寬范圍:300-3400Hz势决,8KHz抽樣;
2. AMR-WB: AMR WideBand废赞,
是一種同時被國際標準化組織ITU-T和3GPP采用的寬帶
語音編碼標準徽龟,也稱為G722.2標準。
語音帶寬范圍: 50-7000Hz唉地,16KHz抽樣
--enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
啟用 AMR-WB 編解碼通過 libopencore-amrwb[默認:關(guān)閉]
--enable-libopencv enable video filtering via libopencv [no]
通過 libopencv啟用視頻篩選 [默認:關(guān)閉]
--enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
and libraw1394 [no]
啟用 libdc1394沟涨、libraw1394 抓取 IIDC-1394[默認:關(guān)閉]
--enable-libdirac enable Dirac support via libdirac [no]
--enable-libfaac enable FAAC support via libfaac [no]
通過 libfaac 啟用 FAAC 支持[默認:關(guān)閉]
--enable-libgsm enable GSM support via libgsm [no]
通過 libgsm 啟用 GSM 支持[默認:關(guān)閉]
--enable-libmp3lame enable MP3 encoding via libmp3lame [no]
通過 libmp3lame 啟用 MP3 編碼[默認:關(guān)閉]
--enable-libnut enable NUT (de)muxing via libnut,
native (de)muxer exists [no]
啟用 NUT (解)混合通過 libnut,
本地的 (解)混合器存在[默認:關(guān)閉]
注:NUT是一種容器格式半夷。
--enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]
通過 OpenJPEG啟用 JPEG2000 解碼 [默認:關(guān)閉]
--enable-librtmp enable RTMP[E] support via librtmp [no]
通過 librtmp 啟用 RTMP[E]支持 [默認:關(guān)閉]
--enable-libschroedinger enable Dirac support via libschroedinger [no]
通過 libschroedinger啟用 Dirac 支持 [默認:關(guān)閉]
--enable-libspeex enable Speex decoding via libspeex [no]
通過 libspeex啟用 Speex 解碼[默認:關(guān)閉]
--enable-libtheora enable Theora encoding via libtheora [no]
通過 libtheora啟用 Theora 編碼[默認:關(guān)閉]
--enable-libvorbis enable Vorbis encoding via libvorbis,
native implementation exists [no]
通過 libvorbis 啟用 Vorbis 編碼方式凉唐,本地裝置存在[默認:關(guān)閉]
--enable-libvpx enable VP8 support via libvpx [no]
--enable-libx264 enable H.264 encoding via x264 [no]
通過 x264 啟用 H.264 編碼方式[默認:關(guān)閉]
--enable-libxavs enable AVS encoding via xavs [no]
--enable-libxvid enable Xvid encoding via xvidcore,
native MPEG-4/Xvid encoder exists [no]
通過 xvidcore 啟用 Xvid 編碼方式盅藻,
本地 MPEG-4/Xvid 編碼器存在[默認:關(guān)閉]
--enable-mlib enable Sun medialib [no]
啟用 Sun medialib [默認:關(guān)閉]
--enable-zlib enable zlib [autodetect]
啟用 zlib [默認:自動偵測]
Advanced options (experts only):
--source-path=PATH path to source code [/home/nsc/workspace/android_code/ffmpeg]
源碼的路徑[默認:/home/nsc/workspace/android_code/ffmpeg]
--cross-prefix=PREFIX use PREFIX for compilation tools []
為編譯工具指定路徑
--enable-cross-compile assume a cross-compiler is used
假定使用了交叉編譯
--sysroot=PATH root of cross-build tree
交叉建造樹的根
--sysinclude=PATH location of cross-build system headers
交叉建造系統(tǒng)頭文件的位置
--target-os=OS compiler targets OS []
編譯器目標操作系統(tǒng)[默認:]
--target-exec=CMD command to run executables on target
在目標系統(tǒng)上運行可執(zhí)行應用的命令
--target-path=DIR path to view of build directory on target
在目標系統(tǒng)上創(chuàng)建計劃目錄的路徑
--nm=NM use nm tool
使用指定的 nm 工具。注:列出目標文件的符號清單群嗤。
--ar=AR use archive tool AR [ar]
使用指定的歸檔成靜態(tài)庫工具[默認:ar]
注:可以用來創(chuàng)建菠隆、修改庫,也可以從庫中提出單個模塊狂秘。
--as=AS use assembler AS []
使用指定的匯編程序[默認:]
--cc=CC use C compiler CC [gcc]
指定使用哪種C編譯器[默認:gcc]
--ld=LD use linker LD
使用指定的鏈接器
--host-cc=HOSTCC use host C compiler HOSTCC
使用主機C編譯器HOSTCC
--host-cflags=HCFLAGS use HCFLAGS when compiling for host
宿主編譯時骇径,使用HCFLAGS
--host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
宿主連接時,使用HLDFLAGS
--host-libs=HLIBS use libs HLIBS when linking for host
宿主連接時者春,使用HLIBS庫
--extra-cflags=ECFLAGS add ECFLAGS to CFLAGS []
添加 ECFLAGS 到 CFLAGS[默認:空]
--extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS []
添加 ELDFLAGS 到 LDFLAGS [默認:空]
--extra-libs=ELIBS add ELIBS []
添加 ELIBS [默認:空]
--extra-version=STRING version string suffix []
--build-suffix=SUFFIX library name suffix []
庫名后綴[默認:空]
--arch=ARCH select architecture []
選擇微處理器體系結(jié)構(gòu)[默認:空]
--cpu=CPU select the minimum required CPU
(affects instruction selection,
may crash on older CPUs)
選用要求的最低CPU(影響指令選擇破衔,可能在過時的CPU上崩潰)
--disable-asm disable all assembler optimizations
禁用全部匯編程序優(yōu)化
--disable-altivec disable AltiVec optimizations
禁用 AltiVec 優(yōu)化
--disable-amd3dnow disable 3DNow! optimizations
禁用 3DNow! 優(yōu)化
--disable-amd3dnowext disable 3DNow! extended optimizations
禁用 3DNow! 擴展優(yōu)化
--disable-mmx disable MMX optimizations
禁用 MMX 優(yōu)化
--disable-mmx2 disable MMX2 optimizations
禁用 MMX2 優(yōu)化
--disable-sse disable SSE optimizations
禁用 SSE 優(yōu)化
--disable-ssse3 disable SSSE3 optimizations
禁用 SSSE3 優(yōu)化
--disable-armv5te disable armv5te optimizations
禁用 armv5te 優(yōu)化
--disable-armv6 disable armv6 optimizations
禁用 armv6 優(yōu)化
--disable-armv6t2 disable armv6t2 optimizations
禁用 armv6t2 優(yōu)化
--disable-armvfp disable ARM VFP optimizations
禁用 ARM VFP 優(yōu)化
--disable-iwmmxt disable iwmmxt optimizations
禁用 iwmmxt 優(yōu)化
--disable-mmi disable MMI optimizations
禁用 MMI 優(yōu)化
--disable-neon disable neon optimizations
禁用 neon 優(yōu)化
--disable-vis disable VIS optimizations
禁用 VIS 優(yōu)化
--disable-yasm disable use of yasm assembler
禁用 yasm 匯編器
--enable-pic build position-independent code
創(chuàng)造不依賴(于)位置的代碼
--malloc-prefix=PFX prefix malloc and related names with PFX
在 malloc 和 相關(guān)名稱 前加指定前綴
--enable-sram allow use of on-chip SRAM
允許使用片內(nèi)靜態(tài)隨機存儲器
--disable-symver disable symbol versioning
禁用符號版本控制
Developer options (useful when working on FFmpeg itself):
--disable-debug disable debugging symbols
禁用調(diào)試符號
--enable-debug=LEVEL set the debug level []
--disable-optimizations disable compiler optimizations
禁用編譯器優(yōu)化
--enable-extra-warnings enable more compiler warnings
--disable-stripping disable stripping of executables and shared libraries
禁止可執(zhí)行程序剝脫共享庫
--samples=PATH location of test samples for FATE
指定測試示例的位置
NOTE: Object files are built at the place where configure is launched.
注意:對象文件是被創(chuàng)建在 configure 運行的地方。