【写在前面】
首先,需要说明的是,本系列学习教程是根据自己学习的经历而写,不过,因为自己刚开始接触音视频,所以基本可以算是零基础的了,并且对音视频的一堆概念也是了解不多,因此会尽量写的基础和详细。
然后,现在网上关于 FFmpeg 的教程资料,很多都是从官方例子直接copy,还不如自己看源码,而稍微详细点大都很老了,在新的版本(我的是4.2)中,很多老 API 都弃用了,并且有更加方便易用的新 API,这也是本系列的意义所在。
接着,关于界面部分,还是使用熟悉的 Qt / Qml,这方面资料就更少了,想想又是一堆坑要踩Ծ‸ Ծ 。
最后,本篇就简单介绍一下环境搭建。
【正文开始】
对了,先介绍一下 FFmpeg:
FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created. It supports the most obscure ancient formats up to the cutting edge. No matter if they were designed by some standards committee, the community or a corporation. It is also highly portable: FFmpeg compiles, runs, and passes our testing infrastructure FATEacross Linux, Mac OS X, Microsoft Windows, the BSDs, Solaris, etc. under a wide variety of build environments, machine architectures, and configurations.
翻译:
FFmpeg是领先的多媒体框架,提供了音视频的编码,解码,转码,封装,解封装,流,滤镜(滤波器),播放等功能。它几乎支持所有的音视频格式,不管是标准委员会,社区,还是公司设计的。它是高度可移植,跨平台的:可以在Linux, Mac OS X, Microsoft Windows, the BSDs, Solaris等系统上,在各种不同的编译环境,机器架构,配置下编译,运行,并通过测试。
FFmpeg 本身是开源项目,并且在 LGPL/GPL 协议下发布的,因此任何人都可以自由使用,只要遵守 LGPL/GPL 协议。
FFmpeg 官网是www.ffmpeg.org。
1、下载 Windows 版的 FFmpeg 构建包,进入https://ffmpeg.zeranoe.com/builds/
选择版本[4.2]-> 系统架构[Wndow 64-bit],然后下载[Shared] + [Dev] (也可以全下)。
2、下载完解压,现在介绍一些它们:
ffmpeg_dev:包含 example 例子、include 头文件、lib 静态链接库。
ffmpeg_shared:包含 bin 动态库、doc 文档、presets不清楚。
并且在 ffmpeg_shared/bin 下提供了三个命令行工具:
ffmpeg.exe:视频转换工具。
ffplay.exe:视频播放工具。
ffprobe.exe:视频分析工具。
3、在 Qt 中使用 FFmpeg:
首先随便新建一个项目,然后添加路径并链接库,在 pro 里面加上:
INCLUDEPATH += $$PWD/../ffmpeg_dev/include
LIBS += -L$$PWD/../ffmpeg_dev/lib/ -lavutil
main.cpp 来测试一下:
#include <QCoreApplication>
extern "C"
{
#include <libavutil/avutil.h>
}
int main(int argc, char **argv)
{
QCoreApplication a(argc, argv);
printf("FFmpeg Version :%s", av_version_info());
return a.exec();
}
注意:因为 FFmpeg 是 C 库,所以在 include 的时候需要使用 extern "C"。
extern "C"
被 extern 限定的函数或变量是 extern 类型的
被 extern "C" 修饰的变量和函数是按照 C 语言方式编译和链接的
效果图如下:
【结语】
好了,FFmpeg 的环境搭建还是很简单的(Windows下)。
后面开始正式写用法,并且自己也是一边学一边写,难免有很多不足之处,还望多多指正~
最后,系列项目地址:https://github.com/mengps/FFmpeg-Learn