Qt+FFmpeg开发视频播放器笔记(一):环境搭建

一、FFmpeg介绍

FFmpeg是一个开源的跨平台多媒体处理工具集,它可以用于处理音频、视频和其他多媒体数据。FFmpeg提供了一组功能强大的命令行工具,用于音频和视频的编解码、转换、处理、流媒体传输等任务。

FFmpeg支持多种音频和视频格式,包括常见的MP3、AAC、FLAC、H.264、H.265等。它可以进行音频和视频的编码(将数据压缩为特定格式)、解码(将数据解压为原始格式)、转码(在不同格式之间进行转换)、剪辑、合并、提取音频或视频流、添加字幕、调整音量、应用滤镜效果等操作。

FFmpeg是一个非常灵活和强大的工具集,广泛应用于多媒体处理领域。它被许多软件、平台和服务所使用,包括视频编辑软件、流媒体服务器、音频播放器、视频转码服务等。由于其开源的特性,FFmpeg也得到了广泛的社区支持和贡献,使其不断发展和改进。

FFmpeg的基本结构

FFmpeg由多个核心组件组成,它们共同构成了这个多媒体处理工具集的基础。以下是FFmpeg的基本组成:

libavcodec :这是FFmpeg的核心编解码库,提供了音频和视频编解码器的实现。它支持各种格式的音频和视频编码,包括常见的MP3、AAC、FLAC、H.264、H.265等。libavcodec负责将音频和视频数据从一种格式转换为另一种格式。

libavformat :这个组件处理音频和视频的容器格式(例如MP4、AVI、MKV等)。它能够解析和封装多种容器格式,使得FFmpeg可以读取和写入不同的音频和视频文件

libavfilter :这是FFmpeg的滤镜库,用于实现各种音频和视频的滤镜效果,如调整亮度、对比度、色彩平衡,添加水印,去噪等。libavfilter允许用户在处理音频和视频时应用各种视觉和音频效果。

libavutil :这是一个辅助库,提供了一些常用的工具函数,用于处理音频、视频和其他多媒体数据。它包含了数据结构、数学运算、时间管理、内存管理等功能,为其他组件提供了基础支持。

libswscale :这个组件用于图像的缩放和颜色空间转换。它能够将不同分辨率和不同颜色空间的图像进行转换,以适应不同的显示设备或编码要求。

除了上述核心组件外,FFmpeg还包含许多其他的辅助工具和库,用于处理音频、视频和其他多媒体任务。例如,命令行工具FFmpegffprobe是常用的工具,用于执行音视频转码、分析多媒体文件等操作。

总之,FFmpeg的基本组成是由编解码库、容器处理库、滤镜库、工具库等多个组件构成,它们协同工作,提供了丰富的功能和灵活性,使得FFmpeg成为一个强大的多媒体处理工具集。

点击下载:ffmpeg

二、软件说明

Qt Creator版本:

安装可以参考Qt版本资源备份及安装教程

FFmpeg版本

下载地址:https://ffmpeg.zeranoe.com/builds/,我自己使用的版本是5.1版本。

三、配置FFmpeg

  1. 下载好FFmpeg后解压出来。
  2. 新建一个Qt项目。
  3. 在Qt项目文件中添加所需的库,如下图。
  4. 然后构建项目,可以看到生成的构建文件夹。
  5. 把下载的ffmpeg文件夹中的dll文件,拷贝到生成的exe文件夹中。

四、测试例子

我们测试ffmpeg。在刚才创建的项目中添加以下内容:

cpp 复制代码
extern "C"
{
    #include <libavcodec/avcodec.h>
    #include <libavformat/avformat.h>
    #include <libswscale/swscale.h>
    #include <libavdevice/avdevice.h>
    #include <libavformat/version.h>
    #include <libavutil/time.h>
    #include <libavutil/mathematics.h>
 
    #undef main
}
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
    qDebug()<<"this test ffmpeg!";
    unsigned version = avcodec_version();
    qDebug()<<"ffmpeg version:"<<version;
 
    return a.exec();
}

运行,可以看到控制台输出ffmpeg版本;

相关推荐
委婉待续11 分钟前
Qt的学习(一)
开发语言·qt·学习
笨笨马甲11 分钟前
Qt Quick Layout功能及架构
开发语言·qt
Dovis(誓平步青云)21 分钟前
探索C++标准模板库(STL):String接口的底层实现(下篇)
开发语言·c++·stl·string
KyollBM1 小时前
【CF】Day75——CF (Div. 2) B (数学 + 贪心) + CF 882 (Div. 2) C (01Trie | 区间最大异或和)
c语言·c++·算法
feiyangqingyun1 小时前
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
c++·qt·udp·gb28181
CV点灯大师1 小时前
C++算法训练营 Day10 栈与队列(1)
c++·redis·算法
jllws12 小时前
Qt学习及使用_第1部分_认识Qt---学习目的及技术准备
qt·c++框架
成工小白2 小时前
【C++ 】智能指针:内存管理的 “自动导航仪”
开发语言·c++·智能指针
sc写算法2 小时前
基于nlohmann/json 实现 从C++对象转换成JSON数据格式
开发语言·c++·json
SunkingYang2 小时前
C++中如何遍历map?
c++·stl·map·遍历·方法