美文网首页
FFMpeg编译脚本

FFMpeg编译脚本

作者: 放羊娃华振 | 来源:发表于2021-09-02 23:45 被阅读0次

一、修改configure

修改前:

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)'  

二、执行configure

./configure --disable-yasm

三、脚本记录

1、可以编译64位和32位脚本

#!/bin/bash
NDK=/Users/tal/plugin/ndk/android-ndk-r15c
ADDI_CFLAGS="-fPIE -pie"
ADDI_LDFLAGS="-fPIE -pie"

#编译平台,linux是darwin-x86_64 mac是:darwin-x86_64
# buildplatforms=linux-x86_64
buildplatforms=darwin-x86_64


ANDROID_ARMV5_CFLAGS="-march=armv5te"
ANDROID_ARMV7_CFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=neon"  #-mfloat-abi=hard -mfpu=vfpv3-d16 #-mfloat-abi=hard -mfpu=vfp
ANDROID_ARMV8_CFLAGS="-march=armv8-a"
ANDROID_X86_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"
ANDROID_X86_64_CFLAGS="-march=x86-64 -msse4.2 -mpopcnt -m64 -mtune=intel"

configure()
{
    CPU=$1
    CFALGS=$2
    PREFIX=$(pwd)/android/$CPU
    x264=$(pwd)/x264/android/$CPU
    HOST=""
    CROSS_PREFIX=""
    SYSROOT=""
    ARCH=""
    if [ "$CPU" == "armv7-a" ]
    then
        ARCH="arm"
        HOST=arm-linux
        SYSROOT=$NDK/platforms/android-21/arch-arm/
        CROSS_PREFIX=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/${buildplatforms}/bin/arm-linux-androideabi-
    else
        ARCH="aarch64"
        HOST=aarch64-linux
        SYSROOT=$NDK/platforms/android-21/arch-arm64/
        CROSS_PREFIX=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/${buildplatforms}/bin/aarch64-linux-android-
    fi
    ./configure \
    --prefix=$PREFIX \
    --disable-encoders \
    --disable-decoders \
    --disable-avdevice \
    --disable-static \
    --disable-doc \
    --disable-ffplay \
    --disable-network \
    --disable-doc \
    --disable-symver \
    --enable-neon \
    --enable-shared \
    --enable-gpl \
    --enable-pic \
    --enable-jni \
    --enable-pthreads \
    --enable-mediacodec \
    --enable-encoder=aac \
    --enable-encoder=gif \
    --enable-encoder=libopenjpeg \
    --enable-encoder=libmp3lame \
    --enable-encoder=libwavpack \
    --enable-encoder=mpeg4 \
    --enable-encoder=pcm_s16le \
    --enable-encoder=png \
    --enable-encoder=srt \
    --enable-encoder=subrip \
    --enable-encoder=yuv4 \
    --enable-encoder=text \
    --enable-decoder=aac \
    --enable-decoder=aac_latm \
    --enable-decoder=libopenjpeg \
    --enable-decoder=mp3 \
    --enable-decoder=mpeg4_mediacodec \
    --enable-decoder=pcm_s16le \
    --enable-decoder=flac \
    --enable-decoder=flv \
    --enable-decoder=gif \
    --enable-decoder=png \
    --enable-decoder=srt \
    --enable-decoder=xsub \
    --enable-decoder=yuv4 \
    --enable-decoder=vp8_mediacodec \
    --enable-decoder=h264_mediacodec \
    --enable-decoder=hevc_mediacodec \
    --enable-hwaccel=h264_mediacodec \
    --enable-hwaccel=mpeg4_mediacodec \
    --enable-ffmpeg \
    --enable-bsf=aac_adtstoasc \
    --enable-bsf=h264_mp4toannexb \
    --enable-bsf=hevc_mp4toannexb \
    --enable-bsf=mpeg4_unpack_bframes \
    --enable-cross-compile \
    --cross-prefix=$CROSS_PREFIX \
    --target-os=android \
    --arch=$ARCH \
    --extra-cflags="$CFALGS -Os -fPIC -DANDROID -Wfatal-errors -Wno-deprecated" \
    --extra-cxxflags="-D__thumb__ -fexceptions -frtti" \
    --sysroot=$SYSROOT
   
}
#  --enable-libx264 \
#  --enable-encoder=libx264 \
#  --extra-cflags="-I$x264/include $ADDI_CFLAGS" \
#  --extra-ldflags="-L$x264/lib"

