【摘要】
本文主要汇总音视频和图像相关领域的基本概念,不断完善中.
【音视频调试工具】
1 码流分析工具StreamEye : Elecard StreamEye (StreamEye) tools
2 yuv分析工具YUV viewer : 商用的码流分析工具/ YUV viewer
3 音频分析工具coolpro2
4 VLC 拉流;
[开源]
ffmpeg开源地址: http://ffmpeg.org/
sdl开源地址:https://libsdl.org/
用ffmpeg把H264数据流解码成YUV420P
mjpg-stream的移植
https://github.com/jacksonliam/mjpg-streamer
窗口播放:
1 如果是独立打开的窗口,可以用下面的方式创建窗体
SDL_Window *screen = SDL_CreateWindow("Simplest FFmpeg Read Camera",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
screen_w, screen_h,
SDL_WINDOW_OPENGL);
2 CWnd *pwnd=GetOwner();
handle=(void *)pwnd->GetSafeHwnd();
screen = SDL_CreateWindowFrom(handle);
SDL绑定播放窗口 及 视频窗口缩放 参考class CWnd;类的实现,如GetWindowRect();
MFC中如何利用ffmpeg和SDL2.0多线程多窗口播放摄像头的视频
FFmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器
RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中
SDL播放YUV : FFmpeg再学习 -- SDL 环境搭建和视频显示
基于<最简单的基于FFMPEG+SDL的视频播放器 ver2 (采用SDL2.0)>的一些个人总结
ffmpeg最简单的解码保存YUV数据
FFmpeg视频文件解码为YUV数据
FFmpeg新旧接口对照使用笔记
【ffmpeg】FFMPEG 命令行常用方法示例
ffplay使用详解
ffmpeg中的sws_scale算法性能测试
ffmpeg解码yuv过程:
1 FFmpeg使用流程
2 ffmpeg 新版解码过程:FFmpeg入门系列教程(三)
ffmpeg解码码流命令:
ffmpeg -i 720P.264 -s 1280x720 -pix_fmt yuv422p 720P-out.yuv
简化版:ffmpeg -i 720P.264 720P-out.yuv
ffmpeg yuv转avi:
ffmpeg -s wxh -pix_fmt yuv420p -i input.yuv -vcodec mpeg4 output.avi
ffmpeg -s wxh -pix_fmt yuv420p -i input.yuv -vcodec h264 output.avi
---------------------
ffmpeg版本修改:
1 avcodec_init() 修改为 avformat_open_input()
extern "C" {
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
}
【sensor】
imx274:sony;
ov:omnivision美商半导体,中文名豪威科技
[分辨率]
720P、1080P、4K是什么意思?
480x320, 640x480 标清
1024x720p 高清 720p格式,分辨率为1280×720p/60Hz,行频为45kHz。
1920x1080i (隔行扫描) 也属于高清
1920x1080p(1080p) 全高清
3840x2160(4k),7680x4320(8k)超(高)清
4K分辨率是1080p的4倍 3840×2160 = 1920×2×1080×2
8K分辨率是4K的4倍 7680×4320 = 3840×2×2160×2
一、监控录像机主要录像格式及相应分辨率
目前DVR硬盘录像机的主要录像格式为CIF、D1;NVR硬盘录像机的主要录像格式为720P、960P、1080P
CIF即前几年用的最多的一种格式,现在市场也占有很大份额,分辨率为352*288
D1即我们通常所说的标清40万像素,分辨率为704*576
720P即通常我们所说的高清100万像素,分辨率为1280*720
960P即通常我们所说的高清130万像素,分辨率为1280*960
1080P即通常我们所说的高清200万像素,分辨率为1920*1080
二、主要录像格式的码流大小设置及所占硬盘空间大小
录像格式 | CIF | D1 | 720P/960P | 1080P |
分辨率 | 352*288 |
704*576 |
1280*720/1280*960 |
1920*1080 |
码流 | 512Kbps | 2048Kbps | 3072Kbps |
4096Kbps |
每路每小时所需硬盘容量 | 225MB | 900MB | 1350MB | 1800MB |
每路每天所需硬盘容量 | 5.3G | 21G | 32G | 42G |
1、计算的时候有几路图像乘以几就可以了。2、此估算并不包括:后期如果接IPSAN的硬盘热备和RAID等的硬盘容量估算
【视频编码】
1 图解y420
NV21/NV12/YV12/YUV420P的区别
图文详解YUV420数据格式
视频存储格式YUV420 NV12 NV21 i420 YV12
yuv420一个像素大小为:12=12bit
2 举例:
编码模式:H.264
分辨率:2560*1440
帧率:25 ; 1秒内25帧
码流控制:固定码流
码流:4096kbit/s--将1s内 视频yuv数据(本例中:25帧*分辨率2560*1440个像素大小)压缩到4096kbit
I帧间隔:25帧--每隔25个p帧发一个i帧
svc:1(off)
1s内yuv数据大小:2560*1440*1.5byte*25=分辨率*1个像素大小*帧率=131M
码流 4096kbit/s表示1s内将yuv数据131Mbyte压缩到4Mbit
如何计算视频码率
帧率控制:控制输出帧率。
例子:输入帧率:25f/s ; 控制输出帧率为:12f/s
输入第1帧:1*12+12<25 ;丢弃
输入第2帧:2*12+12>25; 保留
输入第3帧:3*12+12<25*2;丢弃
输入第4帧:4*12+12>25*2; 保留
依次类推,输出帧率控制在12f/s
P/N制式
采用PAL制式的国家或地区多半使用的是50Hz的交流电,采用NTSC制式的国家或地区多半使用的是60Hz的交流电早年间的电视机大多使用的是阴极射线显像管,里面有个重要部件叫电子枪,它会发射电子束在激发玻璃面板上的荧光粉,所以才会产生亮度图像(具体原理请百度)这就牵扯到一个发射频率和场的问题。你说提到的场率其实是每秒钟扫描的次数,50或者60分表代表隔行50次 / 隔行60次,称之为50i / 60i ( i 则代表隔行扫描)。电视机的每一帧画面的显示需要电子枪由上至下扫描两次完成,第一次扫描奇数行,第二次扫描偶数行。这个过程需要在一秒钟之内完成25次,所以其实每一秒电子枪扫描了50次。奇偶数的扫描频率正好可以匹配交流电流的赫兹数。
看电影是在全黑的电影院里观看的,而电视是在家庭,通常是开灯的情况下,非常重要的原因是要求电视的频闪和灯的频闪要求要一致,否则频差的闪烁会对孩子的眼睛造成疲劳,所以在技术如此先进的今天,美国和日本这些原N制国家(电网60Hz)的高清制式仍然是60i或30p,中国德国等pal国家(电网50Hz)坚持选用50i或25p,无法做到大一统
作者:cafe
链接:https://www.zhihu.com/question/25358945/answer/62338171
2 avc编码(advanced video coding)高级视频编码。
AVC 实际上是 H.264 协议的别名。但自从 H.264 协议中增加了 SVC 的部分之后,人们习惯将不包含 SVC 的 H.264 协议那一部分称为 AVC,而将 SVC 这一部分单独称为 SVC。所以提到 AVC 的时候,需要根据具体情况判断到底是指 H.264 协议还是指协议中不包含 SVC 的那一部分;
SVC是scalable video coding,有的翻译成分层,有的翻译成分级。H.264/AVC是JVT制定视频编码新标准。
H. 264扩展标准支持多种可分级类型,其中空域可分级、时域可分级和质量可分级是可分级模式的典型代表。
JM86的编解码是基于AVC, JSVM的编解码是基于SVC.
H.264 SVC(H.264可分级编码)作为H.264标准的一个扩展最初由JVT在2004年开始制定,并于2007年7月获得ITU批准。H.264 SVC以H.264 AVC视频编解码器标准为基础,利用了AVC编解码器的各种高效算法工具,在编码产生的编码视频时间上(帧率)、空间上(分辨率)可扩展,并且是在视频质 量方面可扩展的,可产生不同帧速率、分辨率或质量等级的解码视频。
H.264 SVC通过在GOP(编码图像组)中设置可丢弃的参考帧实现时间上的可分级。0-16视频帧构成全帧率视频,除T3标志外的所有视频帧构成了半帧率视频,所有 T0标志和T2标志的视频帧构成了1/3帧率视频,所有 只是T0标志的视频帧构成了1/4帧率视频。
SVC 时间可分级
SVC 空间可分级
H.264 SVC通过在在编码码流嵌入具有相关性的多个不同分辨率的子流实现空间上的可分级。上层所有的视频帧构成了高分辨率视频,下层所有的视频帧构成了低分辨率视频.
为此,具备H.264 SVC编码的视频会议系统,在保证高效的视频压缩性能的基础上,视频广播端可以通过一次编码产生具有不同帧率、分辨率的视频压缩码流,以适应不同网络带 宽、不同的显示屏幕和终端解码能力的应用需求,从而有效地避免了视频会议系统中MCU上复杂而昂贵的转码。
H.264 SVC 与以往传统视频协议H.264AVC的区别表:
传统视频协议 (H.264/AVC) |
Vidyo视频协议 (H.264/SVC) |
|
视频会议可以容忍的网络丢包率 | < 2 – 3 % | <20% |
对网络的要求 | 专线 | 共享线路 |
视频会议延迟: 视频会议效果 |
Ø 400毫秒 Ø 非实时交互 |
< 200毫秒 实时交互 |
HD 会议室型终端的开销 | 昂贵 | 普及型 |
实际应用中,存在不同的网络和不同的用户终端,各种情况下对视频质量的需求不一样。例如,在利用网络传输视频信息时,由于网络带宽限制了数据传输,因此要求当网络带宽较小的时候,只传输基本的视频信号,并根据实际网络的状况决定是否传输增强的视频信息,使视频的质量得到加强。
在这样的背景下,利用可分级视频编码技术实现一次性编码产生具有不同帧率、分辨率的视频压缩码流,然后根据不同网络带宽、不同的显示屏幕和终端解码能力选择需要传输的视频信息量,以此实现视频质量的自适应调整。
3 JPEG/bmp
JPEG文件编/解码详解
JPEG 的图片使用的是 YCrCb 颜色模型, 而不是计算机上最常用的 RGB. 关于色
彩模型, 这里不多阐述. 只是说明, YCrCb 模型更适合图形压缩. 因为人眼对图片上
的亮度 Y 的变化远比色度 C 的变化敏感. 我们完全可以每个点保存一个 8bit 的亮
度值, 每 2x2 个点保存一个 Cr Cb 值, 而图象在肉眼中的感觉不会起太大的变化.
所以, 原来用 RGB 模型, 4 个点需要 4x3=12 字节. 而现在仅需要 4+2=6 字节; 平
均每个点占 12bit. 当然 JPEG 格式里允许每个点的 C 值都记录下来; 不过 MPEG 里
都是按 12bit 一个点来存放的, 我们简写为 YUV12.
[R G B] -> [Y Cb Cr] 转换
(R,G,B 都是 8bit unsigned)
| Y | | 0.299 0.587 0.114 | | R | | 0 |
| Cb | = |- 0.1687 - 0.3313 0.5 | * | G | + |128|
| Cr | | 0.5 - 0.4187 - 0.0813| | B | |128|
Y = 0.299*R + 0.587*G + 0.114*B (亮度)
Cb = - 0.1687*R - 0.3313*G + 0.5 *B + 128
Cr = 0.5 *R - 0.4187*G - 0.0813*B + 128
[Y,Cb,Cr] -> [R,G,B] 转换
-------------------------
R = Y + 1.402 *(Cr-128)
G = Y - 0.34414*(Cb-128) - 0.71414*(Cr-128)
B = Y + 1.772 *(Cb-128)
一般, C 值 (包括 Cb Cr) 应该是一个有符号的数字, 但这里被处理过了, 方法
是加上了 128. JPEG 里的数据都是无符号 8bit 的.
RGBA?
YUV420存储为BMP和JPG图片
ffmpeg jpeg 转yuv422p(420p)
JPEG图片的文件格式
图像处理中 BMP 和JPG等格式的说明
BMP文件结构
4 GOP
GOP说白了就是两个I帧之间的间隔.比较说GOP为120,如果是720p60的话,那就是2s一次I帧.
在视频编码序列中,主要有三种编码帧:I帧、P帧、B帧
● I帧即Intra-coded picture(帧内编码图像帧),不参考其他图像帧,只利用本帧的信息进行编码
● P帧即Predictive-coded Picture(预测编码图像帧),利用之前的I帧或P帧,采用运动预测的方式进行帧间预测编码
● B帧即Bidirectionally predicted picture(双向预测编码图像帧),提供最高的压缩比,它既需要之前的图
像帧(I帧或P帧),也需要后来的图像帧(P帧),采用运动预测的方式进行帧间双向预测编码
5 BP/EP/MP/HP
嵌入式 H.264 BP、EP、MP、HP小结: http://blog.csdn.net/skdkjzz/article/details/37726205
6 jpeg/h264
M-JPEG、MPEG4、H.264都有何区别 :http://blog.chinaunix.net/uid-16759545-id-4892408.html
ffmpeg(7):将h264编码的视频流保存为BMP或者JPEG图片: http://blog.csdn.net/oldmtn/article/details/46742555
7 BT1120
BT1120协议
BT1120接口及协议
视频行场信号转 bt1120方案.
嵌入式 BT656/BT601/BT1120协议差异小结
8 视频编码和封装格式
几种高清编码方式和文件封装格式介绍
9 RAW、YUV、RGB、 RGB,JPEG都是sensor输出的四种类型
RAW、YUV、RGB、 RGB,JPEG都是sensor输出的四种类型,简单来说:
1、RAW RGB: sensor的每一像素对应一个彩色滤光片,滤光片按Bayer pattern分布。将每一个像素的数据直接输出,即RAW RGB data;
2、YUV: luma (Y) + chroma (UV) 格式, 一般情况下sensor支持YUV422格式,即数据格式是按Y-U-Y-V次序输出的;
3、RGB: 传统的红绿蓝格式,比如RGB565,其16-bit数据格式为5-bit R + 6-bit G + 5-bit B。G多一位,原因是人眼对绿色比较敏感;
4、JPEG: 有些sensor,特别是低分辨率的,其自带JPEG engine,可以直接输出压缩后的jpg格式的数据
10 YUV与RGB相互转换
Y = 0.257R + 0.504G + 0.098B + 16
U = 0.148R - 0.291G + 0.439B + 128
V = 0.439R - 0.368G - 0.071B + 128
B = 1.164(Y - 16) + 2.018(U - 128)
G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
R = 1.164(Y - 16) + 1.596(V - 128)
typedef unsigned char umatix_1080p[1080][1920]
yuv2rgb(void *yuv)
{
umatrix_1080p *y_matrix;
y_matrix = (umatrix_1080p *)((size_t)yuv);
for(h=0;h<1080;h++)
for(w=0;w<1920;w++)
(*y_matrix)[h][w] = (int)round(1.164*(y-16)+1.596*(v-128));
}
YUV与RGB格式转换
总结各种RGB转YUV的转换公式
【图像】
1 镜头光圈的作用主要表现在以下三个方面:
(1)调节进光照度。这是光圈的基本作用。光圈调大,进光照度增大;光圈调小,进光照度减小。它与快门速度配合 解决曝光量问题。
(2)调节控制景深。这是光圈的重要作用。光圈大,景深小;光圈小,景深大。
(3) 影响成像质量。这是光圈容易被忽视的作用。任何镜头,都有某一档光圈的成像质量是最好的,即受各种像差的影响最小。这档光圈俗称最佳光圈。使用专门仪器可以测出最佳光圈的准确位置。一般来说,最佳光圈位于该镜头最大光圈缩小约2至3档处。大于、小于最佳光圈,镜头的球差、纵向色差、慧差、场曲和像散等像差就会增大,所以在拍摄时要尽量使用最佳光圈,以提高成像质量。光圈孔径的形状也会影响成像质量,其多边形越接近圆形,成像质量越好一、总 称 狗头、黑孬:低端普及型镜头,包括低档单反相机的套头。
图像跨距:http://www.bubuko.com/infodetail-2090621.html
Image Stride(内存图像行跨度)
2 ISP/DSP区别
ISP 是Image Signal Processor 的简称,也就是图像信号处理器。而DSP是Digital Signal Processor 的缩写,也就是数字信号处理器。
ISP一般用来处理Image Sensor(图像传感器)的输出数据,如做AEC(自动曝光控制)、AGC(自动增益控制)、AWB(自动白平衡)、色彩校正、Lens Shading、Gamma 校正、祛除坏点、Auto Black Level、Auto White Level 等等功能的处理。
而DSP功能就比较多了,它可以做些拍照以及回显(JPEG的编解码)、录像以及回放(Video 的编解码)、H.264的编解码、还有很多其他方面的处理,总之是处理数字信号了。个人认为ISP是一类特殊的处理图像信号的DSP。
参考文档:
ISP DSP的不同
ISP算法概述
ISP图像质量调节介绍
ISP术语
列固定模式噪声的校正方法
3 图像深度/ 深度图像
深度图像
图像深度
深度图像的获取原理
4 数码变焦与光学变焦
数码变焦
5 如何计算图像的压缩比。
有损压缩和无损压缩(近无损)压缩比一般差很多。我主要做位图的无损压
缩,最好也就能达到2,不像做变换的,能有十几倍还多。
具体例子:位图来看。512*512全彩图像。
512*512*3=786432byte
如果你压缩完的图像大小为462607byte
那么压缩比就为786432/462607=1.7.
当然,也有很多文献用bpp来衡量压缩比。这个很熵的意义很像。
462607*8/(512*512*3)=4.70588 bpp
压缩比就为8/4.70588=1.7
注:全彩图像,每个像素点三个分量,每个分量8位,大小0-255.
压缩比越高,图像质量越差.
6 QP(quantizer parameter)编码器参数. QP越大 图像质量越差,bit rate码率越低
7 监控摄像机常识:宽动态 (WDR)介绍和理解
宽动态
背光补偿
8 监控摄像机常识:宽动态 (WDR)介绍和理解
HDR/LDR; 3DNR:3D降噪;噪点 、曝光
HDR