Qt开发笔记之编码x264码流并封装mp4
《Qt开发笔记之编码h264码流并封装mp4(一):x264介绍、windows平台x264库编译》
《Qt开发笔记之编码h264码流并封装mp4(二):windows平台x264添加mp4支持,gpac库的介绍与编译》
《Qt开发笔记之编码h264码流并封装mp4(三):Qt使用x264库对.yuv文件编码为.h264文件》
《Qt开发笔记之编码h264码流并封装mp4(四):mp4v2库的介绍和windows平台编译》
《Qt开发笔记之编码h264码流并封装mp4(五):ubuntu平台编译x264》
《Qt开发笔记之编码h264码流并封装mp4(六):ubuntu平台编译mp4v2并封装mp4》
前话
本篇介绍x264,使用mingw32编译该库,并使用x264将yuv文件编码为.h264文件。
Windows下使用视频编码一般使用opencv、ffmpeg、vlc,opencv其实也是调用ffmpeg,ffmpeg底层又调用了其他编码的库,与此类似的vlc平台也是一样。
x264库介绍
功能概述
- 提供一流的性能,压缩和功能。
- 实现出色的性能,在一台消费者级计算机上实时编码4个或更多1080p流。
- 提供最好的质量,具有最先进的心理视觉优化。
- 许多不同应用程序所必需的支持功能,例如电视广播,蓝光低延迟视频应用程序和Web视频。
- x264构成了许多网络视频服务的核心,例如Youtube,Facebook,Vimeo和Hulu。它已被电视广播公司和ISP广泛使用。
编码器功能
- 8x8和4x4自适应空间变换
- 自适应B帧放置
- B帧作为参考/任意帧顺序
- CAVLC / CABAC熵编码
- 自定义量化矩阵
- 内部:所有宏块类型(具有所有预测的16x16、8x8、4x4和PCM)
- Inter P:所有分区(从16x16到4x4)
- Inter B:从16x16到8x8的分区(包括跳过/直接)
- 隔行扫描(MBAFF)
- 多个参考系
- 速率控制:恒定量化器,恒定质量,单通道或多通道ABR,可选VBV
- 场景切换检测
- B帧中的时空直接模式,自适应模式选择
- 在多个CPU上并行编码
- 预测性无损模式
- 用于细节保留的Psy优化(自适应量化,psy-RD,psy-网格)
- 任意调整比特率分布的区域
使用x254编解码库的软件
- Avidemux
- ELDER
- ffdshow
- ffmpeg
- GordianKnot
- Handbrake
- LiVES
- MeGUI
- MEncoder
- Bencos (formerly RealAnime)
- StaxRip
- VLC media player
…and many more
x264库下载
下载地址:https://www.videolan.org/developers/x264.html
Windows下x264库编译
步骤一:下载,放入编译文件夹并解压,如下图:
步骤二:安装Msys环境
笔者使用环境为win10+Qt5.9.3 mingw32,而x264库不支持CMake,所以只能搭建mingw的msys环境(windows下的仿linux环境)。
读者看心情选吧,为了环境可控,建议msys1.0。
下载msys:https://download.csdn.net/download/qq21497936/12009320
或者下载msys2:http://www.msys2.org
(msys2比msys更智能,并带有基础的编译环境,但是编译涉及到其他基础编译库和工具等等,所以使用之前需要检查版本,版本不合适则安装和修改环境变量切换到目标版本)
步骤三:部署mingw32编译环境
安装好后,将Qt5.9,3的mingw拷贝到msys根目录文件夹
并检查环境,如下图:
步骤四:迁移源代码至msys
步骤五:linux的常规编译步骤,configure配置
./configure –enbale-shared
./configure --enable-shared --disable-asm
(补充解释下--enable-asm:纯C实现,不使用汇编代码,那部分是针对各个CPU架构做专门优化的。一般不需要disable)。
重新配置下,主要是prefix参数配置install路径,好方便我们提取头文件和库文件:
./configure --enable-shared --disable-asm --prefix=/home/21497/compile/x264/x264-snapshot-20191130-2245/install
(注意:此处对mp4是不支持的,“mp4: no”,要支持mp4请看:
《Qt开发笔记之编码x264码流并封装mp4(二):windows平台x264添加mp4支持,gpac库的介绍与编译》
步骤六:linux的常规编译步骤,make(mingw32-make.exe)
mingw32-make.exe
步骤七:linux的常规编译步骤,make install(mingw32-make.exe install)
提取可执行文件、头文件和库文件,如下图:
Windows平台x264库模块化
其中x264Manager.pri文件内容,如下图:
建立模板工程测试,报错如下:
添加”stdint.h”头文件,如下图:
编译测试通过。
工程模板v1.0.0
Windows下mingw32的x264工程模板v1.0,0
Yuv格式文件下载
测试文件yuv下载地址:
http://www.cipr.rpi.edu/resource/sequences/index.html
http://trace.eas.asu.edu/yuv/index.html
连不上或者下载太慢,笔者下载一个后上传到CSDN
CSDN下载地址(三个文件,2个yuv,1个y4m):
https://download.csdn.net/download/qq21497936/12010079
视频格式
- .y4m:Y4m(YUV4MPEG2)文件格式是一种以头文件存储视频规格的未压缩视频序列。简单来说,在原始的YUV序列的起始和每一帧的头部都加入了纯文字形式的视频参数信息,包括分辨率、帧率、逐行/隔行扫描方式、高宽比,以及每一起始帧标志位。
- .h264:h264不属于视频格式,而是一种视频编码标准,跟avi、mpg不属于同一类。
- .flv:FLASH VIDEO的简称,FLV流媒体格式是随着Flash MX的推出发展而来的视频格式。由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,它的出现有效地解决了视频文件导入Flash后,使导出的SWF文件体积庞大,不能在网络上很好的使用等问题。
- .mp4:全称MPEG-4 Part 14,是一种使用MPEG-4的多媒体电脑档案格式, Mp4实际为容器,包含编码数据,编码与mp4没有直接关系。
使用x264命令行测试
Yuv格式编码到flv
Yuv格式编码到mp4