h.264视频文件封装

所谓封装格式就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中,也就是说仅仅是一个外壳,或者大家把它当成一个放视频轨和音频轨的文件夹也可以。说得通俗点,视频轨相当于饭,而音频轨相当于菜,封装格式就是一个碗,或者一个锅,用来盛放饭菜的容器。

比较常用的有以下封装格式

1 AVI

AVI容器-成熟的老技术

        AVI是微软1992年推出用于对抗苹果Quicktime的技术,尽管国际学术界公认AVI已经属于被淘汰的技术,但是由于windows的通用性,和简单易懂的开发API,还在被广泛使用。

       AVI的文件结构、分为头部, 主体和索引三部分. 主体中图像数据和声音数据是交互存放的。从尾部的索引可以索引跳到自己想放的位置。

        AVI本身只是提供了这么一个框架,内部的图像数据和声音顺据格式可以是任意的编码形式。因为索引放在了文件尾部,所以在播internet流媒体时已属力不从心。很简单的例子,从网络上下载的片子,如果没有下载完成,是很难正常播放出来。另外一个问题是AVI对高码率VBR音频文件支持不好。

       VBR全称是Variable BitRate,就是动态比特率,可以根据当前的需要定义不同的比特率,避免了浪费,并且提高了利用率。随之问题也就来了,因为容器里的图像和声音是分开的,所以播放时需要一个图像和声音的同步过程,如果CBR音轨的话因为码率是定值,同步不成为问题,可是VBR音轨是不断的在变换,而AVI没有时间戳去让VBR音轨和图像同步,这样就会产生图像声音不同步的问题。后来VirtualDub提出了一种新的方法扩充了AVI对VBR音频的兼容,但是在高码率时会产生丢失数据的问题,从而导致有损音效,这一点问题到现在都没有比较完美的解决方法。并且更加令人遗憾的是,对TrueHD, DTS-HD等音效更是完全不能支持。

2 ts和ps封装

因为HDDVD以及BD之争,尽管两家在编码上都统一采用MPEG2/VC-1/H.264,可在封装格式上又有所分岐。DVD论坛官方所认可的HDDVD使用的是PS封装,即Program Stream(程序流),这和之前DVD所采用的MPEG2 Program Stream封装是一样的,PS流的后缀名是VOB以及EVO等。而BD在没有DVD论坛官方认证的情况下,自然不是PS封装,而是使用了MPEG2的另一封装TS封装,即Transport Stream(传输流),TS流的后缀名为TS。它们都是MPEG2系统部分的两个不同的语法结构,而在现在仅仅在作为封装使用。TS流对于PS流来说更易传输,不过由于其性质,也更易出错,所以在以前一般存储方面都是使用PS流,当然现在随着容错/纠错技术的提高,TS的适用范围越来越广。
现在网上大多流传以TS封装的HDTV remux版,PS封装只能在HDDVD原版才看到,所以我们来着重分析一下TS封装格式。
电视节目是你任何时候打开电视机都能解码(收看)的,所以,MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码的。从结构上来说,TS是由头文件和主体所组成的,扩充过的TS流还包括时间戳。这样不管是什么格式的VBR音轨,都很容易通过时间戳来同步图像。当然,对新的声音格式来说,需要新的分离器,解码器来实现解码。目前在不断改进开发中。
TS不像AVI,从诞生那天起,就考虑到了网络播放,所以很快成为了世界标准并广泛应用于电视台数字播放,手机等各个领域。

REMUX版本

       Remux的意思是无损的提取出HD-DVD 和 BluRay-DVD里面的视频数据和音频数据,封装到我们熟悉的TS或者AVI文件中

3 MOV封装

      不少HDRIP使用的封装格式一般是AVI,MKV和MOV。MOV是Quicktime封装,这一封装和AVI几乎是同一时代的,缺陷也不少,现在很少有人使用。

HDRIP:重新编码,即有损压缩过之后的视频。

4 MKV封装

        MKV是Matroska的简称,它是一种新的多媒体封装格式,比较常见的搭配是X264+MKV。MKV封装十分新颖,而且也非常开放,它对比AVI的优势体现在以下几点:

