最近的项目中有很多对音频、视频、图片等多媒体素材的处理,最然有相关部门给我们的编辑器提供接口,我们只是调用就行了。当我比较好奇接口的实现,打听到原来是主要使用了 ffmpeg。我刚入行时还干过两三年多媒体设计。比如课件动画制作、展会演示什么得,那时可是 Authorware、Director、Flash 大行其道得年代。
概念
ffmpeg 是一个开源跨平台的音视频处理库和工具集,可以用来进行音视频的录制、转码、编辑、流媒体等处理。
组成
ffmpeg 主要有三个部分:
- 工具软件
- ffmpeg.exe:音视频转码、转换器
- ffplay.exe:单的音视频播放器
- ffserver.exe:流媒体服务器
- ffprobe.exe:简单的多媒体码流分析器
- SDK
供开发者使用的 SDK,为各个不同平台编译完成的库。如果说上面的四个工具软件都是完整成品形式的玩具,那么这些库就相当于乐高积木一样,我们可以根据自己的需求使用这些库开发自己的应用程序。这些库有:
- libavcodec:包含音视频编码器和解码器
- libavutil:包含多媒体应用常用的简化编程的工具,如随机数生成器、数据结构、数学函数等功能
- libavformat:包含多种多媒体容器格式的封装、解封装工具
- libavfilter:包含多媒体处理常用的滤镜功能
- libavdevice:用于音视频数据采集和渲染等功能的设备相关
- libswscale:用于图像缩放和色彩空间和像素格式转换功能
- libswresample:用于音频重采样和格式转换等功能
- 源代码
无论是编译出来的可执行程序还是 SDK,都是由这些源代码编译出来的。ffmpeg 的源代码由 C 语言实现,主要在 Linux 平台上进行开发。ffmpeg 不是一个孤立的工程,它还存在多个依赖的第三方工程来增强它自身的功能。我们暂时不会涉及太多源代码相关的内容,主要以 ffmpeg 的工具和 SDK 的调用为主。
工作原理
ffmpeg 的工作原理大致如下:
- 解封装:从音视频文件中分离出音频流和视频流。
- 解码:对音视频流进行解码,将其转换成原始的音频帧和视频帧。
- 处理:对音频帧和视频帧进行各种处理,例如变速、变调、滤镜等。
- 编码:将处理后的音频帧和视频帧重新编码,以生成新的音视频流。
- 封装:将新的音视频流封装成各种格式的文件,例如 MP4、AVI、FLV 等。
在执行以上操作时,ffmpeg 会使用不同的编解码器、滤镜等工具进行处理。这些工具大多数是通过开源方式实现的,因此 ffmpeg 的可扩展性非常强。同时,ffmpeg 还提供了命令行工具和 API 接口,方便开发者进行音视频处理和应用开发。
下载安装
在官网上我们可以找到“Download”页面,该页上可以下载 ffmpeg 的工具、库和源代码等。在选择“Windows Packages”下的 Windows Builds 后,会跳转到 Windows 版本的下载页面:
点击 “Windows builds from gyan.dev”,选择 最新的发行完全版 “release-full.7z” 下载。
解压安装包到目标目录,比如 D:\ffmpeg
,将 D:\ffmpeg\bin
添加到系统变量 path
中。
打开终端命令行,执行以下命令:
ffmepg -versiom
安装成功的话会打印当前 ffmpeg 的版本。
总结
本节我们主要讲解了 ffmpeg 的 工作原理及开发环境的搭建。下节我们将讲述怎样使用 ffmpeg 来处理音频。
## 链接
评论 (0)