ffmpeg shell脚本编写

21 篇文章 0 订阅
10 篇文章 0 订阅

一、执行.configure --disable-yasm命令

编译ffmpeg,编写shell脚本之前,要执行.configure --disable-yasm命令。执行这些命令的主要目的是进行一系列的准备工作,比如说检查gcc的版本,会生成common.mak等文件

1、解压ffmpeg压缩包

unzip ffmpeg-2.6.9

2、进入到解压后的文件夹,并查看文件夹中的内容

cd ffmpeg-2.6.9/ :进入到文件夹ffmpeg-2.6.9的目录

ls -la :查看文件夹中的内容

3、查看common.mak文件,如果文件不存在或者文件为空,需要执行configure命令自动生成该文件

4、给configure文件赋执行权限

(1)查看configure的权限

按“ESC”命令退出进入命令模式,输入“:wq!”退出编辑模式。

ls -la :查看文件的详细信息

此时configure没有执行权限

(2)退出到上级目录

(3)给文件夹赋执行权

(4)再次进入到ffmpeg的文件夹

 

5、执行configure命令 ,自动生成一些配置文件

执行命令 ./configure --disable-yasm

(如果该文件没有执行权限,提前需要给它赋执行权限)

 

二、编写脚本build.sh

1、函数声明

函数名“build_ffmpeg”和“{”之间至少需要一个空格,所以最好按下面的方式来写

function build_ffmpeg

{

}

2、指定操作系统

./configure --target-os=linux \

一行可能会很长,所以使用 “\”进行换行

linux 和“\”之间有一个空格,且该“\”之后不能有空格,直接按“Enter”进行换行

3、--prefix指定编译完动态库存放发的位置

--prefix=$PREFIX \

--prefix指定存放发目录,--prefix之前不允许有空格,但是可以使用“TAB”键

变量如PREFIX、CPU一般大写

pwd:代表当前目录

4、指定CPU的架构

--arch=$ARCH \

5、生成动态库

--enable-shared \

6、不生成静态库

--disable-static \

7、不生成yasm软件

--disable-yasm 

8、

--disable--ffmpeg : 不生成ffmpeg

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

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

--disable-ffserver :不生成流媒体推流

--disable-doc :不生成文档

 

9、交叉编译

(1)允许交叉编译

--enable-cross-compile :允许交叉编译

(2)指定交叉编译使用的toolchain路径

#全局变量,多个shell脚本都可以使用
export ANDROID_NDK_HOME= /usr/ndk/android-ndk-r10e

--cross-prefix=$CROSS_COMPILE :指定交叉编译所使用的工具路径(允许交叉编译需要指定路径,交叉编译会使用到toolchain,所以需要使用到linux下面的包)

TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 :指定toolchain的路径

 

(3)指定交叉编译使用的工具路径

CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-:指定交叉编译使用的工具路径

交叉编译使用到了arm-linux-androideabi-ar、arm-linux-androideabi-as、arm-linux-androideabi-a++等工具,需要指定这些工具的路径,其中最后的“-"表示通配符

(4)指定arm编译的根路径

 

10、编译动态库时需要指定“-fpic”

PIC :  Position-Independent Code

-fpic作用于编译阶段,告诉编译器产生与位置无关的代码

则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确地执行。

这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的

PIC使.so文件的代码变为真正意义上的共享

如果不加-fpic,则加载.so文件的代码段时,代码引用的数据对象需要重定位,重定位会修改代码段的内容,这就造成每个使用这个.so文件代码段的进程在内核里都会生成这个.so文件代码短短copy。每个copy是否一样,取决于这个.so文件代码段和数据段内存映射的位置

 

 


9、编译


 

 

build_android.sh

#!/bin/bash

#全局变量,多个shell脚本都可以使用
export ANDROID_NDK_HOME=/usr/ndk/android-ndk-r10e
export PLATFORM_VERSION=android-9

function build_ffmpeg
{
        echo "start build ffmpeg $ARCH"
        ./configure --target-os=linux \
        --prefix=$PREFIX \
        --arch=$ARCH \
        --enable-shared \
        --disable-static \
        --disable-yasm \
        --disable-ffmpeg \
        --disable-ffplay \
        --disable-ffprobe \
        --disable-ffserver \
        --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-x86

build_ffmpeg

注:

通过命令 bash ./configure --help来查看需要配置的文件

如配置 --prefix

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值