ffmpeg学习笔记-编译脚本

时间:2023-03-08 19:13:43

之前已经用他人的编译脚本对ffmpeg进行了成功编译,那么在裁剪ffmpeg的时候需要指定文件,这时候应该怎么编写编译脚本呢?本文目的在于说明ffmpeg编译脚本的编写

  • 首先在ffmpeg的目录下新建编译脚本
touch android_build.sh #新建编译脚本
chmod 755 android_build.sh #修改权限
  • 打开编译脚本,进行脚本编写
vim android_build.sh
  • 最开始一行写入如下,表示这是一个bash脚本
#!/bin/bash
  • 定义编译ffmpeg的函数
function build_ffmpeg
{
echo "satrt build ffmpeg"
}
  • 调用ffmpeg函数
build_ffmpeg

至此,大体框架就已经搭建成功了,接下来就是填空题了

  • 在ffmpeg函数里面调用configure,并且传入参数
#!/bin/bash

export ANDROID_NDK_HOME=/usr/ndk/android-ndk-r10e
export PLATFORM_VERSION=android-9 function build_ffmpeg
{
echo "satrt build ffmpeg" ./configure --target-os=linux \
--prefix=$PREFIX \
--arch=$ARCH \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffsever \
--disable-doc \
--enable-cross-compile \
--cross-prefix=$CROSS_COMPILE \
--sysroot=$PLATFORM \
--extra-cflags="-fpic" make clean
make
make install echo "build finished $ARCH"
} ARCH=arm
CPU=arm
PREFIX=$(pwd)/android/$CPU
TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-
PLATFORM=$ANDROID_NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH
build_ffmpeg

说明:

在传递configure的参数时候,有很多参数,写在一行就显得太长,且不美观

这时候需要换行,在shell脚本中,使用\表示连接一行,在其后面不能有空格,下一行的开始位置也不能有空格

为保持整齐,使用Tab制表符

同时配置一些变量,便于多次使用

target-os:target系统

prefix:编译生成目录

arch:CPU架构

enable-shared:表示生成的是动态库

disable-static:不生成静态库

disable-yasm:不使用yasm

disable-ffmpeg:不生成ffmpeg软件

disable-ffplay:不生成ffplay播放器软件

disable-ffprobe:不生成ffprobe信息查看软件

disable-ffsever:不生成ffserver(主要用于与服务器通信)

disable-doc:不生成doc文档

enable-cross-compile:使用交叉编译

cross-prefix:交叉编译链目录

sysroot:指定系统目录

extra-cflags:添加参数,使得动态库可以被加载使用

以上便生成编译脚本了,按照NDK里面的东西,能看到不仅可以生成arm,还可以生成x86和mipsel等,那么这里就一起生成这三个动态库,在调用函数前重新设置变量即可以下就以编译arm,x86,mipsel为例

完整shell脚本如下

#!/bin/bash

export ANDROID_NDK_HOME=/usr/ndk/android-ndk-r10e
export PLATFORM_VERSION=android-9 function build_ffmpeg
{
echo "satrt build ffmpeg" ./configure --target-os=linux \
--prefix=$PREFIX \
--arch=$ARCH \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffsever \
--disable-doc \
--enable-cross-compile \
--cross-prefix=$CROSS_COMPILE \
--sysroot=$PLATFORM \
--extra-cflags="-fpic" make clean
make
make install echo "build finished $ARCH"
} #arm
ARCH=arm
CPU=arm
PREFIX=$(pwd)/android/$CPU
TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-
PLATFORM=$ANDROID_NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH
build_ffmpeg #x86
ARCH=x86
CPU=x86
PREFIX=$(pwd)/android/$CPU
TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/x86-4.9/prebuilt/linux-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/i686-linux-android-
PLATFORM=$ANDROID_NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH
build_ffmpeg #mipsel
ARCH=arm
CPU=arm
PREFIX=$(pwd)/android/$CPU
TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/mipsel-linux-android-4.9/prebuilt/linux-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/mipsel-linux-android-
PLATFORM=$ANDROID_NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH
build_ffmpeg

注意:最好在Linux直接用vim编译,本地编译上传可能会出问题,如果本地编写上传时候一定要使用dos2unix转化一下格式