1. 像素

图像画面由一个数字序列表示的图像中的一个最小单位色块,被称之像素(pixel/px)。
我们所说的图像大小为19201080,指的就是长宽各有 1920 和 1080 的像素点,那么一张19201080的图片总共有的像素点为:19201080 = 2073600个像素点。
图像的大小如何计算?
图像的大小:像素数量
像素大小 = 图片大小,而 像素大小 和 像素深度有关系。RGB表示的真彩色能表示256×256×256=16,777,216,就是我们常见的1600万色,是人眼可见的全部色彩,超出没有意义。RGB的像素深度有1bit、4bit、8bit、16bit、24bit、32bit,如在ps中下图在新建一张画布选择8bit(指 rgb 每种颜色占 8bit),那这样1 px = 3 8bit = 24bit,俗称24 位图。根据以上公式就能算出如下图图像的大小:500 378 * 24 / 8 = 567000Byte = 567000Byte / 1024 = 553.7109375 Kb,和 ps 显示的图像大小一样。但往往真实的图片大小远比以上计算的结果小很多, 这是因为导出的图片都经过压缩。

2. 视频和图像

视频就是图片一帧一帧连起来的产物,连起来的越快看着越流畅,用 帧率(就是每秒播放图片的数量 FPS)来衡量视频的流畅度。那么根据图片大小的算法就能算出视频的大小。
视频的大小 = 时长(秒) 帧率(FPS) 图片大小;
那么1920×1280分辨率, 30FPS,时长 1 秒的视频的大小就是:1920 1280 24 / 8 30 / 1024 / 1024 = 210.9375 M,那么 1 小时的影片需要:210.9 60 60 / 1024 = 741.4453125 G,不禁产生疑问,为啥我下载的大片才 1G 多?*「视频编码」

3. 视频

视频如何产生? 镜头成像 》 光电转换/CMOS 》 编码压缩 》 输出保存

  • 帧(Frame):就是一张静止的画面, 是视频的最小单位。
  • 帧速率(FPS):每秒播放图片的数量。
  • 码率(Bit Rate):视频文件在单位时间内使用的数据流量,决定视频的质量和大小,单位是 kb/s 或者 Mb/s。一般来说同样分辨率下,视频文件的码流越大,压缩比就越小,画面质量就越高。码流越大,说明单位时间内取样率越大,数据流,精度就越高,处理出来的文件就越接近原始文件,图像质量越好,画质越清晰,要求播放设备的解码能力也越高。

码率的常见三种模式:

  • CBR(全程码率恒定、文件大小可预测、编码压力小,直播常用)
  • VBR (码率可变、简单场景码率低,复杂场景码率高)
  • CRF (固定质量模式、CRF值越低,视频看起来质量越高)

    4. 视频格式

    视频构成: 视频(封装格式(容器)+ 编码格式) + 音频(封装格式(容器)+ 编码格式)
    视频封装格式: 常见封装格式有 MP4、AVI、FLV、mov、RMVB、MKV、WMV、3GP、ASF 等。
    编码格式:视频编码是对采用视频压缩算法将一种视频格式转换成另一种视频格式的描述,音频编码同理。
    常见的视频编码格式有:AC-1、MPEG2/H.262、VP8、MPEG4、VP9、H.261、H.263、H.264、H.265 等。
    常见的音频编码格式有:WMA、MP3、AC-3、AAC、APE、FLAC、WAV 等。

    5. 视频压缩

    主要是将视频像素数据(RGB,YUV 等)压缩成为视频码流,从而降低视频的数据量,也就是处理像素。

    YUV: 和RGB一样是一种颜色编码格式,相比RGB更利于压缩。其中”Y”表示明亮度(Lumina nce 或 Luma),也就是灰阶值;而”U”和”V”表示的则是色度(Chrominance 或 Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。

视频压缩分为下面两种类型
1. 帧内压缩
也叫空间压缩,类似于图像压缩,属于有损压缩算法,达不到很高的压缩比。
2. 帧间压缩
主要是通过记录关键帧,通过压缩关键帧之间连续帧的冗余信息(连续帧内相同的像素区域)的过程。
为了记录关键帧,将视频的画面帧分为三类:

  • I 帧:帧内编码帧(intra picture),能展示最完整的画面, 可压缩的空间小,编码过程属于帧内编码。
  • P 帧:前向预测编码帧(predictive-frame),需要参考前面的 I 帧或者 P 帧来找出不同部分进行编码,压缩比比较高。
  • B 帧 双向预测,也就是 B 帧记录的是本帧与前后帧的差别。也就是说要解码 B 帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B 帧压缩率高,但是对解码性能要求较高。

GOP(Group of Pictures)值
编码器将多张图像进行编码后生产成一段一段的 GOP ,每一组 IPB 帧的序列包含多少帧,也就是一个 I 帧结束后需要经过多少帧才能出现下一个 I 帧。所以同码率下 GOP 值越大,B 帧和 P 帧越多,视频质量越高。
在压缩或者解压缩视频的过程用到编解码器(Codec)。总的过程可以:
[3-8]视频 - 图1
视频的编码的过程:
[3-8]视频 - 图2
视频解码的过程:
[3-8]视频 - 图3

音频压缩原理

音频压缩是在保证信号在听觉方面不产生失真的前提下,对音频数据信号进行尽可能大的压缩, 去除冗余信息。冗余信号包含人耳听觉范围外的音频信号以及被掩蔽掉的音频信号等。例如,人耳所能察觉的声音信号的频率范围为 20Hz ~ 20KHz,除此之外的其它频率人耳无法察觉,都可视为冗余信号。此外,根据人耳听觉的生理和心理声学现象,当一个强音信号与一个弱音信号同时存在时,弱音信号将被强音信号所掩蔽而听不见,这样弱音信号就可以视为冗余信号而不用传送。

6. 视频处理 - FFmpeg

FFmpeg, 是一个跨平台的视频处理的程序。
整个过程基本可以说成:解复用 => 解码 => 编码 => 复用器。
Fluent-ffmpeg 是将复杂的 ffmpeg 命令抽象成 NodeJS 的模块,前提是系统已安装 FFmpeg