ffmpeg库编译加文字_1.编译ffmpeg库

1.下载ffmpeg

#!/bin/bash

source="ffmpeg-4.1"

if [ ! -r $source ]

then

curl http://ffmpeg.org/releases/${source}.tar.bz2 | tar xj || exit 1

fi

curl 表示下载,后边跟下载的地址。

tar表示解压或者压缩。 x表示解压,j表示是否需要解压bz2压缩包(压缩包格式类型有很多:zip、bz2等等)

2.查看ffmpeg编译配置项

cd 到ffmpeg目录下,

执行./configure --help

ffmpeg有很多配置项:

help options:帮助选项、

standard options:标准选项、

Licensing options:许可选项、

configuration options:配置选项、

external library support:外部库支持、

toolchain options:工具链选项、

advanced options:高级选项、

developer options:开发者选项、

3.编译ffmpeg

下边分析:

1.定义一些字符串

VERSION="4.1" //版本号

SOURCE="ffmpeg-$VERSION" // 需要编译的ffmpeg源文件

CACHEDIR="CACHEDIR" // 保存编译生成的.o文件。

STATICDIR=`pwd`/"weixiao-ffmpeg" // 编译生成的静态库.a的目录

pwd表示获取当前位置的命令。

2.添加ffmpeg的配置项

CONFIGURE_FLAGS="--enable-cross-compile --disable-debug \

--disable-programs --disable-doc --enable-pic"

if [ "$X264" ]

then

CONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-gpl --enable-libx264"

fi

if [ "$FDK_AAC" ]

then

CONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-libfdk-aac --enable-nonfree"

fi

FFmpeg一共九个库,常用的(默认)编译的是七个库。 而我们一般用到的是3到4个库,其中最重要的库是用于编解码的库avcodec。

可以根据我们的需要进行编译:

查看这些配置项使用上边第二条讲过的方式,./confifure --help

通过设置CONFIGURE_FLAGS 来配置这些库是否需要,类似下边:

CONFIGURE_FLAGS ="$CONFIGURE_FLAGS --enable-avdevice --enable-avcodec --enable-avformat --disable-postproc"

3.添加需要编译的cpu平台

ARCHS="arm64 armv7 x86_64 i386"

// 也可以动态的通过入参指定需要的cpu平台

if [ "$*" ]

then

#存入输入参数,也就说:外部指定需要编译CPU架构类型

ARCHS ="$*"

fi

4.安装汇编器yasm

if [ ! `which yasm` ]

then

echo "Yasm not found"

if [ ! `which brew` ]

then

echo "Homebrew not found"

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" || exit 1

fi

brew install yasm || exit 1

fi

ffmpeg编译用到了汇编,所以需要汇编器yasm,注意不要写错。

5.gas-preprocessor.pl 脚本文件

if [ ! `which gas-preprocessor.pl` ]

then

echo "gas-preprocessor.pl not found"

(curl -L https://github.com/libav/gas-preprocessor/raw/master/gas-preprocessor.pl -o /usr/local/bin/gas-preprocessor.pl && chmod +x /usr/local/bin/gas-preprocessor.pl) || exit 1

fi

ffmpeg编译需要gas-preprocessor.pl 文件,它是一个perl的脚本。

6.根据需要的cpu平台循环编译

CWD=`pwd`

for ARCH in $ARCHS

do

编译代码

done

7.for循环中的代码一,首先设置platform平台(7和下边都是for遵循中执行的代码)

echo "build $ARCH"

mkdir -p "$CACHEDIR/$ARCH"

cd "$CACHEDIR/$ARCH"

CFLAGS="-arch $ARCH"

if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ]

then

PLATFORM="iPhoneSimulator"

CFLAGS="$CFLAGS -mios-simulator-version-min=$TARGET"

else

PLATFORM="iPhoneOS"

CFLAGS="$CFLAGS -mios-version-min=$TARGET -fembed-bitcode"

if [ "$ARCH" = "arm64" ]

then

EXPORT="GASPP_FIX_XCODE5=1"

fi

fi

根据需要编译的cpu类型,设置 PLATFORM 是真机还是模拟器。

设置了编译参数 CFLAGS,支持的最低iOS版本。

是否支持x264 和 acc