1:可变帧率:这需要编码的配合,试想一下在回放变化比较慢(比如说静物)时以比较低的FPS来代替,可以节省不少资源。
2:错误检测以及修复:这无疑提供了纠错和容错性,在网络传输的今天尤为需要。
3:软字幕:经常看DVDrip以及HDrip的朋友了解到,字幕一般都是以其它文件形式存在,在MKV里它可以内嵌在封装里,但不会和视频混淆,也可以多字幕随意选择。这样在传输保存时比较方便。
4:流式传输:这和TS流的原因基本一致,通过时间戳来管理视频以及音频的同步问题,做到即下即看。
5:菜单:交互式的操作使得MKV更加人性化。
6:强大的兼容性:MKV最大的特点就是能容纳多种不同类型编码的视频、音频及字幕流,即使是非常封闭的RealMedia及QuickTime也被它包括进去了,堪称万能的媒体容器。
7:开放性和跨平台性:Matroska使用的是一种开放的架构,拥有众多的先进特性,并且能跨平台使用。
不过Matroska相对于以上我们介绍的缺点也是显而易见的,它没有深厚的背景可以依托,这决定了它不可能在商业领域里有所作为。不过从DVDrip里我们看到并非标准才是唯一,真正先进的技术在标准化商业化的道路上碰到很多非技术壁垒,而在网上而言,根本不存在这样那样的顾虑,所以MKV可以网上快速流行起来。

       不过MKV的缺点也是显而易见的,分离器方面比较好的仅有HAALI分离器,再加上民间标准的缘故,我们很难在PC以外的地方见到它的存在。

 

为什么有这么多的格式以及规范呢?


其实不然,试想一下,有的菜,例如排骨,比较大,碗放不下,得换锅。有的饭比较烫,也不能放在塑料的容器里,当然个人喜好也有一定关系。所以容器的选择,基本在于,其对视频/音频兼容性,以及适合范围。这下大家应该明白了,很多人一直把封装格式当成前面介绍的视频编码,而这两者之间没有必然的直接联系。
+++
编码方式:目前有mpeg1:早期vcd使用,分辨率是352*288,压缩比低
                mpeg2:一般DVD使用,有NTSC(720*480)和PAL (720*576) 
                       压缩比高于mpeg1
                mpeg4 :目前使用最多的技术,avi文件始祖,大大提高压缩
                          比,而质量堪比DVD
                divx:基于mpeg4开发的,有一定算法优化
                xvid:divx技术封锁之后被人破解开发的,也是基于mpeg4的
                      编码技术更先进,采用开放源码,画质更好
                h.261:早期的低码率编码,应用于352x288和176x144,现在
                       已不用
                h.263:在低码率下能够提供比H.261更好的图像效果,改进一
                       些算法
                h.263+:h.263的改进型
                h.264 :H.264集中了以往标准的优点,高效压缩,与H.263+
                     和MPEG4 SP相比,减小50%比特率,高质量应用等
               rm/rmvb:real 公司推出的应用于网络的高压缩编码,rm是固定
                   码率,rmvb是动态码率(就是静态画面采用低码率,动态
                     采用高码率)
         h.263  和mpeg是不同的国际标准
封装格式(也叫容器):所谓封装格式就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中,也就是说仅仅是一个外壳,或者大家把它当成一个放视频轨和音频轨的文件夹也可以。说得通俗点,视频轨相当于饭,而音频轨相当于菜,封装格式就是一个碗,或者一个锅,用来盛放饭菜的容器。

               AVI:微软在90年代初创立的封装标准,是当时为对抗
                    quicktime格式(mov)而推出的,只能支持固定CBR恒定
                    比特率编码的声音文件。
               ts和ps:PS封装只能在HDDVD原版,
                mov:    MOV是Quicktime封装
                WMV:微软推出的,作为市场竞争

                mkv:万能封装器,有良好的兼容和跨平台性、纠错性,可带
                     外挂字幕。
               flv:h针对于h.263家族的格式
               rmvb/rm:Real Video,由RealNetworks开发的应用于rmvb和rm
               MP4:主要应用于mpeg4的封装
