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版本;

相关推荐
计算机内卷的N天18 分钟前
UI样式表(悬停hover状态样式和按下pressed)
qt
old_power37 分钟前
【PCL】Segmentation 模块—— 基于图割算法的点云分割(Min-Cut Based Segmentation)
c++·算法·计算机视觉·3d
涛ing1 小时前
21. C语言 `typedef`:类型重命名
linux·c语言·开发语言·c++·vscode·算法·visual studio
PaLu-LI2 小时前
ORB-SLAM2源码学习:Initializer.cc⑧: Initializer::CheckRT检验三角化结果
c++·人工智能·opencv·学习·ubuntu·计算机视觉
攻城狮7号3 小时前
【10.2】队列-设计循环队列
数据结构·c++·算法
JANG10243 小时前
【Qt】窗口
开发语言·qt
_DCG_4 小时前
c++常见设计模式之装饰器模式
c++·设计模式·装饰器模式
w(゚Д゚)w吓洗宝宝了4 小时前
设计模式概述 - 设计模式的重要性
c++·设计模式
7yewh4 小时前
嵌入式知识点总结 C/C++ 专题提升(七)-位操作
c语言·c++·stm32·单片机·mcu·物联网·位操作
winxp-pic5 小时前
视频行为分析系统,可做安全行为检测,比如周界入侵,打架
安全·音视频