build()
{
    make clean
    cpu=$1
    CFALGS=$2
    echo "build $cpu"
    echo "CFALGS $CFALGS"
    
    configure $cpu $CFALGS
    make -j4
    make install
}

build arm64
build armv7-a

2、可以编译全部平台CPU架构版本

#!/bin/sh

MY_LIBS_NAME=ffmpeg-3.3.9
MY_DIR=ffmpeg-3.3.9

# cd ./${MY_DIR}

#编译的过程中产生的中间件的存放目录,为了区分编译目录,源码目录,install目录
MY_BUILD_DIR=binary


NDK_PATH=/Users/tal/plugin/ndk/android-ndk-r15c
#编译平台,linux是darwin-x86_64 mac是:darwin-x86_64
BUILD_PLATFORM=darwin-x86_64
# BUILD_PLATFORM=linux-x86_64
TOOLCHAIN_VERSION=4.9
ANDROID_VERSION=21

ANDROID_ARMV5_CFLAGS="-march=armv5te"
ANDROID_ARMV7_CFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=neon"  #-mfloat-abi=hard -mfpu=vfpv3-d16 #-mfloat-abi=hard -mfpu=vfp
ANDROID_ARMV8_CFLAGS="-march=armv8-a"
ANDROID_X86_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"
ANDROID_X86_64_CFLAGS="-march=x86-64 -msse4.2 -mpopcnt -m64 -mtune=intel"

# 目标平台
# TARGET_OS=linux
TARGET_OS=android

# params($1:arch,$2:arch_abi,$3:host,$4:cross_prefix,$5:cflags)
build_bin() {

    echo "-------------------star build $2-------------------------"

    ARCH=$1         # arm arm64 x86 x86_64
    ANDROID_ARCH_ABI=$2     # armeabi armeabi-v7a x86 mips

    PREFIX=$(pwd)/android/${MY_LIBS_NAME}/${ANDROID_ARCH_ABI}/

    HOST=$3
    SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-${ARCH}

    CFALGS=$5


    TOOLCHAIN=${NDK_PATH}/toolchains/${HOST}-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM}
    CROSS_PREFIX=${TOOLCHAIN}/bin/$4-

    # build 中间件
    BUILD_DIR=./${MY_BUILD_DIR}/${ANDROID_ARCH_ABI}

    echo "pwd==$(pwd)"
    echo "ARCH==${ARCH}"
    echo "PREFIX==${PREFIX}"
    echo "HOST==${HOST}"
    echo "SYSROOT=${SYSROOT}"
    echo "CFALGS=$5"
    echo "CFALGS=${CFALGS}"
    echo "TOOLCHAIN==${TOOLCHAIN}"
    echo "CROSS_PREFIX=${CROSS_PREFIX}"

    #echo "-------------------------按任意键继续---------------------"
    #read -n 1
    #echo "-------------------------继续执行-------------------------"

    mkdir -p ${BUILD_DIR}   #创建当前arch_abi的编译目录,比如:binary/armeabi-v7a
    echo "创建目录:"${BUILD_DIR}
    # cd ${BUILD_DIR}         #此处 进了当前arch_abi的2级编译目录

    # cd ../../
    echo "执行脚本之前,当前目录:"$(pwd)
    
    # sh ../../${MY_DIR}/configure \
    # sh configure \
    sh configure \
        --disable-yasm \
        --prefix=${PREFIX} \
        --target-os=${TARGET_OS} \
        --arch=${ARCH} \
        --sysroot=$SYSROOT \
        --enable-cross-compile \
        --cross-prefix=${CROSS_PREFIX} \
        --extra-cflags="$CFALGS -Os -fPIC -DANDROID -Wfatal-errors -Wno-deprecated" \
        --extra-cxxflags="-D__thumb__ -fexceptions -frtti" \
        --extra-ldflags="-L${SYSROOT}/usr/lib" \
        --enable-shared \
        --disable-static \
        --enable-asm \
        --enable-neon \
        --disable-encoders \
        --enable-encoder=aac \
        --enable-encoder=mjpeg \
        --enable-encoder=png \
        --disable-decoders \
        --enable-decoder=aac \
        --enable-decoder=aac_latm \
        --enable-decoder=h264 \
        --enable-decoder=mpeg4 \
        --enable-decoder=mjpeg \
        --enable-decoder=png \
        --disable-demuxers \
        --enable-demuxer=image2 \
        --enable-demuxer=h264 \
        --enable-demuxer=aac \
        --disable-parsers \
        --enable-parser=aac \
        --enable-parser=ac3 \
        --enable-parser=h264 \
        --enable-gpl \
        --disable-doc \
        --disable-ffmpeg \
        --disable-ffplay \
        --disable-ffprobe \
        --disable-symver \
        --disable-debug \
        --enable-small


    make clean
    # make
    make -j4
    make install

    #从当前arch_abi编译目录跳出,对应上面的cd ${BUILD_DIR},以便function多次执行
        # cd ../../

    echo "-------------------$2 build end-------------------------"
}


