简介
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运行脚本即可下载
解释一下脚本
#!/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/