FFmpeg从下载到编译

简介

    1.FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

官网:https://ffmpeg.org


功能

    多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。

下载

    两种方式

    1. 官网下载

        下载地址:http://www.ffmpeg.org/download.html

    2. 通过shell脚本下载

        #!/bin/bash

        source="ffmpeg-3.4"

        if [ ! -r $source ]

        then

               echo "没有FFmpeg库,我们需要下载….."

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

        fi

将上面的脚本复制保存为xxx.sh在Linux或Mac OS系统上通    .xxx.sh运行脚本即可下载


运行ffmpeg-download.sh脚本进行下载并解压

解释一下脚本

 #!/bin/bash 定义文件声明

source="ffmpeg-3.4" 定义下载的ffmpeg版本是3.4

分解  

       if [ ! -r $source ]

        then

               echo "没有FFmpeg库,我们需要下载….."

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

        fi

#if判断语句 如果条件成立那么执行then和fi之间的语句

  if [ 条件 ]

  then


   fi

# -r 检测文件是否可读,如果是,那么返回true


上面的if判读的意思是如果$source不可读就执行then下面的语句

#echo 就是向控制台输出文本内容

#"curl"命令表示:它可以通过Http\ftp等等这样的网络方式下载和上传文件(它是一个强大网络工具)

#基本格式:curl 地址

# 了解了curl命令后来理解一下这句话  curl http://ffmpeg.org/releases/${source}.tar.bz2 | tar xj || exit 1 

“|”是Linux的管道命令 作用是将前面的结果作为后面命令的输入,在上面的例子就是将curl下载好的bz2文件作为 tar xj || exit 1的输

#"tar"命令:表示解压和压缩(打包)

    基本语法:tar options

    例如:tar xj

    options选项分为很多中类型

    #-x 表示:解压文件选项

    #-j 表示:是否需要解压bz2压缩包(压缩包格式类型有很多:zip、bz2等等…)

# exit 1 表示退出脚本

# || 逻辑或运算

上面的命令完整的意思是 下载成功便解压压缩包否则退出脚本

编译

先上脚本

#!/bin/bash

source="ffmpeg-3.4"

cache="cache"

staticdir='pwd'/"tyf1946-ffmpeg-iOS"

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

archs="arm64 armv7 x86_x64 i386"

targetversion="7.0"

if [ "$*" ]

then

archs="$*"

fi

if [ ! `which yasm` ]

then

if [ ! 'which brew' ]

then

echo '安装brew'

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

fi

echo "安装brew"

brew install yasm || exit 1

fi

echo "循环编译"

currentdir='pwd'

for arch in $archs

do

echo "开始编译"

mkdir -p "$cache/$arch"

cd "$cache/$arch"

archflags="-arch $arch"

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

then

platform="iPhoneSimulator"

archflags="$archflags -mios-simulator-version-min=$targetversion"

else

platform="iPhoneOS"

archflags="$archflags -mios-version-min=$targetversion -fembed-bitcode"

if [ "$arch" = "arm64" ]

then

EXPORT="GASPP_FIX_XCODE5=1"

fi

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="$CC"

fi

echo "执行到了1"

TMPDIR=${TMPDIR/%\/} $currentdir/$source/configure \

--target-os=darwin \

--arch=$arch \

--cc="$CC" \

--as="$AS" \

$configure_flags \

--extra-cflags="$archflags" \

--extra-ldflags="$archflags" \

--prefix="$staticdir/$arch" \

|| exit 1

echo "执行了"

make -j3 install $EXPORT || exit 1

cd $currentdir

done

下载gas-preprocessor  【 https://github.com/yuvi/gas-preprocessor 】

并复制到 /usr/local/bin/ 目录  添加执行权限 chmod +x gas-preprocessor 

这个脚本编译的是iOS用的.a静态库 

执行成功后就可以看到编译好的库了


在执行过程中遇到了一个错误 C compiler test failed

查看ffbuild/config.log"日志文件

发现有这么一行xcrun: error: SDK "iphoneos" cannot be located

在终端中执行 

xcrun --sdk iphoneos --show-sdk-path

xcrun: error: SDK "iphoneos" cannot be located

查找原因

xcode-select --print-path

/Library/Developer/CommandLineTools

发现是这个Xcode路径判断错误。

xcodebuild -showsdks

xcode-select: error: tool'xcodebuild'requires Xcode, but active developer directory'/Library/Developer/CommandLineTools'is a command line tools instance

解决方法:给Xcode命令行工具指定路径

sudoxcode-select--switch /Applications/Xcode.app/Contents/Developer/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容