转码
转码的核心是 “解码” + “再编码”。
解码:将原始的音视频数据(例如H.264视频流和AAC音频流)进行解压缩,还原成未压缩的、原始的数据(例如YUV/RGB像素数据、PCM音频数据)。这个过程需要消耗计算资源。
再编码:将上一步得到的原始数据,按照新的参数和标准,再次进行压缩编码,生成一个新的、不同的音视频格式。
为什么要转码?(转码的目的)
改变编码格式/压缩标准:
为了节省带宽和存储空间。例如,将旧的、效率低的H.264视频转码成新的、效率高的H.265视频,在同等画质下文件体积可以减小一半。
为了兼容老设备。例如,将较新的AV1编码视频转码成普及度更高的H.264,以确保在旧款手机或电视上能够播放。
改变码率、分辨率、帧率:
自适应码率流媒体(如MPEG-DASH、HLS):为了适应不同网络状况的用户,需要将同一个原始视频转码成720p、1080p、2K等不同分辨率、不同码率的多个版本,供用户动态切换。
降低文件体积:将4K高清视频转码成1080p,以方便在手机上传输和播放。
统一内容规格:
在一个视频平台上,用户上传的视频千差万别。平台需要将它们转码成统一的格式、码率和分辨率,以方便管理和分发。
转码的代价
耗时:因为涉及复杂的编解码计算,过程比较慢。
损失质量:由于是有损压缩,每次转码都会带来一定的画质或音质损失(代代损失)。
消耗计算资源:需要强大的CPU或专用的硬件(如GPU、FPGA)来加速。
转封装
转封装的核心是 “流复制”。
它不改变音视频流本身的编码内容,只是将它们从一种容器格式(也叫“封装格式”)中提取出来,然后放入另一种容器格式中。
容器格式是什么?
你可以把它想象成一个箱子或者快递包裹。它的主要作用是:
打包:将视频流、音频流、字幕、元数据(如标题、作者)等“捆”在一起,形成一个文件。
同步:确保播放时,画面和声音是同步的。
提供索引:方便播放器快速跳转到视频的任意时间点。
常见的容器格式有:.mp4, .mkv, .avi, .mov, .ts, .flv 等。
为什么要转封装?(转封装的目的)
改变文件格式:将一个
.mkv格式的视频文件快速转换成.mp4格式,因为某些播放器或编辑软件可能不支持MKV,但支持MP4。适应流媒体协议:在直播中,经常需要将编码后的流从一种格式(如FLV)转封装成另一种更适合传输的格式(如HLS的TS片段)。
提取或编辑元信息:快速修改文件的元数据,或者从中提取出音轨或字幕。
快速完成任务:因为不涉及编解码,只是重新“打包”,所以速度非常快,几乎是在瞬间完成,且没有任何质量损失。
转码和转封装的对比
形象的比喻
你即将交付一份产品调研报告, 你整理出了一些ppt文件, 打包为zip发送给客户.
转封装: 客户打不开zip包, 要求你换一种压缩包. 你重新打包为tar.gz发送给客户.
转码: 客户打不开ppt文件, 要求你整理为txt文本. 你将丰富的ppt内容改写简单的文本后打包发给客户.