关于“视频”,你可能不知道的那些事儿

你觉得一段 1080P ,60 帧的 MP4 视频,一秒钟应该占多少空间?

视频的基础参数:分辨率和帧率

视频是由连续的图像构成的。每一张图像,我们称为一帧(frame)。图像则是由像素(pixel)构成的。一张图像有多少像素,称为这个图像的分辨率。比如说 1920×1080 的图像,说明它是由横纵 1920×1080 个像素点构成。视频的分辨率就是每一帧图像的分辨率。

1263813-20181205132918868-1367078276.png

1080p 和 1080i 的区别

当你听见 “一个 1900 x 1080 的视频” 这样的描述时,你一定能反应出:这指的是视频的分辨率对应宽和高的像素值。那么你知道 1080p 和 1080i 的区别吗?首先我们需要知道,1080p 是 1080 progressive scan (逐行扫描)的缩写,而 1080i 是 1080 interlaced scan (隔行扫描)的缩写——这两种格式之间的区别在于它们在屏幕上的显示方式。在隔行扫描中,通过以交替方式照射奇数和偶数的像素行来显示图像,电视画面中每个场每秒闪烁 30 次,使你的眼睛无法注意到这种变换,所以在任何特定时刻你都会看到看似完全组合的画面。

1263813-20181205133210869-138576445.png

另一方面,逐行扫描指逐步扫描每行像素,每秒刷新屏幕上的每一行 60 次。从技术上讲,这很难实现,但人们普遍认为,与通过隔行扫描产生的图像相比,逐行扫描可以产生出色的图像。这就是为什么你经常会听到人们希望将 1080p 与 1080i 或 720p 区分开,称为 “真” 或 “全” HD的原因。逐行扫描的好处在具有大量运动的场景中变得尤为明显 - 只需看一下下面的图片并注意清晰度之间的明显差异,你就能理解。

1263813-20181209122327278-258086455.png

在 8102 年,已经很少有人看隔行扫描的电视节目了,但是有些人在视频编码时会选错场序,渲染出来的视频就很复古了,做视频的同学务必注意。

为什么 YUV 格式更受图像视频加工青睐

  1. 人眼对亮度的敏感度远高于色度,因此人眼看到的有效信息主要来自于亮度。YUV 模型可以将绝大多数的有效信息分配到Y通道。UV 通道相对记录的信息少的多。相对于 RGB 模型较为平均的分配,YUV 模型将多数有效信息集中在 Y 通道,不但减少了冗余信息量,还为压缩提供了便利。

  2. 保持了对黑白显示设备的向下兼容。

  3. 图像编辑中,调节亮度和颜色饱和度,在 YUV 模型下更方便。

几乎所有的视频格式,以及广泛使用的 JPEG 图像格式,都是基于 YCbCr 模型的。播放的时候,播放器需要将 YCbCr 的信息,通过计算,转换为 RGB。这个步骤称为渲染(Rendering)。每个通道的记录,通常是用整数来表示。比如 RGB24,就是 RGB 各 8 个 bit,用 0~255 (8bit 的二进制数范围)来表示某个颜色的强弱。YUV 模型也不例外,也是用整数来表示每个通道的高低。

奇怪的 29.97Hz 和 59.94 Hz

在很久以前,美国的黑白电视都是 525 线分辨率以及 30 帧的画面。因为美国的电力频率是 60Hz,为了方便,电视频率取一半也即是 30 Hz. 但是为了从黑白电视转到彩色电视,美国后来开始打造 NTSC 制式,这时问题便出现了。那时的电视信号是通过无线电波传输的,在无线电波的频谱当中,每一个电视频道能分到 4.5MHz 的频段。

1263813-20181205134952743-734971779.png

在黑白电视时期,这正好可以塞下视频和音频信号。但如果硬要将彩色信号塞进去,就会受到音频信号的干扰,显示效果非常差。为了将两种信号错位开,要用到逐行反向(line-by-line phase reversal)技术,这就要保证整个信号频段的频率 4.5MHz 可以整除线速率(每秒扫描多少根线),我们尝试来计算一下:

\[ \dfrac {45000000}{525 \times 30} = 285.71 \dots \]

这好像并不是一个整数 :( 科学家想了想解决方案:

  • 可以增加几条线,让分辨率从 525 变成 530 . 但是这样就不兼容老的黑白电视了。
  • 略微降低一点帧率,近似于 29.97 ,反正观众也察觉不到...

科学家们讨论过后一拍大腿:“好,就这么干!”

于是 NTSC 制式就这样被定下来并且沿用至今。不过欧洲和中国的电力频率是 50Hz,使用的是欧洲的 PAL 制式:信号频率为 6.0MHz,帧率为 25 FPS,线分辨率为 625,整除结果为 384. 所以我国的模拟信号电视节目都是 25 帧的。在渲染视频时,建议帧率根据原始视频素材的帧数进行设定。

视频格式 = 封装格式 + 编码格式

封装格式(例如 MP4)存储着视频、音频、字幕和媒体信息等,是一种外在的容器。它要和掌管视频内在的编码格式(例如 H.264)结合起来才会有完整的视频。封装只是一层皮,所以格式之间的互相转换应当是非常容易的——真的没有必要使用格式工厂!假如你从 B 站下载了一个格式为 flv 的视频文件,想要把它转换成 MP4 格式,只需要把它扔进比如 MediaCoder 这样的软件里,容器选 MP4,音频和视频流全部选择复制,然后开始转码。瞬间完成!(毕竟只是换了层皮,所以有些人直接改后缀,不推荐这种操作)

那么什么情况下视频需要重新编码呢?那便是你新封装的格式不支持原来封装的编码格式时。最常见的是 YouTube 的视频转码成 MP4 格式时,由于 YouTube 视频采用的是 VP9 编码而不是 H.264,MP4 并不认识 VP9 编码格式,所以需要重新渲染。

1263813-20181205141651491-421893222.png

上传视频和直播时常说的码率是什么?

码率(bitrate)又叫数据速率,指的是视频每秒包含的数据量和信息量,它直接决定了视频的大小和质量。B 站上传视频时是限制了码率的,一方面是破站太穷买不起那么多存储空间,另一方面是用户的小水管顶不住码率太高的视频传输(还有流量问题)。所以作为 UP 主,就需要在有限的码率内压制出尽可能高质量的视频,避免视频被二压;而作为主播能就需要在有限的码率内体高视频的画质,同时要照顾机器的性能。当视频文件的时间基本相同的时候(比如现在一集番大概是24分钟),码率和体积基本上是等价的,都是用来描述视频大小的参数。长度分辨率都相同的文件,体积不同,实际上就是码率不同。

码率也可以解读为单位时间内,用来记录视频的数据总量。码率越高的视频,意味着用来记录视频的数据量越多,潜在的解读就是视频可以拥有更好的质量。

1263813-20181205142314514-535123488.png

现在我们来回答一下文章一开始的问题,一段 1080P ,60 帧的视频,一秒钟应该占多少空间?

  1. 一帧像素:1920 * 1080 ≈ 200 万
  2. 每个像素:3 字节(byte)
  3. 一帧画面:200 万 * 3 / (1024 * 1024) ≈ 5.7M
  4. 一秒视频:5.7M * 60 = 342MB

似乎有点恐怖,码率这么大显然不行。这时就需要一些减小视频体积的技巧了,这也是人们常说的压制技术,可以看我的下一篇博文:《H.264 原理与视频压制技巧》。

参考文献

转载于:https://www.cnblogs.com/accepteddoge/p/things-you-dont-know-about-videos.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值