LDFLAGS="$CFLAGS"

if [ "$X264" ]

then

CFLAGS="$CFLAGS -I$X264/include"

LDFLAGS="$LDFLAGS -L$X264/lib"

fi

if [ "$FDK_AAC" ]

then

CFLAGS="$CFLAGS -I$FDK_AAC/include"

LDFLAGS="$LDFLAGS -L$FDK_AAC/lib"

fi

根据是否支持x264 和acc 继续拼接编译参数。

设置汇编器

XCRUN_SDK=`echo $PLATFORM | tr '[:upper:]' '[:lower:]'`

CC="xcrun -sdk $XCRUN_SDK clang"

if [ "$ARCH" = "arm64" ]

then

AS="gas-preprocessor.pl -arch aarch64 -- $CC"

else

AS="gas-preprocessor.pl -- $CC"

fi

设置了汇编参数 cc 和as

10.设置参数,并编译

TMPDIR=${TMPDIR/%\/} $CWD/$SOURCE/configure \

--target-os=darwin \

--arch=$ARCH \

--cc="$CC" \

--as="$AS" \

$CONFIGURE_FLAGS \

--extra-cflags="$CFLAGS" \

--extra-ldflags="$LDFLAGS" \

--prefix="$STATICDIR/$ARCH" \

|| exit 1

make -j3 install $EXPORT || exit 1

cd $CWD

--prefix表示.a文件的输出文件目录

darwin 是Mac系统的意思

4.编译ffmpeg遇到的问题汇总:

1.shell脚本的语法错误,`` 写成了 '' ,斜着的两个点表示shell命令,竖直的两点表示字符串的意思。

`pwd` 表示获取当前位置的命令, 'pwd'表示pwd字符串

2.shell脚本错误,=号和if判断

name="jack" =号前不能有空格

if [ age == 18 ] []前后必须有空格

3.变量名和专有名词写错

ffmpeg 需要的汇编器是 yasm 而不是ysam。 因为变量名写的时候不报错,所以很难检查出来,要细心些。

4.编译错误,我编译的时候遇到了如下错误:

xcrun -sdk iphoneos clang is unable to create an executable file.

C compiler test failed.

解决方案是命令行执行如下语句:

sudo xcode-select --switch /Applications/Xcode.app

该问题的链接为:issues119 大意是说因为找不到Xcode的目录。

5.完整脚本如下:

VERSION="4.1"

SOURCE="ffmpeg-$VERSION"

CACHEDIR="CACHEDIR"

STATICDIR=`pwd`/"weixiao-ffmpeg"

CONFIGURE_FLAGS="--enable-cross-compile --disable-debug --disable-programs --disable-doc --enable-pic"

if [ "$X264" ]

then

CONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-gpl --enable-libx264"

fi

if [ "$FDK_AAC" ]

then

CONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-libfdk-aac --enable-nonfree"

fi

ARCHS="arm64 armv7 x86_64 i386"

TARGET="10.0"

if [ ! `which yasm` ]

then

echo "Yasm not found"

if [ ! `which brew` ]

then

echo "Homebrew not found"

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" || exit 1

fi

brew install yasm || exit 1

fi

if [ ! `which gas-preprocessor.pl` ]

then

echo "gas-preprocessor.pl not found"

(curl -L https://github.com/libav/gas-preprocessor/raw/master/gas-preprocessor.pl -o /usr/local/bin/gas-preprocessor.pl && chmod +x /usr/local/bin/gas-preprocessor.pl) || exit 1

fi

CWD=`pwd`

for ARCH in $ARCHS

do

echo "build $ARCH"

mkdir -p "$CACHEDIR/$ARCH"

cd "$CACHEDIR/$ARCH"

CFLAGS="-arch $ARCH"

if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ]

then

PLATFORM="iPhoneSimulator"

CFLAGS="$CFLAGS -mios-simulator-version-min=$TARGET"

else

PLATFORM="iPhoneOS"

CFLAGS="$CFLAGS -mios-version-min=$TARGET -fembed-bitcode"

if [ "$ARCH" = "arm64" ]

then

EXPORT="GASPP_FIX_XCODE5=1"

fi

fi

LDFLAGS="$CFLAGS"