# build armeabi
 build_bin arm armeabi arm-linux-androideabi arm-linux-androideabi ${ANDROID_ARMV5_CFLAGS}

#build armeabi-v7a
 build_bin arm armeabi-v7a arm-linux-androideabi arm-linux-androideabi "$ANDROID_ARMV7_CFLAGS"

#build arm64-v8a
 build_bin arm64 arm64-v8a aarch64-linux-android aarch64-linux-android "$ANDROID_ARMV8_CFLAGS"

#build x86
build_bin x86 x86 x86 i686-linux-android "$ANDROID_X86_CFLAGS"

#build x86_64
build_bin x86_64 x86_64 x86_64 x86_64-linux-android "$ANDROID_X86_64_CFLAGS"

3、可以生成一个so文件的脚本

#!/bin/sh

MY_LIBS_NAME=ffmpeg-3.3.9
MY_DIR=ffmpeg-3.3.9

# cd ./${MY_DIR}

#编译的过程中产生的中间件的存放目录,为了区分编译目录,源码目录,install目录
MY_BUILD_DIR=binary


NDK_PATH=/Users/tal/plugin/ndk/android-ndk-r15c
#编译平台,linux是darwin-x86_64 mac是:darwin-x86_64
BUILD_PLATFORM=darwin-x86_64
# BUILD_PLATFORM=linux-x86_64
TOOLCHAIN_VERSION=4.9
ANDROID_VERSION=21

ANDROID_ARMV5_CFLAGS="-march=armv5te"
ANDROID_ARMV7_CFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=neon"  #-mfloat-abi=hard -mfpu=vfpv3-d16 #-mfloat-abi=hard -mfpu=vfp
ANDROID_ARMV8_CFLAGS="-march=armv8-a"
ANDROID_X86_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"
ANDROID_X86_64_CFLAGS="-march=x86-64 -msse4.2 -mpopcnt -m64 -mtune=intel"

# 目标平台
# TARGET_OS=linux
TARGET_OS=android

