目录
【FFmpeg】(一) 音视频相关基础知识以及FFmpeg介绍
一、音视频相关基础知识
1、视频播放器原理
视频播放器就是将一个封装的格式数据进行解封装,得到对应的音频压缩数据和视频压缩数据,再进行相应的音视频解码,得到音频采样数据和视频采样数据,最后将音频采样数据和视频采样数据同时播放,达到音视频同步。
- 封装格式数据通常有FLV、MKV、MP4、AVI、RMVB 等等
- 录音、录像的实质就是一个压缩采集到的图像或者音频数据的过程,这个过程又称为编码
- 播放视频或者音频文件,实质上是一个解压缩的过程,这个过程又称为解码
1.1 解封装
将封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起,输出特定编码格式的视频码流和A音频码流。
1.2 解码
1.2.1 音频压缩数据解码
一般我们常见的音频压缩编码标准包含AAC,MP3,AC-3,WMA 等等;通过解码将压缩编码的音频数据输出成为非压缩的音频采样数据,例如PCM数据
- AAC:数据由大小不固定的ADTS构成
- PCM:单声道的情况下按照顺序存储每个采样点的数据;双声道的情况下按照 "左右、左右"的顺序存储每个采样点两个声道的数据
采样率:也称为采样速度或者采样率,定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。采样频率的倒数是采样周期或者叫作采样时间,它是采样之间的时间间隔。通俗的讲采样频率是指计算机每秒钟采集多少个信号样本。
1.2.2 视频压缩数据解码
一般我们常见的视频的压缩编码标准则包含H.264,MPEG2,VC-1等等;压缩编码的视频数据输出成为视频像素数据(非压缩的颜色数据),例如YUV(YUV420P,YUV422P,YUV444P;最常见为YUV420P),RGB(RGB24,RGB32)等等。Y:亮度,U:色度,V:浓度
- H.264:数据由大学不固定的NALU构成,最常见情况下,1个NALU存储了1帧画面的压缩编码后的数据
1.3 音视频同步
根据解封装模块过程中获取到的参数信息,同步解码得到的音频和视频数据,并将音频和视频数据送至系统的声卡和显卡播放出来。
二、FFmpeg 介绍
1、定义
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。
2、FFmpeg 命令
2.1 视频格式转换命令
命令参数 | 说明 |
---|---|
-i | 源文件 |
-o | 输出文件 |
//进入到FFmpeg 的 bin 目录下执行以下命令
ffmpeg -i d:\\input.mp4 -o d:\\output.avi
2.2 视频转 Gif 命令
命令参数 | 说明 |
---|---|
-i | 源文件 |
-ss | 从多少秒开始 |
-t | 到多少秒介绍 |
-s | 图像的尺寸大小 |
-b:v | 码率 |
//进入到FFmpeg 的 bin 目录下执行以下命令
ffmpeg -ss 5 -t 15 -i d:\\input.mp4 -s 300x200 -b:v 1500K D:\\video_gif.gif
三、使用 visual studio 编译 FFmpeg
*注:项目根目录即创建cpp源文件所在目录
步骤:
- 在【FFmpeg官网】下载 FFmpeg 在windows 下的开发(dev)版本 ffmpeg-XXX-win64-dev
- 在 visual studio上创建一个C++的空项目
- 将下载好的 FFmpeg 包解压后,复制 include 和 lib 文件夹到刚刚创建好的项目根路径下
- 下载 FFmpeg 在windows 下的 Shared 版本ffmpeg-XXX-win64-shared,解压后赋值 bin 目录下的动态库(.dll)文件到项目根目录下
- 修改项目的配置管理器中的活动姐姐方案平台为X64(根据自己操作系统位数更改)
- 在 visual studio 中项目右键,点击【属性(ALT+Enter)】,选中【C++目录】,右侧的【包含目录】,点击编辑,增加刚刚复制到根目录下的 include 目录