ffmpeg学习笔记-编译脚本
之前已经用他人的编译脚本对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转化一下格式
ffmpeg学习笔记-编译脚本的更多相关文章
- ffmpeg学习笔记-Linux下编译Android动态库
Android平台要使用ffmpeg就需要编译生成动态库,这里采用Ubuntu编译Android动态库 文件准备 要编译生成Android需要以下文件 NDK ffmpeg源代码 NDK下载 NDK可 ...
- FFmpeg学习笔记之安装
本随笔原文出自:一叶知秋0830链接:https://www.jianshu.com/p/ab469a2ffd28 1.下载FFmpeg 先进入要存放下载文件的目录,比如要放在/Users/qinji ...
- ffmpeg学习笔记
对于每一个刚開始学习的人,刚開始接触ffmpeg时,想必会有三个问题最为关心,即ffmpeg是什么?能干什么?怎么開始学习?本人前段时间開始接触ffmpeg,在刚開始学习过程中.这三个问 ...
- blfs(systemd版本)学习笔记-编译安装配置dhcpcd
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! dhcpcd项目地址:http://www.linuxfromscratch.org/blfs/view/stable-syst ...
- blfs(systemd版本)学习笔记-编译安装openssh软件包
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! openssh项目地址:http://www.linuxfromscratch.org/blfs/view/stable/pos ...
- blfs(systemv版本)学习笔记-编译安装ligtdm显示管理器
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! ligtdm带有显示管理器和登录器,参照我的笔记安装xorg和i3后安装lightdm,就可以组成一个简易的桌面环境了 下面是l ...
- blfs(systemv版本)学习笔记-编译安装i3-wm平铺式窗口管理器
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! i3-wm项目的官网:https://i3wm.org/ 首先需要lfs基础上编译安装完整的xorg服务 我的xorg服务编译安 ...
- blfs(systemv版本)学习笔记-编译安装配置dhcpcd
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! dhcpcd项目地址:http://www.linuxfromscratch.org/blfs/view/8.3/basicne ...
- blfs(systemv版本)学习笔记-编译安装openssh软件包
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! openssh项目地址:http://www.linuxfromscratch.org/blfs/view/8.3/postlf ...
随机推荐
- 使用docker 起容器配置负载均衡(加权)
首先要准备三个nginx的容器: 第二个容器: 第三个容器: 进入第一个容器(主容器) 要配置的容器(docker exec -it 容器id /bin/bash) vi/etc/nginx/ng ...
- MySQL 5.7 OOM问题诊断——就是这么简单
转载自:http://www.sohu.com/a/114903225_487483 Inside君最近把金庸先生的笑傲江湖重看了三遍,感慨良多.很多工作.管理.生活.学习上的问题都能在其中一窥究竟, ...
- .net加密
Microsoft .NET 中的简化加密 http://www.51cto.com/specbook/15/3407.htm 1.SHA1 using System.Security.Cryptog ...
- luoguP4778 Counting swaps
题目链接 题解 首先,对于每个\(i\)向\(a[i]\)连边. 这样会连出许多独立的环. 可以证明,交换操作不会跨越环. 每个环内的点到最终状态最少交换步数是 \(环的大小-1\) 那么设\(f[i ...
- GoEasy实现websocket 推送消息通知到客户端
最近在实现一个推送功能,用户扫描二维码签到,后台及时将签到成功信息推送到浏览器端.排除了前端ajax轮询的方式,决定采用websocket及时推送. 于是发现了第三方websocket推送库GoEas ...
- sql server解锁表
EXEC sp_who active --看哪个引起的阻塞,blk blk<>0 --解锁表declare @spid intSet @spid = 274 --锁表进程declare @ ...
- IDEA算法导包后 import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey;报错
仔细查看报错原因就能知道,报错是因为包冲突的原因,可以每种只放一个jar包,就能过避免这种错误. 例如:只导入commons-codec-1.11-javadoc,jar和bcprov-jdk15on ...
- redis详解之cluster模式部署
一.环境说明 1.Operation OS:CentOS7.22.ruby version >= 2.2.23.openssl zlib gcc>=4.8.5 二.开始部署 1.安装rub ...
- Docker-compose的安装和使用
一.简介 Compose 项目 是 Docker 官方的开源项目 , 负 责实 现对 Docker 容器 集群的快速编排,其前身 是开源项目 Fig, 目前仍然兼容 Fig格式的模板文件. 使用 一个 ...
- kotlin之注解
注解是用来代码添加元数据的一种手段,要声明一个 注解,需要在类之前添加annotation修饰符 annotation class demo 注解其他属性,可以通过向注解类添加元注解的方式来指定 @T ...