# params($1:arch,$2:arch_abi,$3:host,$4:cross_prefix,$5:cflags)
build_bin() {

    echo "-------------------star build $2-------------------------"

    ARCH=$1         # arm arm64 x86 x86_64
    ANDROID_ARCH_ABI=$2     # armeabi armeabi-v7a x86 mips

    PREFIX=$(pwd)/android/${MY_LIBS_NAME}/${ANDROID_ARCH_ABI}/

    HOST=$3
    SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-${ARCH}

    CFALGS=$5


    TOOLCHAIN=${NDK_PATH}/toolchains/${HOST}-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM}
    CROSS_PREFIX=${TOOLCHAIN}/bin/$4-

    # build 中间件
    BUILD_DIR=./${MY_BUILD_DIR}/${ANDROID_ARCH_ABI}

    echo "------pwd==$(pwd)"
    echo "------ARCH==${ARCH}"
    echo "------PREFIX==${PREFIX}"
    echo "------HOST==${HOST}"
    echo "------SYSROOT=${SYSROOT}"
    echo "------CFALGS=$5"
    echo "------CFALGS=${CFALGS}"
    echo "------TOOLCHAIN==${TOOLCHAIN}"
    echo "------CROSS_PREFIX=${CROSS_PREFIX}"

    #echo "-------------------------按任意键继续---------------------"
    #read -n 1
    #echo "-------------------------继续执行-------------------------"

    # mkdir -p ${BUILD_DIR}   #创建当前arch_abi的编译目录,比如:binary/armeabi-v7a
    # echo "创建目录:"${BUILD_DIR}
    # cd ${BUILD_DIR}         #此处 进了当前arch_abi的2级编译目录

    # cd ../../
    echo "执行脚本之前,当前目录:"$(pwd)
    
    # sh ../../${MY_DIR}/configure \
    # sh configure \

    # sh configure \
    #     --disable-yasm \
    #   --prefix=${PREFIX} \
    #   --target-os=${TARGET_OS} \
    #   --arch=${ARCH} \
    #   --sysroot=$SYSROOT \
    #   --enable-cross-compile \
    #   --cross-prefix=${CROSS_PREFIX} \
    #   --extra-cflags="$CFALGS -Os -fPIC -DANDROID -Wfatal-errors -Wno-deprecated" \
    #   --extra-cxxflags="-D__thumb__ -fexceptions -frtti" \
    #   --extra-ldflags="-L${SYSROOT}/usr/lib" \
    #   --disable-shared \
    #     --enable-static \
    #   --enable-asm \
    #   --enable-neon \
    #   --disable-encoders \
    #   --enable-encoder=aac \
    #   --enable-encoder=mjpeg \
    #   --enable-encoder=png \
    #   --disable-decoders \
    #   --enable-decoder=aac \
    #   --enable-decoder=aac_latm \
    #   --enable-decoder=h264 \
    #   --enable-decoder=mpeg4 \
    #   --enable-decoder=mjpeg \
    #   --enable-decoder=png \
    #   --disable-demuxers \
    #   --enable-demuxer=image2 \
    #   --enable-demuxer=h264 \
    #   --enable-demuxer=aac \
    #   --disable-parsers \
    #   --enable-parser=aac \
    #   --enable-parser=ac3 \
    #   --enable-parser=h264 \
    #   --enable-gpl \
    #   --disable-doc \
    #   --disable-ffmpeg \
    #   --disable-ffplay \
    #   --disable-ffprobe \
    #   --disable-symver \
    #   --disable-debug \
    #   --enable-small


    # make clean
    # make -j4
    # make install

    #从当前arch_abi编译目录跳出,对应上面的cd ${BUILD_DIR},以便function多次执行
        # cd ../../

    PLATFORM=$NDK_PATH/platforms/android-${ANDROID_VERSION}/arch-${ARCH}
    # TOOLCHAIN=/Users/tal/plugin/ndk/android-ndk-r15c/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64

    # PREFIX==/Users/tal/Desktop/Desktop-2021/ffmpeg/ffmpeg-3.3.9/android/ffmpeg-3.3.9/armeabi-v7a/
    # .a文件的路径
    MYPREFIX=${PREFIX}/lib

    $TOOLCHAIN/bin/arm-linux-androideabi-ld \
    -rpath-link=$PLATFORM/usr/lib \
    -L$PLATFORM/usr/lib \
    -soname libffmpeg.so -shared -nostdlib -z noexecstack -Bsymbolic --whole-archive --no-undefined -o \
    $PREFIX/libffmpeg.so \
    ${MYPREFIX}/libavcodec.a \
    ${MYPREFIX}/libavdevice.a \
    ${MYPREFIX}/libavfilter.a \
    ${MYPREFIX}/libswresample.a \
    ${MYPREFIX}/libavformat.a \
    ${MYPREFIX}/libavutil.a \
    ${MYPREFIX}/libpostproc.a \
    ${MYPREFIX}/libswscale.a \
    -lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker \
    $TOOLCHAIN/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a


    echo "-------------------$2 build end-------------------------"
}


# build armeabi
# build_bin arm armeabi arm-linux-androideabi arm-linux-androideabi ${ANDROID_ARMV5_CFLAGS}

#build armeabi-v7a
build_bin arm armeabi-v7a arm-linux-androideabi arm-linux-androideabi "$ANDROID_ARMV7_CFLAGS"

#build arm64-v8a
# build_bin arm64 arm64-v8a aarch64-linux-android aarch64-linux-android "$ANDROID_ARMV8_CFLAGS"

#build x86
# build_bin x86 x86 x86 i686-linux-android "$ANDROID_X86_CFLAGS"

#build x86_64
# build_bin x86_64 x86_64 x86_64 x86_64-linux-android "$ANDROID_X86_64_CFLAGS"

相关文章

网友评论

      本文标题:FFMpeg编译脚本

      本文链接:https://www.haomeiwen.com/subject/pvstwltx.html