赞
踩
可以通过如下三种方式安装ffmpeg
如何选择
如果仅仅是想使用命令行的ffmepg, 建议用第一种方式或第二种方式.
如果需要在Mac OS项目中使用ffmpeg, 以及修改一些ffmpeg中的源码以适应项目,使用第三种方式.
Homebrew是命令行中的软件包安装器.绝大多数知名软件包或插件都可以用它来安装. 如果你还没有安装,直接用下面的命令可以安装
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install ffmpeg
brew install ffmpeg --HEAD
brew install ffmpeg --with-fdk-aac --with-tools --with-ffplay --with-freetype --with-libass --with-libvorbis --with-opus --with-libvpx --with-x265
brew tap varenc/ffmpeg
brew install varenc/ffmpeg/ffmpeg
brew update && brew upgrade ffmpeg
brew upgrade --fetch-HEAD ffmpeg
手动编译Mac上必须安装Xcode,然后安装命令行工具
xcode-select --install
$ brew install automake fdk-aac git lame libass libtool libvorbis libvpx \
opus sdl shtool texi2html theora wget x264 x265 xvid nasm
LIBFFI_CFLAGS=-I/usr/include/ffi LIBFFI_LIBS=-lffi ./configure;make && sudo make install
glib: Linux平台下最常用的C语言函数库,它具有很好的可移植性和实用性。
Pkg-config : 维护了一个保存各个代码库的路径的数据库。当然这个”数据库” 非常的简单,其实就是一个特殊的目录,这个目录中有一系列的以 “.pc” 为后缀的文件。
GLIB_CFLAGS="-I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include" GLIB_LIBS="-lglib-2.0 -lgio-2.0" ./configure --with-pc-path="/usr/X11/lib/pkgconfig:/usr/X11/share/pkgconfig:/usr/lib/pkgconfig:/usr/local/lib/pkgconfig"
Mac OS X Lion拥有自己的stpncpy函数它跟gettext重复产生冲突。
x264: --enable-gpl --enable-libx264
fdk-aac: --enable-libfdk-aac
libvpx: --enable-libvpx
libvorbis: --enable-libvorbis
libopus:
LAME:--enable-libmp3lame
libass:--enable-libass
macOS已经安装了freetype(较老的版本可能需要在安装期间选择X11),但不是在典型的位置
在freetype的./configure
文件中加入如下指令:
CFLAGS=`freetype-config --cflags`
LDFLAGS=`freetype-config --libs` PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig:/opt/X11/lib/pkgconfig
做完以上所有依赖操作后,就可以链接下载FFmpeg源代码。可以通过Generic compilation guide查阅详细的编译步骤.运行./configure --help
,可以了解可用的选项。
$ git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
$ cd ffmpeg
$ ./configure --prefix=/usr/local --enable-gpl --enable-nonfree --enable-libass \
--enable-libfdk-aac --enable-libfreetype --enable-libmp3lame \
--enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libopus --enable-libxvid \
--samples=fate-suite/
make
$ ./configure && make
sudo make install
1>. 配置: 允许创建编译步骤所需的必要文件,并通过源包通常提供的配置脚本完成。在配置期间,可以定义安装前缀和已启用的组件。
2>. 编译: 编译通常包括在配置步骤完成后运行make。在此阶段,将生成所需的库和二进制文件。
3> 安装: 安装将在配置步骤中指定的路径中安装二进制文件和库。请注意,由于您可以使用编译路径中编译的二进制文件,因此不需要执行此步骤。
./configure
make
make install
注意: 编译源目录中的文件,并将库安装在/ usr / local中。第三步可能需要超级用户权限(因此可能需要由sudo make install替换),因为普通用户无法修改/ usr / local。
配置步骤通常允许用户指定所谓的安装前缀,并且通常通过配置选项configure --prefix = PREFIX指定,其中PREFIX通常默认为/ usr / local。前缀指定安装所有组件的公共目录。
安装中通常涉及以下目录:
一般建议使用默认路径,但如果数量使用像/ opt / PROJECT /这样的前缀,项目将安装在专用目录中,要从系统中删除,只需删除/ opt / PREFIX路径即可。但是此类安装将需要编辑所有环境变量以指向自定义路径。
环境中定义的几个变量会影响您的软件包安装。特别是,根据您的安装前缀,您可能需要更新其中一些变量,以确保系统工具可以找到已安装的组件。可以通过命令env显示环境变量列表。
以下是受影响变量的列表:
如果您在非标准路径中安装了软件包,则需要更新这些环境库,以便系统工具能够检测软件包组件。在为依赖于其他已安装的库/标头/工具的包运行配置脚本时,一定要这样做。
库名 | 用途 |
---|---|
ffmpeg | 一个命令行工具,用来对视频文件转换格式,也支持对电视卡即时编码 |
ffserver | 一个HTTP多媒体即时广播流服务器,支持时光平移 |
ffplay | 一个简单的播放器,基于SDL与FFmpeg库 |
libavcodec | 包含全部FFmpeg音频/视频编解码库 |
libavformat | 包含demuxers和muxer库 |
libavutil | 包含一些工具库 |
libpostproc | 对于视频做前处理的库 |
libavutil | 包含一些工具库 |
libswscale | libswscale |
参数名 | 意义 |
---|---|
-i | 设置输入档名。 |
-f | 设置输出格式。 |
-y | 若输出文件已存在时则覆盖文件。 |
-fs | 超过指定的文件大小时则结束转换。 |
-ss | 从指定时间开始转换。 |
-t | 从-ss时间开始转换(如-ss 00:00:01.00 -t 00:00:10.00即从00:00:01.00开始到00:00:11.00)。 |
-title | 设置标题。 |
-timestamp | 设置时间戳。 |
-vsync | 增减Frame使影音同步。 |
视频参数名 | 意义 |
---|---|
b:v | 设置视频流量,默认为200Kbit/秒。(单位请引用下方注意事项) |
r | 设置帧率值,默认为25。 |
s | 设置画面的宽与高。 |
aspect | 设置画面的比例。 |
vn | 不处理视频,于仅针对声音做处理时使用。 |
vcodec( -c:v ) | 设置视频视频编解码器,未设置时则使用与输入文件相同之编解码器。 |
声音参数名 | 意义 |
---|---|
b:a | 设置每Channel(最近的SVN版为所有Channel的总合)的流量。(单位请引用下方注意事项) |
ar | 设置采样率。 |
ac | 设置声音的Channel数。 |
acodec ( -c:a ) | 设置声音编解码器,未设置时与视频相同,使用与输入文件相同之编解码器。 |
an | 不处理声音,于仅针对视频做处理时使用。 |
vol | 设置音量大小,256为标准音量。(要设置成两倍音量时则输入512,依此类推。) |
ffmpeg -i /Users/tomxiang/Desktop/h265/test_tomxiang.h265
ffmpeg -i /Users/tomxiang/Desktop/test_tomxiang.h265 -c:v libx265 /Users/tomxiang/xxtest/test265.mp4
ffplay -vf "drawtext=fontfile=/Library/Fonts/Arial.ttf:text=%{n}:box=1:x=(w-tw)/2:y=h-(2*lh)" sample.mp4
准备工作,先把下面四个软件下载下来。
2) SDL 注意:在此环境下2.0.3版本的源码编译会有问题,不推荐。
3)yasm
4)FFmpeg
MinGW(Minimalist GNU for Windows):辅助编译Windows程序的工具链。通过minGW installation manager来安装。
MSYS(Minimal SYStem):是一个小型的GNU环境,包括基本的bash,make等等。它也可以通过minGW installation manager进行安装。
打开minGW installation manager,按照下图进行勾选:
点击Installation->Apply Changes 进行安装基本包。
yasm是汇编编译器,因为ffmpeg中为了提高效率用到了汇编指令,比如MMX和SSE。因此需要安装这个工具。
如果没有安装yasm或nasm,在编译的时候会遇到这样的错误“nasm/yasm not found or too old.”
下载 yasm ,并将可执行行文件重命名为yasm.exe复制到%MINGW_PATH%/bin
目录下。其中MINGW_PATH是MINGW的安装目录。
把yasm源码包解压到F:\Work\ffmpeg-2.4\yasm1.2.0目录。进入yasm目录,分别执行命令:
./configure --prefix=/usr/local/yasm
make
make install
export PATH="$PATH:/usr/local/yasm/bin"
pkg-config是一个辅助的配置、链接工具,可以方便的支持gcc自动配置。
建议参考:pkg-config for mingw 安装及配置
注意配置好环境变量,PKG_CONFIG_PATH(pkg-config默认的库依赖项查找目录)。
也可以把pkg-config.exe放到%MINGW_PATH%/bin
下。
由于编译ffplay需要SDL,所以需要先安装SDL。
./configure --prefix=/usr/local/SDL
make
make install
完成SDL的安装。
SDL编译完成之后,生成的bin文件、include文件、lib文件存放在C:\msys\1.0\local\SDL
目录下。
通过下面命令导入SDL环境变量.
export PATH="$PATH:/usr/local/SDL/bin:/usr/local/SDL/include:/usr/local/SDL/lib"
如果没有设置环境变量,在执行ffmpeg configure
时,SDL support项显示为no.(注:mingw默认根目录对应与windows下的C:\msys\1.0\目录,可以通过echo $PATH查看当前的系统路径)
%MINGW_PAH%/msys/1.0
的对应目录下。ib/pkg-config/sdl2.pc
中prefix=/opt/local/x86_64-w64-mingw32
的prefix的路径修改为%MINGW_PAH%/msys/1.0
,还有几处prefix指定为/opt/local/x86_64-w64-mingw32
的地方也需要修改一下,可以全局搜索替换一下(没有找到更好的方法)。说明:
当编译参数加上–enable-sdl时如果没有找到匹配的sdl会报错提示,如果不加这个参数,没有报错提示。
遇到问题可以查看config.log中测试sdl部分的日志,检查是否存在sdl版本或者指定的库的位置有问题。我就遇到了prefix指定的sdl位置不对,导致指定的编译的头文件位置不对导致找不到头文件的问题。
# 进入FFmpeg源码目录
cd FFmpeg
# 配置编译参数
./configure --prefix=../buildout --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl
# 编译
make
make install
运行git config --global core.autocrlf false
然后运行下面的命令删除ffmpeg代码,并重新获取一下即可
把下载的sdl中的bin目录下的SDL2.dll拷贝到ffplay.exe所在的目录。
iOS上编解码分为两种,硬编解码和软编解码,可以参考下表:
类型 | 工具 | 硬件支持 | 后台 | 思路 | 备注 |
---|---|---|---|---|---|
硬编解码 | VideoToolBox | 非CPU或者专用处理器 | 编码(iOS>=10.0),解码不支持 | VideoVTToolBox | - |
硬编解码 | AVAssetWriter | 非CPU或者专用处理器 | 支持编码 | 需要将视频写入本地文件,然后通过实时监听文件内容的改变,读取文件并处理封包 | - |
软编解码 | FFmpeg | CPU | 支持 | - | - |
如果仅仅是想简单直接使用ffmeg可以下载一个稳定版本的静态库, 建议用第一种方式.
如果需要在iOS项目中自定义使用ffmpeg, 以及修改一些ffmpeg中的源码以适应项目,使用第二种方式.
提取码: 5400
此文件是编译FFmpeg必备的脚本文件,使用如下命令将其拷贝进bin下
cp -f /xxx/gas-preprocessor.pl /usr/local/bin/
下载yasm
yasm是一个完全重写的NASM汇编并且支持x86和AMD64指令集.
brew install yasm
下载 x264-iOS编译脚本 及 源码
修改后如图:
因为编译脚本中指定文件目录为x264,所以需要改名,也可以改编译脚本
最好手动强制设置下GCC位置,否则可能会报错,然后执行命令:
cd 到你的x264-ios-master文件夹下,然后执行命令:
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/
./build-x264.sh
No working C compiler found
: 新版mac直接编译会报错,原因是gcc一些必要工具找不到.可能是xcode位置换了的原因,因为我们主要使用真机调试,所以我们在编译脚本中只保留arm64即可,如下修改后,可以直接编译通过. 不过像模拟器这样的设置是无法使用x264的,因为我们相当于仅编译了真机所需的库.ARCHS="arm64 x86_64 i386 armv7 armv7s"
改为如下
ARCHS="arm64"
注意: 在这里可以仅下载FFmpeg-iOS编译脚本,不用下载源码,执行脚本会自动下载源码,如果不想每次自动下载,可以手动下载源码,稍微修改下FFmpeg编译脚本即可.这里不做过多说明.
CFLAGS="$CFLAGS -mios-version-min=$DEPLOYMENT_TARGET -fembed-bitcode"
修改为
CFLAGS="$CFLAGS -mios-version-min=$DEPLOYMENT_TARGET"
在build-ffmpeg.sh中找到104行,修改为CFLAGS="$CFLAGS -mios-version-min=$DEPLOYMENT_TARGET"
如下图:
4. 因为我们在上一步中仅仅编译arm64的x264,所以这里我们也仅仅编译arm64的FFmpeg.稍微修改脚本文件即可.
ARCHS="arm64 armv7 x86_64 i386"
修改为
ARCHS="arm64"
在build-ffmpeg.sh中找到37行:ARCHS="arm64 armv7 x86_64 i386"
修改为:ARCHS="arm64"
。如下图所示:
5. 如果要使用avutil.h相关功能,需要更改脚本
FFmpeg框架中的一个结构体命名为"AVMediaType"与苹果自带框架产生冲突,所以,我们必须修改编译脚本,使用"FFmpegAVMediaType"带替换"AVMediaType".这里需要在脚本文件中添加如下命令行,即将AVMediaType
替换为FFmpegAVMediaType
. 注意: $SOURCE为ffmpeg的根目录.
grep -rl AVMediaType ./$SOURCE | xargs sed -i .bak s@AVMediaType@FFmpegAVMediaType@g
./build-ffmpeg.sh
执行脚本后,会先下载源码:
7.
Xcode新建iOS项目
新建一个iOS工程,然后将ViewController.m
重命名为 ViewController.mm
,因为 FFmpeg中涉及C,C++混编,所以需要做此操作.
将FFmpeg编译好的头文件与库拉进项目中,并在主控制器测试代码,此时会有一大堆错误抛出,下面逐个解决.
添加依赖库
在Build Setting中禁止Bitcode
在Build Setting中设置头文件与库的位置
这里特别要注意,因为在大多数项目中以及FFmpeg自身源代码中,都是以以下格式来导入的头文件
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。