h.264的压缩比是最高的,主要应用于低码率下的实时在线播放,rmvb压缩比相对低一些,但质量要好很多
+++++一个完整的多媒体文件是由音频和视频2部分组成的。H264、Xvid等就是视频编码格式,MP3、AAC等就是音频编码格式。字幕文件只是其中附带部分。 
   把视频编码和音频编码打包成一个完整的多媒体文件,可以有不同的方式,这种方式便是所谓的封装方式,不同的封装方式有不同的后缀。由于有些封装方式具有很强的灵活性,它可以把各种不同的音视频文件打包成一个文件,因此会出现这么一种情况,虽然文件的后缀是相同的,但有些可以正常播放,而有些不能播放,毕竟任何一种播放软件都不是万能的。部分先进的封装方式还可以同时封装多个音频编码文件,甚至同时封装进字幕文件,如MKV封装方式。MKV文件可以做到一个文件包括多种语种发音,多语字幕以适合不同的人观看。

----------------------------------------------------------------------------------------------

目前有最常见的编码方式:

 

    mpeg1:vcd使用的就是这种编码格式,分辨率是352*288,压缩比低

    mpeg2:一般DVD使用,有NTSC(720*480)和PAL (720*576),和mpeg1一样属于即将被淘汰的编码格式。

    mpeg4 :目前使用最多的技术,avi文件始祖,大大提高压缩比,而质量堪比DVD

    divx:基于mpeg4开发的,有一定算法优化

    xvid:divx技术封锁之后被人破解开发的,也是基于mpeg4的编码技术更先进,采用开放源码,画质更好

    h.261:早期的低码率编码,应用于352x288和176x144,现在已不用

    h.263:在低码率下能够提供比H.261更好的图像效果,改进一些算法

    h.263+:h.263的改进型

    h.264 :H.264集中了以往标准的优点,高效压缩,

    RV.10 RV.13 RV.20 RV.30 RV40: real 公司推出的应用于网络的高压缩编码,是不同时期rm和rmvb的编码

 -----------------------------------------------------------------------------------------

   封装格式(也叫容器):所谓封装格式就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中,也就是说仅仅是一个外壳,或者大家把它当成一个放视频轨和音频轨的文件夹也可以。说得通俗点,视频轨相当于饭,而音频轨相当于菜,封装格式就是一个碗,或者一个锅,用来盛放饭菜的容器。

 

  AVI:微软在90年代初创立的封装标准,是当时为对抗quicktime格式(mov)而推出的,只能支持固定CBR恒定

      定比特率编码的声音文件。

  ts和ps:PS封装只能在HDDVD原版,

  mov: MOV是Quicktime封装

  WMV:微软推出的,作为市场竞争

  mkv:万能封装器,有良好的兼容和跨平台性、纠错性,可带外挂字幕。

  flv: 这种封装方式可以很好的保护原始地址,不容易被下载到,目前一些视频分享网站都采用这种封装方式

  rmvb/rm:Real Video,由RealNetworks开发的应用于rmvb和rm的不同封装方式。rm是固定码率,rmvb是动态

           码率(就是静态画面采用用低码率,动态采用高码率)

  MP4:主要应用于mpeg4的封装,主要在手机上使用。

  3GP:目前主要应用于H.263的封装,主要在3G手机上使用

----------------------------------------------------------------------------------------------

  理论上可以把任意一个视频文件和一个音频文件打包成一个完整的多媒体文件,但不同的封装方式有其不同的计算方式,它所要求的是在高压缩率的同时又要兼顾高的清晰度效果。所以无论哪种封装方式都不会把任意的一个视频文件和一个音频文件打包在一起。例如MKV封装容器,基本无论什么样的组合都可以!但一般MKV用的最多的就是H264+AAC组合,此组合文件体积最小,清晰度最高。因此网上很多MKV视频都是高清晰度的。


下面是一些常见的组合方式:
封装容器 视频流编码格式 音频流编码格式
AVI Xvid MP3
AVI Divx MP3
Matroska(后缀就是MKV) Xvid MP3
Matroska(后缀就是MKV) Xvid AAC
Matroska(后缀就是MKV) H264 AAC
MP4 Xvid MP3
MP4 H264 AAC
3GP H.263 AAC

--------------------------------------------------------------------------------------------