if [ "$X264" ]

then

CFLAGS="$CFLAGS -I$X264/include"

LDFLAGS="$LDFLAGS -L$X264/lib"

fi

if [ "$FDK_AAC" ]

then

CFLAGS="$CFLAGS -I$FDK_AAC/include"

LDFLAGS="$LDFLAGS -L$FDK_AAC/lib"

fi

XCRUN_SDK=`echo $PLATFORM | tr '[:upper:]' '[:lower:]'`

CC="xcrun -sdk $XCRUN_SDK clang"

if [ "$ARCH" = "arm64" ]

then

AS="gas-preprocessor.pl -arch aarch64 -- $CC"

else

AS="gas-preprocessor.pl -- $CC"

fi

TMPDIR=${TMPDIR/%\/} $CWD/$SOURCE/configure \

--target-os=darwin \

--arch=$ARCH \

--cc="$CC" \

--as="$AS" \

$CONFIGURE_FLAGS \

--extra-cflags="$CFLAGS" \

--extra-ldflags="$LDFLAGS" \

--prefix="$STATICDIR/$ARCH" \

|| exit 1

make -j3 install $EXPORT || exit 1

cd $CWD

done

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#中形态各异的class

本篇是基本知识,老码农请无视!!!普通静态抽象密封分部修饰关键字无staticabstractsealedpartial构造函数调用时机实例化(new)时内部任意静态成员调用时子类实例化(new)时实例化(new)时实例化(new)时包含成员字段属性方法事件索引器…

mysql 笛卡尔积_Mysql内连接、左连接会出现笛卡尔积的理解

先简单解释一下笛卡尔积。 现在,我们有两个集合A和B。 A = {0,1} B = {2,3,4} 集合 AB 和 BA的结果集就可以分别表示为以下这种形式: AB = {(0,2),(1,2),(0,3),(1,3),(0,4),(1,4)}; BA = {(2,0),(2,1),(3,0),(3,1),(4,0),(4,1)}; 以上AB和BA的结…

开放数字世界中的复杂图数据挑战 —— 以教育与开源场景为例

摘要:开源开放的数字世界开始成为时代的潮流,云原生、数据中台、智能PRA开始成为数字世界中的新一代中流砥柱。随着第四范式的普遍流行,各个行业中的数字化转型都会带了海量的具有无限关联的复杂图数据。本报告将以教育与开源两个场景为例&am…

mysql anyvalue函数_Mysql 的ANY_VALUE()函数和 ONLY_FULL_GROUP_BY 模式

