FFmpeg初体验 - 01
因为昨天接到了“xx”公司的面试邀请,面试要求当中有提到硬性条件是:熟练使用FFMPEG进行视频编解码,所以为了能够更好的应对面试,今天在网上查了一下关于ffmpeg的资料,首推ffpeg官方文档:https://ffmpeg.org/ffmpeg.html
FFmpeg简介
FFmpeg是一个非常快速的视频和音频转换器,也可以从现场音频/视频源获取。它还可以在任意采样率之间进行转换,并使用高质量的多相滤波器即时调整视频大小。
要使用FFMPEG,首先需要理解FFMPEG的代码结构。ffmpeg的代码是包括两部分的,一部分是library,一部分是tool。api都是在library里面,如果直接调api来操作视频的话,就需要写c或者c++了。另一部分是tool,使用的是命令行,则不需要自己去编码来实现视频操作的流程。实际上tool只不过把命令行转换为api的操作而已。
FFMPEG的安装过程
0、安装环境
1 2 | MacOS Sierra 10.12.5 Xcode 8.3.2 |
1、打开控制台,输入下面命令行进行安装:
1 | brew install ffmpeg |
2、测试是否安装成功,随便在电脑上找一个视频文件,比如xxx.mp4,把它转换为yyy.avi格式,对其进行转换格式操作,命令行如下::
1 | ffmpeg -i xxx.mp4 yyy.avi |
如果能够顺利转换,可在根目录下查到yyy.avi格式的视频文件,表明安装ffmpeg成功。
3、编译library,编译好之后可以调用FFmpeg的api。网上有一些方法,但都要自己手动编译,稍显复杂而且比较陈旧。按照app store的需求,编译出来的包还必须支持arm64。万能的github中有一个能够一键编译
的脚本,地址如下:
1 | https: //github.com/kewlbear/FFmpeg-iOS-build-script |
写这个脚本的是一个歪果仁,更新很及时,已经更新到了最新的3.3版本。下载下来,会有3个文件,其中一个是build-ffmpeg.sh脚本文件。在终端中转至脚本的目录,此处注意,一定要先进入文件所在的文件夹,在文件夹目录下执行以下命令:
1 | ./build-ffmpeg.sh |
在FFmpeg3.3版本中,执行该句命令会报如下错误:
该错误提示FFmpeg数据源没有找到,并且尝试去下载!我马上去查看了build-ffmpeg.sh这个脚本当中的source
根据命令行报错提示,定位到一定是这里除了问题,对于17年1月苹果秉承一向强硬的态度,要求所有上架的APP必须使用HTTPS协议,所以断定,一定是链接协议没有及时更新为HTTPS,稍作更改如下:
再次在终端跑一下build-ffmpeg.sh脚本
脚本则会自动从github中把ffmpeg源码下到本地并开始编译。可以看出,已经下载完成。
目录结构如下:
其中,ffmpeg-3.3是源码,FFmpeg-iOS是编译出来的库,里面有我们需要的.a静态库,一共有7个。
查看.a包支持的架构,执行命令如下:
1 | lipo -info libavcodec.a |
可查看到可支持armv7 armv7s i386 x86_64 arm64这几个架构
4.在xcode中引入FFMPEG library库
新建工程,把上面编译好的FFmpeg-iOS拖到xcode工程中,添加一个头文件引用
1 | #include "avformat.h" |
添加一个测试语句:
1 | av_register_all(); |
点击编译,会报如下错误:
很奇怪的错误,居然说XX文件找不到,此时应该在build setting当中的Header Search Paths配置文件路径,如下图所示:
添加path为你自己当前FFmpeg-iOS当中include的全路径,示例如下:
添加成功后,再次进行编译,会出现80多个错误,而且都是链接错误,错误的原因是FFmpeg依赖一部分库,此时只需要导入如下库:
编译,运行工程,如果没有报错,则表明运行成功。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· .NET Core GC压缩(compact_phase)底层原理浅谈
· Winform-耗时操作导致界面渲染滞后
· Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能
· 语音处理 开源项目 EchoSharp