各种编码对应的最佳码率

  编码规范和封装格式多种多样,是因为它们对应的最佳码率不同。640x272低分辨率的主要是Real Video,最佳码率在350-600Kbps,封装文件格式为RM或者RMVB,我们经常在网上下载的300M左右的电影基本都是RealVideo规范的RMVB文件;分辨率提升为1024x438时,一般就开始使用Xvid编码了,码率也在800-1300Kbps不等,封装文件经常是AVI,文件体积在700MB左右;而720P影片,我们经常下载的X264/AVC编码MKV封装文件,码率5-6MB,音频部分可以达到5.1音效,影音效果很不错,但文件体积都在4.3GB上下,一张DVD碟的容量,网上下载往往需要数天;1080P影片经常采用的有H.264编码和VC1编码,码率30Mbps上下,体积达到22-40GB,虽然效果震撼,但是不方便网络共享。对于容量8GB左右的MP4,综合视频来源以及体积,最适合的是Xvid编码、码率在1300Kbps左右、文件体积700MB-1.4GB的AVI,以及同样码率和体积的RV40编码RMVB,还有码率350-600Kbps的RMVB。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python cookbook 笔记三

分组: rows [{address: 5412 N CLARK, date: 07/01/2012},{address: 5148 N CLARK, date: 07/04/2012},{address: 5800 E 58TH, date: 07/02/2012},{address: 2122 N CLARK, date: 07/03/2012},{address: 5645 N RAVENSWOOD, date: 07/02/2012},{address: 1060 W A…

关于Vue2.0,Express实现的简单跨域

npm install express -g 通过npm全局安装express,之后可以通过 express --version 来查看express版本 express server 通过express server生成server项目文件 npm install 安装server的项目依赖 可以通过执行server下的bin\www文件可以开启服务 在www文件我们可以默…

mysql datetime类型按天查询_mysql 时间相关sql , 按天、月、季度、年等条件进行查询...

-- mysql查询本季度-- 今天select * from ticket_order_detail where to_days(use_time) to_days(now());-- 7天SELECT *FROM ticket_order_detail where DATE_SUB(CURDATE(), INTERVAL 7 DAY) < date( use_time)-- 近30天SELECT *FROM ticket_order_detail where DATE_SUB…

ffmpeg分析系列

hello&#xff0c;各位好&#xff0c;本人是一名嵌入式软件工程师&#xff0c;目前正使用ffmpeg开发一款嵌入式多媒体播放器&#xff0c;《ffmpeg分析》系列博文是本人在阅读ffmpeg源代码时所做的笔记&#xff0c;希望对各位有点帮助。分析过程结合下面的例程&#xff1a;http:…

Linux kernel的中断子系统之(二):IRQ Domain介绍

返回目录&#xff1a;《ARM-Linux中断系统》。 总结&#xff1a;一、二概述了软硬件不同角度的IRQ Number和HW Interrupt ID&#xff0c;这就需要他们之间架个桥梁。 三介绍了架设这种桥梁的几种方式&#xff1a;Linear、Radix Tree和no map。 四介绍了两种基础数据结构描述中断…

mysql返回yyyy mm dd_怎么把取出mysql数据库中的yyyy-MM-dd日期转成yyyy年MM月dd日格式...

您好&#xff0c;通过两个个步骤可以完成转换&#xff1a;第一步&#xff1a;日期处理可以在模板数据集中通过sql语句转换&#xff0c;转换方式方式如下&#xff1a;SELECT DATE_FORMAT(NOW(),%Y) YEAR输出结果&#xff1a;2018SELECT DATE_F…

关于JS的时间控制

关于JS的时间控制实现动态效果及实例操作 <script>BOM //Bowers Object Model 浏览器对象模型setTimeout() // 延迟执行一次setInterval() // 间隔执行var a 300;window.setTimeout(abc(a),3000); // 自定义函数赋值function abc(i){alert(i);}//setInterv…

感动一生的几句话

为什么80%的码农都做不了架构师&#xff1f;>>> 很多东西就掌握在我们手中&#xff1a; 比如快乐&#xff0c;你不快乐&#xff0c;谁会同情你的悲伤&#xff1b; 比如坚强&#xff0c;你不坚强&#xff0c;谁会怜悯你的懦弱&#xff1b; 比如努力&#xff0c;你不…

mysql5.6 memcached_MySQL 5.6 安装配置InnoDB memcached Plugin

准备工作, 安装libmemached包&#xff0c;提供一些memcat/cp/dump命令&#xff0c;方便测试。# yum install libmemcached.x86_64 -y1. Setup required tables.mysql> source MYSQL_HOME/share/innodb_memcached_config.sqlQuery OK, 1 row affected (0.00 sec)Database cha…

Java 监听器,国际化

1. 监听器 1.1 概述 监听器&#xff1a; 主要是用来监听特定对象的创建或销毁、属性的变化的&#xff01; 是一个实现特定接口的普通java类&#xff01; 对象&#xff1a; 自己创建自己用 (不用监听) 别人创建自己用 &#xff08;需要监听&#xff09; Servlet中哪些对象需要监…

patator mysql 字典_利用patator进行子域名爆破

前言:原来朋友写的一个子域名爆破工具挺好用,这前几天API接口关了.痛苦万分.自己也写了一个类似的但是不咋稳定.特地google找了下 找到一款patator.效果和速度还是不错的。knock的速度真心受不了啊patator是由Python写的 不用安装下载即可.下载地址&#xff1a;http://code.goo…

div 超出高度滚动条,超出宽度点点点

超出高度滚动条style"width:230px; height: 180px; overflow: auto;"超出宽度点点点style"width: 220px; overflow: hidden; white-space:nowrap; text-overflow:ellipsis;"转载于:https://www.cnblogs.com/thinkingthigh/p/7603703.html

mp4(H264容器)的详细文件格式分析

十六进制码流分析&#xff1a; ftyp Box 00 00 00 1C: size ,28,表示此BOX有28个字节&#xff0c;表示长度的四个字节也计算在内。以下同 66 74 79 70: type,表示BOX TYPE,此处为ftyp 6D 70 34 32: 可能是兼容的格式信息&#xff0c;/mp42 00 00 00…

hdu 5925 搜索

题意&#xff1a;一个图&#xff0c;n个障碍&#xff0c;求联通块 思路&#xff1a; 图很大&#xff0c;障碍物很少。把联通的障碍物块抠出来&#xff0c;然后暴力。 代码&#xff1a; #include<bits/stdc.h> using namespace std; #define MEM(a,b) memset(a,b,sizeof(a…

分析数据库CitusDB:提供弹性计算能力

本文讲的是分析数据库CitusDB&#xff1a;提供弹性计算能力,企业数据库市场很庞大&#xff0c;在这个领域既有Oracle这样行家&#xff0c;也有IBM(DB2)和微软(SQL Server)这样的跨界巨头。它们都与中小企业常用到的开源数据库MySQL一样&#xff0c;都属于传统关系型数据库。似乎…

mysql不能创建innodb类型表_MYSQL have_innodb DISABLED无法创建innodb类型的表

今天在一台MYSQL服务器上发现&#xff0c;明明用了engineinnodb创建的表&#xff0c;结果创建出来却成了myisam的表。再看show variables like %innodb%;have_innodb 成了DISABLED。经过一番试验&#xff0c;发现是我关闭数据库后&#xff0c;直接删除ibdata1文件造成的。删除该…

[bzoj1059]矩阵游戏

虽然是一道水难题&#xff0c;但是我这种蒟蒻还是要讲一讲的。 Description 小Q是一个非常聪明的孩子&#xff0c;除了国际象棋&#xff0c;他还很喜欢玩一个电脑益智游戏——矩阵游戏。矩阵游戏在一个N*N黑白方阵进行&#xff08;如同国际象棋一般&#xff0c;只是颜色是随意的…

H264 RTP头分析

h264 RTP头解析流程 结合NALDecoder.c分析 协议分析 &#xff1a;每一个RTP数据报都由头部&#xff08;Header&#xff09;和负载&#xff08;Payload&#xff09;两个部分组成&#xff0c;其中头部前 12 个字节的含义是固定的&#xff0c;而负载则可以是音频或者视频数据。 一…

golang mysql 插入_Mysql学习(一)添加一个新的用户并用golang操作Mysql

Mysql添加一个新的用户并赋予权限添加一个自己的用户到mysql首先我们需要先用root用户登录mysql&#xff0c;但是刚安装完没有密码&#xff0c;我们先跳过密码ailumiyanaailumiyana:~/Git_Project/Go_Test$ sudo mysqld_safe --skip-grant-tables2019-01-07T01:35:51.559420Z m…

云计算构建基石之Hyper-V:虚拟机管理

本文讲的是云计算构建基石之Hyper-V:虚拟机管理,作为云计算的重要基石&#xff0c;虚拟化技术的好坏起着关键作用。Hyper-V作为微软重要的虚拟化解决技术&#xff0c;在微软云计算构建解决方案中&#xff0c;更是关键至关键&#xff0c;基础之基础。在本系列文章中&#xff0c;…