Mysql 的ANY_VALUE()函数和 ONLY_FULL_GROUP_BY 模式1、ONLY_FULL_GROUP_BY 引发在mysql 5.7版本以上进行一些ORDER BY 或者 GROUP BY 时,会出现如下错误[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated colu…

在IIS中部署SPA应用,多么痛的领悟!

目前公司的Web项目是SPA应用,采用前后端分离开发,所以有时也会倒腾Vue框架。“前后端应用最终以容器形态、在k8s中部署, 为此我搭建了基于Gitlab flow的Devops流程。在Devops实践中,容器部署成为良方和事实标准。但是在开发和自测阶段&#x…

mysql闪回工具下载_MySQL闪回工具之myflash 和 binlog2sql

实践利用binlog2sql查询两个binlog之间的SQL:必须是两个binlog日志,指定start-file和stop-filebinlog2sql -h127.0.0.1 -P3309 -udba -pxxxxxx -dsakila -t employee --start-filemysql-bin.000112 --stop-filemysql-bin.000113 > /tmp/db.sql利用bin…

MySQL大表优化方案

背景阿里云RDS FOR MySQL(MySQL5.7版本)数据库业务表每月新增数据量超过千万,随着数据量持续增加,我们业务出现大表慢查询,在业务高峰期主业务表的慢查询需要几十秒严重影响业务方案概述一、数据库设计及索引优化MySQL数据库本身高度灵活,造成…

使用Azure静态Web应用部署Blazor Webassembly应用

上一次演示了如何使用Azure静态web应用部署VUE前端项目(使用Azure静态web应用全自动部署VUE站点)。我们知道静态web应用支持VUE,react,angular等项目的部署。除了支持这些常见前端框架,静态web应用同样支持微软推出的最…

mysql无法创建新用户_如何mysql禁止创建新用户

展开全部使用户不具有e69da5e6ba9062616964757a686964616f31333337376264Create User权限或者deny Create User权限下面是权限列表mysql> show privileges \G*************************** 1. row ***************************Privilege: AlterContext: TablesComment: To al…

TIOBE 11 月榜单:Python 挤掉 Java,Java的下跌趋势确立了?

喜欢就关注我们吧!TIOBE 公布了 2020 年 11 月的编程语言排行榜。Python 已成功跃居榜单第二名,本月排名率为 12.12%;Java 被挤到第三位,排名率降至 11.68%。自有 TIOBE 榜单以来,C 和 Java 之前一直占据着前两名的位置…

mysql mysqladmin 介绍_Mysql—mysqladmin 命令详解

mysqladmin是一个执行管理操作的客户端程序。它可以用来检查服务器的配置和当前状态、创建和删除数据库等。mysqladmin工具的使用格式:mysqladmin [option] command [command option] command ......1.查看mysql的安装目录,进入mysql命令行输入&#xff…

一路踩坑,被迫聊聊 C# 代码调试技巧和远程调试

一:背景 1. 讲故事每次项目预交付的时候,总会遇到各种奇葩的坑,我觉得有必要梳理一下以及如何快速解决的,让后来人避避坑,这篇就聊聊自己的所闻所遇:我去,本地环境代码跑的哧溜,上了…

mysql decimal型转化为float_5分钟搞懂MySQL数据类型之数值型DECIMAL类型

速成指南5分钟搞懂MySQL数据类型之数值型--DECIMAL类型DECIMAL类型的语法:DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]。其中M指定的是数字的总位数(精度,最大65,默认值10),D指定的是小数点后数字的位数(最大30,并且不能大…

mysql 变量 数据类型_浅谈mysql(二)数据类型

//我。。。我才是不是傲娇呢//如有问题还请多多指教。上回我们说到我们如何使用MySQL,关键是要看它的用途。用途衍生语句。之后文章的思路,也是如此,从用途出发,然后再到语句。那么,我们先问几个问题,我们用…

Java面试必问JVM调优,那.NET5呢?

JVM调优已经是普通Java工程师的必修课了,而.NET开源快5年了,CLR层面的优化到目前都不多见,甚至常用的性能调优工具都还没玩过。.NET5马上来了,要想在互联网大潮中逆袭,光靠平台是不够的,开发者也得给力才行…

win10新建管理员账户_【经验篇001】Win10专业版如何开启超级管理员账户

关注我们前言介绍我们在使用Win10系统的时候,有时候安装一些特殊的专业类软件,需要系统赋予软件特殊的权限,那就需要使用超级管理员帐户,Win10系统安装时候,Administrator账户默认是禁用的,所以我们就需要开…

SQL Server in Docker - 还原数据库

SQL Server in Docker 还原数据库上一回演示了如果在Docker环境下安装SQL Server(使用Docker运行SQL Server),这次我们来演示下如何还原一个数据库备份文件到数据库实例上。使用winscp上传bak文件到linux服务器上一回我们启动docker容器的时候使用了-v参数挂账了本地…

Xamarin 从零开始部署 iOS 上的 Walterlv.CloudKeyboard 应用

本文将告诉大家如何从零开始在 iOS 上部署 Walterlv.CloudKeyboard 应用。这个 Walterlv.CloudKeyboard 应用是一个云输入法应用,在 GitHub 完全开源,采用 Xamarin 开发,用途是让手机接收电脑端的打字输入的输入法。因为我没有在 iOS 上找到任…

c 命令导出数据到mysql_MySQL命令行导出数据库

MySQL命令行导出数据库:1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录如我输入的命令行:cd C:\Program Files\MySQL\MySQL Server 4.1\bin(或者直接将windows的环境变量path中添加该目录)2,导出数据库&am…

mysql权限create细化_mysql权限精细化分配-阿里云开发者社区

mysql中可以给你一个用户授予如select,insert,update,delete等其中的一个或者多个权限,主要使用grant命令,用法格式为:grant 权限 on 数据库对象 to 用户一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利grant select on testdb…