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静态库 

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


FFmpeg从下载到编译_第1张图片

在执行过程中遇到了一个错误 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/

你可能感兴趣的:(FFmpeg从下载到编译)