本文导读
阅读本文你将获得一下知识:
了解视频的基本原理。
了解FFmpeg是什么,和一些常用的用法。
用FFmpeg搭建简单的视频直播推流。
FFmpeg在nodeJs中的一些用法。
1.背景
短视频大行其道的年代,作为程序员势必需要了解:视频编辑背后的原理和技术。本文简略的描述了视频的组成原理,和常用的视频编辑工具,顺便提及了 NodeJs
中的用法。
想要了解视频原理,首先应该从图像原理开始说起。
2.图像基础
2.1 像素
图像画面由一个数字序列表示的图像中的一个最小单位色块,被称之像素(pixel/px)。
注意:像素只有位图才会有,是用来记录位图图像的。
我们所说的图像大小为1920*1080
,指的就是长宽各有1920和1080的像素点,那么一张1920*1080
的图片总共有的像素点为:1920*1080 = 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显示的图像大小一样。
但往往真实的图片大小远比以上计算的结果小很多, 这是因为导出的图片都经过压缩的,关于图片压缩技术可自行搜索学习。
★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。
见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
3.视频基础
3.1 视频和图像的关系?
视频就是图片一帧一帧连起来的产物,连起来的越快看着越流畅,用帧率(就是每秒播放图片的数量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
,不禁一句我x,为啥我下载的大片才1G多,莫慌,视频要是这么简单,那我们太天真了,所以就有了下文「视频编码」。
3.2 视频是怎么来的?
几个概念
-
帧(Frame):就是一张静止的画面, 是视频的最小单位。
-
帧速率(FPS):每秒播放图片的数量。
-
码率(Bit Rate):视频文件在单位时间内使用的数据流量,决定视频的质量和大小,单位是kb/s或者Mb/s。一般来说同样分辨率下,视频文件的码流越大,压缩比就越小,画面质量就越高。码流越大,说明单位时间内取样率越大,数据流,精度就越高,处理出来的文件就越接近原始文件,图像质量越好,画质越清晰,要求播放设备的解码能力也越高。
码率的常见三种模式: - CBR - 全程码率恒定 - 文件大小可预测 - 编码压力小,直播常用 - VBR - 码率可变 - 简单场景码率低,复杂场景码率高 - CRF - 固定质量模式 - CRF值越低,视频看起来质量越高 复制代码