当前位置: 首页 > news >正文

FFmpeg——基础知识及FFmpeg框架

FFmpeg

  • 一、多媒体基础知识
    • 1.1、视频格式
      • 1.1.1、常见格式
    • 1.2、音频格式
      • 1.2.2、常见格式
      • 1.2.2、比较
    • 1.3、字幕格式
      • 1.3.1、外挂字幕与内嵌字幕
      • 1.3.2、比较
      • 1.3.3、格式
    • 1.4、编解码器
    • 1.5、容器和协议
      • 1.5.1、容器格式和编码格式
        • 1.5.1.1、简介
        • 1.5.1.2、多媒体容器文件格式
        • 1.5.1.3、音频编解码格式
      • 1.5.2、协议
        • 1.5.2.1、视频协议
        • 1.5.2.2、音频协议
        • 1.5.2.3、上层通讯协议
    • 1.6、常用概念
      • 1.6.1、硬解
      • 1.7.2、IBP帧
      • 1.7.3、分辨率
      • 1.7.4、码率
      • 1.7.5、帧率
      • 1.7.6、RGB和YUV
      • 1.7.7、实时和非实时
  • 二、FFmpeg框架
    • 2.1、FFmpeg概述
      • 2.1.1、简介
      • 2.1.2、功能
      • 2.1.3、模块组成
      • 2.1.4、命令集
    • 2.2、媒体播放器三大底层框架
      • 2.2.1、MPC/HC架构
      • 2.2.2、mplayer架构
      • 2.2.3、VLC架构

一、多媒体基础知识

1.1、视频格式

视频格式可以分为适合本地播放的本地影像视频和适合在网络中播放的网络流媒体影像视频两大类。尽管后者在播放的稳定性和播放画面质量上可能没有前者优秀,但网络流媒体影像视频的广泛传播性使之正被广泛应用于视频点播、网络演示、远程教育、网络视频广告等等互联网信息服务领域。

1.1.1、常见格式

MPEG/MPG/DAT:

MPEG (运动图像专家组)是Motion Picture Experts Group 的缩写。这类格式包括了MPEG-1,MPEG-2 和MPEG-4在内的多种视频格式。MPEG-1 相信是大家接触得最多的了,因为其正在被广泛地应用在 VCD 的制作和一些视频片段下载的网络应用上面,大部分的 VCD 都是用 MPEG1 格式压缩的( 刻录软件自动将 MPEG1 转换为 DAT 格式 ) ,使用MPEG-1 的压缩算法,可以把一部 120 分钟长的电影压缩到 1.2 GB 左右大小。MPEG-2 则是应用在DVD 的制作,同时在一些 HDTV(高清晰电视广播)和一些高要求视频编辑、处理上面也有相当多的应用。使用MPEG-2 的压缩算法压缩一部 120 分钟长的电影可以压缩到 5-8 GB 的大小(MPEG2 的图像质量是MPEG-1 无法比拟的)。MPEG 系列标准已成为国际上影响最大的多媒体技术标准,其中MPEG-1 和MPEG-2 是采用相同原理为基础的预测编码、变换编码、熵编码及运动补偿等第一代数据压缩编码技术;MPEG-4(ISO/IEC 14496)则是基于第二代压缩编码技术制定的国际标准,它以视听媒体对象为基本单元,采用基于内容的压缩编码,以实现数字视音频、图形合成应用及交互式多媒体的集成。MPEG 系列标准对 VCD、DVD 等视听消费电子及数字电视和高清晰度电视(DTV&&HDTV)、多媒体通信等信息产业的发展产生了巨大而深远的影响。

AVI:
AVI,音频视频交错(Audio Video Interleaved)的英文缩写。AVI 这个由微软公司发表的视频格式,在视频领域可以说是最悠久的格式之一。AVI 格式调用方便、图像质量好,压缩标准可任意选择,是应用最广泛、也是应用时间最长的格式之一。

MOV:

使用过Mac 机的朋友应该多少接触过 QuickTime。QuickTime 原本是Apple 公司用于 Mac 计算机上的一种图像视频处理软件。Quick-Time 提供了两种标准图像和数字视频格式, 即可以支持静态的*.PIC 和*.JPG 图像格式,动态的基于 Indeo 压缩法的*.MOV 和基于MPEG 压缩法的*.MPG 视频格式。

ASF:
ASF(Advanced Streaming format 高级流格式)。 ASF 是MICROSOFT 为了和的Real player 竞争而发展出来的一种可以直接在网上观看视频节目的文件压缩格式。 ASF 使用了 MPEG4 的压缩算法,压缩率和图像的质量都很不错。因为ASF 是以一个可以在网上即时观赏的视频“流”格式存在的,所以它的图像质量比VCD 差一点点并不出奇,但比同是视频“流”格式的RAM 格式要好。

WMV:
一种独立于编码方式的在 Internet 上实时传播多媒体的技术标准,Microsoft 公司希望用其取代QuickTime 之类的技术标准以及 WAV、AVI 之类的文件扩展名。WMV 的主要优点在于:可扩充的媒体类型、本地或网络回放、可伸缩的媒体类型、流的优先级化、多语言支持、扩展性等。

NAVI:
如果发现原来的播放软件突然打不开此类格式的AVI 文件,那你就要考虑是不是碰到了 n AVI。n AVI 是New AVI 的缩写,是一个名为Shadow Realm 的地下组织发展起来的一种新视频格式。它是由 Microsoft ASF 压缩算法的修改而来的(并不是想象中的 AVI),视频格式追求的无非是压缩率和图像质量,所以 NAVI 为了追求这个目标,改善了原始的 ASF 格式的一些不足,让 NAVI 可以拥有更高的帧率。可以这样说,NAVI 是一种去掉视频流特性的改良型ASF 格式。

3GP:
3GP 是一种 3G 流媒体的视频编码格式,主要是为了配合 3G 网络的高传输速度而开发的,也是目前手机中最为常见的一种视频格式。
简单的说,该格式是“第三代合作伙伴项目”(3GPP)制定的一种多媒体标准,使用户能使用手机享受高质量的视频、音频等多媒体内容。其核心由包括高级音频编码(AAC)、自适应多速率 (AMR) 和MPEG-4 和H.263 视频编码解码器等组成,目前大部分支持视频拍摄的手机都支持3GPP 格式的视频播放。其特点是网速占用较少,但画质较差。

REAL VIDEO:
REAL VIDEO(RA、RAM)格式由一开始就是定位在视频流应用方面的,也可以说是视频流技术的始创者。它可以在用 56K MODEM 拨号上网的条件实现不间断的视频播放,当然,其图像质量和 MPEG2、DIVX 等比是不敢恭维的啦。毕竟要实现在网上传输不间断的视频是需要很大的频宽的,这方面是 ASF 的有力竞争者。

MKV:
一种后缀为 MKV 的视频文件频频出现在网络上,它可在一个文件中集成多条不同类型的音轨和字幕轨,而且其视频编码的自由度也非常大,可以是常见的DivX、XviD、3IVX,甚至可以是RealVideo、QuickTime、WMV 这类流式视频。实际上,它是一种全称为 Matroska 的新型多媒体封装格式,这种先进的、开放的封装格式已经给我们展示出非常好的应用前景。

FLV:
FLV 是 FLASH VIDEO 的简称, FLV 流媒体格式是一种新的视频格式。由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,它的出现有效地解决了视频文件导入 Flash 后,使导出的SWF 文件体积庞大,不能在网络上很好的使用等缺点。

F4V:
作为一种更小更清晰,更利于在网络传播的格式,F4V 已经逐渐取代了传统FLV,也已经被大多数主流播放器兼容播放,而不需要通过转换等复杂的方式。 F4V 是Adobe 公司为了迎接高清时代而推出继FLV 格式后的支持H.264的 F4V 流媒体格式。它和FLV 主要的区别在于,FLV 格式采用的是 H263 编码,而 F4V 则支持H.264 编码的高清晰视频,码率最高可达50Mbps。也就是说F4V 和FLV 在同等体积的前提下,能够实现更高的分辨率,并支持更高比特率,就是我们所说的更清晰更流畅。另外,很多主流媒体网站上下载的 F4V 文件后缀却为 FLV,这是 F4V 格式的另一个特点,属正常现象,观看时可明显感觉到这种实为 F4V 的FLV 有明显更高的清晰度和流畅度。

RMVB:
RMVB 的前身为RM 格式,它们是Real Networks 公司所制定的音频视频压缩规范,根据不同的网络传输速率,而制定出不同的压缩比率,从而实现在低速率的网络上进行影像数据实时传送和播放,具有体积小,画质也还不错的优点。

早期的RM 格式为了能够实现在有限带宽的情况下,进行视频在线播放而被研发出来,并一度红遍整个互联网。而为了实现更优化的体积与画面质量, Real Networks 公司不久又在RM 的基础上,推出了可变比特率编码的RMVB格式。RMVB 的诞生,打破了原先RM 格式那种平均压缩采样的方式,在保证平均压缩比的基础上,采用浮动比特率编码的方式,将较高的比特率用于复杂的动态画面(如歌舞、飞车、战争等),而在静态画面中则灵活地转为较低的采样率,从而合理地利用了比特率资源,使 RMVB 最大限度地压缩了影片的大小,最终拥有了近乎完美的接近于 DVD 品质的视听效果。我们可以做个简单对比,一般而言一部 120 分钟的 dvd 体积为 4GB,而 rmvb 格式来压缩,仅 400MB 左右,而且清晰度流畅度并不比原DVD 差太远。

人们为了缩短视频文件在网络进行传播的下载时间,为了节约用户电脑硬盘宝贵的空间容量,已越来越多的视频被压制成了 RMVB 格式,并广为流传。到如今,可能每一位电脑使用者电脑中的视频文件,超过80%都会是RMVB 格式。

WebM:
由 Google 提出,是一个开放、免费的媒体文件格式。WebM 影片格式其实是以 Matroska(即 MKV)容器格式为基础开发的新容器格式,里面包括了 VP8 影片轨和 Ogg Vorbis 音轨,其中 Google 将其拥有的VP8 视频编码技术以类似 BSD 授权开源,Ogg Vorbis 本来就是开放格式。 WebM 标准的网络视频更加偏向于开源并且是基于HTML5 标准的,WebM 项目旨在为对每个人都开放的网络开发高质量、开放的视频格式,其重点是解决视频服务这一核心的网络用户体验。Google 说 WebM 的格式相当有效率,应该可以在 netbook、tablet、手持式装置等上面顺畅地使用。

1.2、音频格式

音频格式是指要在计算机内播放或是处理音频文件,也就是要对声音文件进行数、模转换,这个过程同样由采样和量化构成,人耳所能听到的声音,最低的频率是从 20Hz 起一直到最高频率20KHZ,20KHz 以上人耳是听不到的,因此音频文件格式的最大带宽是 20KHZ,故而采样速率需要介于40~50KHZ 之间,而且对每个样本需要更多的量化比特数。音频数字化的标准是每个样本 16 位-96dB 的信噪比,采用线性脉冲编码调制PCM,每一量化步长都具有相等的长度。在音频文件的制作中,正是采用这一标准。

1.2.2、常见格式

CD:
CD 格式的音质是比较高的音频格式。因此要讲音频格式,CD 自然是打头阵的先锋。在大多数播放软件的“打开文件类型”中,都可以看到*.cda 格式,这就是CD 音轨了。标准CD 格式也就是 44.1K 的采样频率,速率 88K/秒,16 位量化位数,因为CD 音轨可以说是近似无损的,因此它的声音基本上是忠于原声的,因此如果你是一个音响发烧友的话,CD 是你的首选。它会让你感受到天籁之音。CD 光盘可以在CD 唱机中播放,也能用电脑里的各种播放软件来重放。一个CD 音频文件是一个*.cda 文件,这只是一个索引信息,并不是真正的包含声音信息,所以不论 CD 音乐的长短,在电脑上看到的“.cda 文件”都是 44 字节长。注意:不能直接的复制CD 格式的.cda 文件到硬盘上播放,需要使用象EAC 这样的抓音轨软件把CD 格式的文件转换成WAV,这个转换过程如果光盘驱动器质量过关而且 EAC 的参数设置得当的话,可以说是基本上无损抓音频。推荐大家使用这种方法。

WAVE:
WAVE (.WAV)是微软公司开发的一种声音文件格式,它合PIFFResource Interchange File Format 文件规范,用于保存WINDOWS 平台的音频信息资源,被 WINDOWS 平台及其应用程序所支持。“.WAV”格式支持MSADPCM、CCITT A LAW 等多种压缩算法,支持多种音频位数、采样频率和声道,标准格式的 WAV 文件和 CD格式一样,也是 44.1K 的采样频率,速率 88K/秒,16 位量化位数,看到了吧,WAV 格式的声音文件质量和CD 相差无几,也是目前PC 机上广为流行的声音文件格式,几乎所有的音频编辑软件都“认识”WAV 式。

AIFF:
AIFF(Audio Interchange File Format)格式和AU 格式,它们都和 WAV 非常相像,在大多数的音频编辑软件中也都支持它们这几种常见的音乐格式。

AIFF 是音频交换文件格式的英文缩写。是APPLE 公司开发的一种音频文件格式,被 MACINTOSH 平台及其应用程序所支持,NETSCAPE 浏览器中 LIVEAUDIO 也支持 AIFF 格式。所以大家都不常见。AIFF 是Apple 苹果电脑上面的标准音频格式,属于QuickTime 技术的一部分。这一格式的特点就是格式本身与数据的意义无关,因此受到了 Microsoft 的青睐,并据此搞出来 WAV 格式。AIFF 虽然是一种很优秀的文件格式,但由于它是苹果电脑上的格式,因此在PC 平台上并没有得到很大的流行。不过由于 Apple 电脑多用于多媒体制作出版行业,因此几乎所有的音频编辑软件和播放软件都或多或少地支持AIFF 格式。只要苹果电脑还在,AIFF 就始终还占有一席之地。由于AIFF 的包容特性,所以它支持许多压缩技术。

AU:
AUDIO 文件是SUN 公司推出的一种数字音频格式。AU 文件原先是UNIX 操作系统下的数字声音文件。由于早期 INTERNET 上的WEB 服务器主要是基于UNIX 的,所以,AU 格式的文件在如今的 INTERNET 中也是常用的声音文件格式。

MPEG:
MPEG 是动态图象专家组的英文缩写。这个专家组始建于1988 年,专门负责为 CD 建立视频和音频压缩标准。
MPEG 音频文件指的是MPEG 标准中的声音部分即MPEG 音频层。目前INTERNET 上的音乐格式以MP3 最为常见。虽然它是一种有损压缩,但是它的最大优势是以极小的声音失真换来了较高的压缩比。MPEG 含有格式包括:MPEG-1、MPEG-2、MPEG-Layer3、MPEG-4

MP3:
MP3 格式诞生于八十年代的德国,所谓的 MP3 也就是指的是 MPEG 标准中的音频部分,也就是 MPEG 音频层。根据压缩质量和编码处理的不同分为 3 层,分别对应“.mp1"/“.mp2”/“.mp3”这3 种声音文件。需要提醒大家注意的地方是:MPEG 音频文件的压缩是一种有损压缩,MPEG3 音频编码具有 10:1~12:1 的高压缩率,同时基本保持低音频部分不失真,但是牺牲了声音文件中 12KHz 到16KHz 高音频这部分的质量来换取文件的尺寸,相同长度的音乐文件,用.mp3 格式来储存,一般只有*.wav 文件的1/10,而音质要次于 CD 格式或WAV 格式的声音文件。由于其文件尺寸小,音质好;所以在它问世之初还没有什么别的音频格式可以与之匹敌,因而为*.mp3 格式的发展提供了良好的条件。直到现在,这种格式还是风靡一时,作为主流音频格式的地位难以被撼动。但是树大招风,MP3 音乐的版权问题也一直是找不到办法解决,因为 MP3 没有版权保护技术,说白了也就是谁都可以用。

MP3 格式压缩音乐的采样频率有很多种,可以用64Kbps 或更低的采样频率节省空间,也可以用320Kbps 的标
准达到极高的音质。用装有Fraunhofer IIS Mpeg Lyaer3 的 MP3 编码器(现在效果最好的编码器) MusicMatch Jukebox6.0 在128Kbps 的频率下编码一首 3 分钟的歌曲,得到2.82MB 的MP3 文件。采用缺省的 CBR(固定采样频率)技术可以以固定的频率采样一首歌曲,而VBR(可变采样频率)则可以在音乐“忙”的时候加大采样的频率获取更高的音质,不过产生的 MP3 文件可能在某些播放器上无法播放。把VBR 的级别设定成为与前面的CBR 文件的音质基本一样,生成的VBR MP3 文件为2.9MB。

MPEG-4:
MPEG-4 标准是由国际运动图像专家组于 2000 年10 月公布的一种面向多媒体应用的视频压缩标准。它采用了基于对象的压缩编码技术,在编码前首先对视频序列进行分析,从原始图像中分割出各个视频对象,然后再分别对每个视频对象的形状信息、运动信息、纹理信息单独编码,并通过比 MPEG-2 更优的运动预测和运动补偿来去除连续帧之间的时间冗余。其核心是基于内容的尺度可变性(Content-basedscalability),可以对图像中各个对象分配优先级,对比较重要的对象用高的空间和时间分辨率表示,对不甚重要的对象(如监控系统的背景)以较低的分辨率表示,甚至不显示。因此它具有自适应调配资源能力,可以实现高质量低速率的图像通信和视频传输。 MPEG-4 以其高质量、低传输速率等优点已经被广泛应用到网络多媒体、视频会议和多媒体监控等图像传输系统中。中国内外大部分成熟的 MPEG-4 应用均为基于PC 层面的客户端和服务器模式,应用在嵌入式系统上的并不多,且多数嵌入式MPEG-4 解码系统大多使用商业的嵌入式操作系统,如 WindowsCE、VxWorks 等,成本高、灵活性差。如以嵌入式Linux 作为操作系统不仅开发方便,且可以节约成本,并可以根据实际情况进行裁减,占用资源少、灵活性强,网络性能好,适用范围更广。

MIDI:
MIDI(Musical Instrument Digital Interface)格式被经常玩音乐的人使用,MIDI 允许数字合成器和其他设备交换数据。MID 文件格式由MIDI 继承而来。MID 文件并不是一段录制好的声音,而是记录声音的信息,然后在告诉声卡如何再现音乐的一组指令。这样一个 MIDI 文件每存 1 分钟的音乐只用大约5~10KB。MID 文件主要用于原始乐器作品,流行歌曲的业余表演,游戏音轨以及电子贺卡等。.mid 文件重放的效果完全依赖声卡的档次。.mid 格式的最大用处是在电脑作曲领域。.mid 文件可以用作曲软件写出,也可以通过声卡的 MIDI 口把外接音序器演奏的乐曲输入电脑里,制成.mid 文件。

WMA:
WMA (Windows Media Audio) 格式是来自于微软的重量级选手,后台强硬,音质要强于 MP3 格式,更远胜于RA 格式,它和日本YAMAHA 公司开发的VQF 格式一样,是以减少数据流量但保持音质的方法来达到比 MP3 压缩率更高的目的,WMA 的压缩率一般都可以达到1:18 左右,WMA 的另一个优点是内容提供商可以通过DRM(Digital Rights Management)方案如 Windows Media Rights Manager 7 加入防拷贝保护。这种内置了版权保护技术可以限制播放时间和播放次数甚至于播放的机器等等,这对被盗版搅得焦头乱额的音乐公司来说可是一个福音,另外 WMA 还支持音频流(Stream)技术,适合在网络上在线播放,作为微软抢占网络音乐的开路先锋可以说是技术领先、风头强劲,更方便的是不用象 MP3 那样需要安装额外的播放器,而Windows 操作系统和Windows Media Player的无缝捆绑让你只要安装了 windows 操作系统就可以直接播放WMA 音乐,新版本的 Windows Media Player7.0 更是增加了直接把CD 光盘转换为WMA 声音格式的功能,在新出品的操作系统Windows XP 中,WMA 是默认的编码格式,大家知道 Netscape 的遭遇,现在“狼”又来了。WMA 这种格式在录制时可以对音质进行调节。同一格式,音质好的可与CD 媲美,压缩率较高的可用于网络广播。虽然现在网络上还不是很流行,但是在微软的大规模推广下已经是得到了越来越多站点的承认和大力支持,在网络音乐领域中直逼*.mp3,在网络广播方面,也正在瓜分 Real打下的天下。因此,几乎所有的音频格式都感受到了 WMA 格式的压力。

RealAudio:
RealAudio 主要适用于在网络上的在线音乐欣赏,现在大多数的用户仍然在使用 56Kbps 或更低速率的Modem,所以典型的回放并非最好的音质。有的下载站点会提示你根据你的Modem 速率选择最佳的Real 文件。real 的的文件格式主要有这么几种:有 RA(RealAudio)、RM(RealMedia,RealAudio G2)、RMX(RealAudio Secured),还有更多。这些格式的特点是可以随网络带宽的不同而改变声音的质量,在保证大多数人听到流畅声音的前提下,令带宽较富裕的听众获得较好的音质。

VQF:

雅马哈公司另一种格式是*.vqf,它的核心是减少数据流量但保持音质的方法来达到更高的压缩比,VQF 的音频压缩率比标准的 MPEG 音频压缩率高出近一倍,可以达到 18:1 左右甚至更高。也就是说把一首4 分钟的歌曲(WAV文件)压成 MP3,大约需要4MB 左右的硬盘空间,而同一首歌曲,如果使用VQF 音频压缩技术的话,那只需要2MB 左右的硬盘空间。因此,在音频压缩率方面,MP3 和RA 都不是VQF 的对手。相同情况下压缩后VQF 的文件体积比 MP3 小30%~50%,更便利于网上传播,同时音质极佳,接近CD 音质(16 位 44.1kHz 立体声)。可以说技术上也是很先进的,但是由于宣传不力,这种格式难有用武之地。.vqf 可以用雅马哈的播放器播放。同时雅马哈也提供从.wav 文件转换到*.vqf 文件的软件。 此文件缺少特点外加缺乏宣传。

当VQF 以44KHz、 80kbit/s 的音频采样率压缩音乐时,它的音质优于44KHz、 128kbit/s 的MP3,当VQF 以44KHz、96kbit/s 的频率压缩时,它的音质几乎等于44KHz256kbit/s 的MP3。经SoundVQ 压缩后的音频文件在进行回放效果试听时,几乎没有人能听出它与原音频文件的差异。

OggVorbis:

OggVorbis 是一种新的音频压缩格式,类似于MP3 等现有的音乐格式。但有一点不同的是,它是完全免费、开放和没有专利限制的。Vorbis 是这种音频压缩机制的名字,而Ogg 则是一个计划的名字,该计划意图设计一个完全开放性的多媒体系统。目前该计划只实现了OggVorbis 这一部分。

OggVorbis 文件的扩展名是*.OGG。这种文件的设计格式是非常先进的。这种文件格式可以不断地进行大小和音质的改良,而不影响旧有的编码器或播放器。

VORBIS 采用有损压缩,但通过使用更加先进的声学模型去减少损失,因此,同样位速率(BitRate)编码的 OGG与 MP3 相比听起来更好一些。另外,还有一个原因,MP3 格式是受专利保护的。如果你想使用MP3 格式发布自己的作品,则需要付给 Fraunhofer(发明MP3 的公司)专利使用费。而VORBIS 就完全没有这个问题。

AMR:
AMR 全称Adaptive Multi-Rate,自适应多速率编码,主要用于移动设备的音频,压缩比比较大,但相对其他的压缩格式质量比较差,由于多用于人声,通话,效果还是很不错的。

1.2.2、比较

作为数字音乐文件格式的标准,WAV 格式容量过大,因而使用起来很不方便。因此,一般情况下我们把它压缩为 MP3 或WMA 格式。压缩方法有无损压缩,有损压缩,以及混成压缩。MPEG,JPEG 就属于混成压缩,如果把压缩的数据还原回去,数据其实是不一样的。当然,人耳是无法分辨的。因此,如果把 MP3,OGG 格式从压缩的状态还原回去的话,就会产生损失。然而,APE 格式即使还原,也能毫无损失地保留原有音质。所以,APE 可以无损失高音质地压缩和还原。在完全保持音质的前提下, APE 的压缩容量有了适当的减小。拿一个最为常见的38MBWAV文件为例,压缩为APE 格式后为 25MB 左右,比开始足足少了 13MB。而且MP3 容量越来越大的今天,25M 的歌曲已经算不上什么庞然大物了。以 1GB 的mp3 来说可以放入 4 张CD,那就是40 多首歌曲,已经足够了!
MP3 支持格式有 MP3 和 WMA。MP3 由于是有损压缩,因此讲求采样率,一般是 44.1KHZ。另外,还有比特率,即数据流,一般为 8—320KBPS。在MP3 编码时,还看看它是否支持可变比特率(VBR),现在出的MP3 机大部分都支持,这样可以减小有效文件的体积。WMA 则是微软力推的一种音频格式,相对来说要比 MP3 体积更小。

1.3、字幕格式

1.3.1、外挂字幕与内嵌字幕

  • 外挂字幕:是视频文件和字幕文件分离,在播放的时候要导入字幕文件。比如 DVD就会自动导入字幕。外挂字幕的好处是:可以导入自己国家的语言。
  • 内嵌字幕:视频文件和字幕文件已经集成到了一起,没有办法改变和去掉了。

1.3.2、比较

外挂字幕相对于内嵌字幕来说对视频的质量损害就会小很多,外挂的意思就是在视频之外单独运行的一种字幕文件,对视频本身的分辨率损害很小甚至为零。而内嵌的字面意思就是将视频连带外挂字幕用专有的录制软件重新将视频录制一遍,成为一个新的视频;这种方法虽然解决了视频体积过大和播放器不兼容等问题,但是在重新录制视频过程当中会无意识的损害原视频本身的码率,使重新录制出来的视频分辨率大大不如原视频,所以在选择外挂与内嵌字幕时需结合自身情况考虑视频需要进行选择。

1.3.3、格式

  1. srt格式:这是最好的,体积小,用记事本可以打开编辑。
  2. sub+idx:这种是图形字幕,只能用字幕转换软件;体积较大。
  3. ass字幕:网上比较少,比 srt多一些特效。

使用外挂字幕的时候,要保证字幕文件和视频文件放置在同一个文件夹下,并且保证两者的文件名相同,但是不要修改后缀和标识(常见的标识有 chs、GB,cht,Big5,eng 五种;其中chs和 GB 表示简体中文,cht 和 Big5 表示繁体中文,eng表示英文)

1.4、编解码器

编解码器(codec)指的是一个能够对一个信号或者一个数据流进行变换的设备或者程序。这里指的变换既包括将信号或者数据流进行编码(通常是为了传输、存储或者加密)或者提取得到一个编码流的操作,也包括为了观察或者处理从这个编码流中恢复适合观察或操作的形式的操作。编解码器经常用在视频会议和流媒体等应用中,通常主要还是用在广电行业,作前端应用。

经过编码的音频或者视频原始码流经常被叫做“Essence”(有译作“本体”,“精”),以区别于之后加入码流的元信息和其它用以帮助访问码流和增强码流鲁棒性的数据。

大多数编解码器是有损的,目的是为了得到更大的压缩比和更小的文件大小。当然也有无损的编解码器,但是通常没有必要为了一些几乎注意不到的的质量损失而大大增加编码后文件的大小。除非该编码的结果还将在以后进行下一步的处理,此时连续的有损编码通常会带来较大的质量损失。

很多多媒体数据流需要同时包含音频数据和视频数据,这时通常会加入一些用于音频和视频数据同步的元数据。这三种数据流可能会被不同的程序,进程或者硬件处理,但是当它们传输或者存储的时候,这三种数据通常是被封装在一起的。通常这种封装是通过视频文件格式来实现的,例如常见的*.mpg, *.avi, *.mov, *.mp4, *.rm, .ogg or.tta. 这些格式中有些只能使用某些编解码器,而更多可以以容器的方式使用各种编解码器。

编解码器对应的英文“codec”(coder 和 decoder 简化而成的合成词语)和 decode 通常指软件,当特指硬件的时候,通常使用“endec”这个单词。

硬件编解码器有标清编解码器和高清编解码器。所谓标清,英文为“Standard Definition”,是物理分辨率在 720p以下的一种视频格式。 720p 是指视频的垂直分辨率为 720 线逐行扫描。具体的说,是指分辨率在400 线左右的VCD、DVD、电视节目等“标清”视频格式,即标准清晰度。而物理分辨率达到720p 以上则称作为高清,(英文表述 HighDefinition)简称HD。关于高清的标准,国际上公认的有两条:视频垂直分辨率超过 720p 或1080i;视频宽纵比为16:9。

1.5、容器和协议

1.5.1、容器格式和编码格式

1.5.1.1、简介

首先要分清楚媒体文件和编码的区别:
文件是既包括视频又包括音频、甚至还带有脚本的一个集合,也可以叫容器;文件当中的视频和音频的压缩算法才是具体的编码。

也就是说一个.avi 文件,当中的视频可能是编码 a,也可能是编码b,音频可能是编码 5,也可能是编码 6,具体的用那种编码的解码器,则由播放器按照 avi 文件格式读取信息去调用了。

音频视频编码方案有很多,用百家争鸣形容不算过分,目前常见的音频视频编码有以下几类:

编码系列内容
MPEG 系列:(由ISO[国际标准组织机构]下属的MPEG[运动图象专家组]开发 )视频编码方面主要是Mpeg1(vcd 用的就是它)、Mpeg2(DVD 使用)、Mpeg4(现在的DVDRIP 使用的都是它的变种,如:divx,xvid 等)、Mpeg4 AVC(现在正热门);
音频编码方面主要是MPEG Audio Layer 1/2、 MPEG Audio Layer 3 (大名鼎鼎的 mp3)、 MPEG-2 AAC 、 MPEG-4AAC 等等。 注意:DVD 音频没有采用 Mpeg 的
H.26X 系列:(由ITU[国际电传视讯联盟]主导,侧重网络传输,注意:只是视频编码)包括 H261、H262、H263、H263+、H263++、H264(就是MPEG4 AVC-合作的结晶)
微软windows media 系列视频编码有Mpeg-4 v1/v2/v3(基于MPEG4,DIVX3 的来源,呵呵)、Windows Media Video 7/8/9/10
音频编码有Windows Media audeo v1/v2/7/8/9
Real Media 系列:(注意,这里说的Real 的编码,可不是 rm、rmvb 文件,呵呵)视频编码有RealVideo G2(早期)、RealVideo 8/9/10
音频编码有RealAudio cook/sipro(早期)、RealAudio AAC/AACPlus 等
QuickTime 系列:(是一个平台,有很多编码器)视频编码有Sorenson Video 3(用于QT5,成标准了)、Apple MPEG-4、Apple H.264
音频编码有QDesign Music 2、Apple MPEG-4 AAC (这个不错)
其它Ogg、On2-vpx、flash vidio
1.5.1.2、多媒体容器文件格式

多媒体容器文件格式一般都包括文件头部分、索引部分和多媒体数据部分
在这里插入图片描述

多媒体数据部分文件头部分说明了多媒体数据符合的压缩标准及规范信息,多媒体数据符合的规范信息可以包括视频的分辨率、帧率,音频的采样率等。

索引部分:由于多媒体数据通常会被分成若干块,各块数据之间也可能是不连续存储的,因此需要再索引部分建立多媒体数据的存储位置索引(如图 2 所示),其详细显示了视频数据存储位置索引,用来记录相应数据块的存储位置的偏移量,由于各数据块的大小可能不同,因此也可能需要在索引部分建立各种多媒体数据块的尺寸大小索引,用来记录相应数据块的尺寸大小。此外在索引部分还建立了其他索引,比如音视频同步索引等等。PC 上播放这些多媒体容器文件时,一般是将索引一次性的全部放到内存中,然后在播放中根据操作(快进、快退等)来通过数据索引得到所需的数据。这个貌似和项目里面的视频信息文件的作用类似。多媒体数据部分就是经过压缩的多媒体数据,包括视频数据、音频数据、文本数据及其他多媒体数据。

在这里插入图片描述

1.5.1.3、音频编解码格式

以文件名标识识别音频编码格式:

文件后缀编码格式
*.acc音频编码:aac
*.ape
*.au
音频编码:pcm_s16be
*.m4a音频编码:mpeg4 aac
*.mp2
*.mp3
*.ogg
音频编码:vorbis
*.wav音频编码:pcm_s16le
*.flav
*.wma
音频编码:wma7x

以文件名标识识别音视频编码格式:

文件后缀编码格式
*.MP4 (MP4 MPEG-4 视频)视频编码:mpeg4
音频编码:mpeg4 aac
*.3gp (3GPP 第三代合作项目)视频编码:mpeg4
音频编码:amr_nb((mono, 8000 Hz, Sample Depth 16 morsel, bitrate 12 kbps)
*.3g2 (3GPP 第三代合作项目 2)视频编码:mpeg4
音频编码:mpeg4 aac
*.asf (ASF 高级流格式)视频编码:msmpeg4
音频编码:mp3
*.avi (A VI 音视频交错格式)视频编码:mpeg4
音频编码:pcm_s161e
*.avi (divx 影片)视频编码:mpeg4
音频编码:mp3
*.avi(xvid 视频)视频编码:Xvid
音频编码:mp3
*.vob (DVD)视频编码:mpeg2 video
音频编码:ac3
*.flv (flash 视频格式)视频编码:
音频编码:mp3
*.mp4 (iPod 320*240 MPEG-4 视频格式)视频编码:mpeg4
音频编码:mpeg4 aac
*.mp4(iPod video2 640*480 MPEG-4 视频格式)视频编码:mpeg4
音频编码:mpeg4 aac
*.mov (MOV 苹果quicktime 格式)视频编码:mpeg4_qt
音频编码:mpeg4 aac_qt
*.mpg (mpeg1 影片)视频编码:mpeg1 video
音频编码:mp2
*.mpg (mpeg2 影片)视频编码:mpeg2 video
音频编码:mp2
*.mp4 (mpeg4 avc 视频格式)视频编码:h.264
音频编码:mpeg4 aac
*.mp4 (PSP mpeg4 影片)视频编码:Xvid
音频编码:mpeg4 aac
*.mp4 (PSP AVC 视频格式)视频编码:h.264
音频编码:mpeg4 aac
*.rm (RM realvideo)视频编码:rv10
音频编码:ac3
*.mpg (超级VCD)视频编码:mpeg2 video
音频编码:mp2
*.swf (SWF 格式)视频编码:
音频编码:mp3
*.mpg (video CD 格式)视频编码:mpeg1 video
音频编码:mp2
*.vob (mpeg2 ps 格式)视频编码:mpeg2 video
音频编码:ac3
*.wmv(windows 视频格式)视频编码:wmv3x
音频编码:wma7x

1.5.2、协议

两大标准制定组织,这里的标准,主要指的是音视频压缩标准。两大组织分别是国际标准化组织(iso)和国际电信联盟(itu),相信 it 行业的从业者没听说过这两个行业的人很少。
在音视频压缩标准方面,mpeg 系列的协议是iso 制定的标准,而 h 系列的协议则是 itu 制定的标准。

1.5.2.1、视频协议

目前主要的视频压缩协议有:h.261、h.263、h.264 和mpeg-1、mpeg-2 和mpeg-4。第一个视频压缩标准是 h.261,它的算法 现 在来看,非常简单,但是,它的很多视频压缩的思想,一直影响到现在最新的压缩标准 h.264。h.264
单看名字,感觉是 itu 组织制定的,其实它还有一 个名字叫 mpeg-4 part 10,翻译过来叫 mpeg-4 第十部分,这是因为 h.264 是 iso 和 itu 组织共同制定的,版权共享。其实,一直以来,h 系列的标准制定者和 mpeg 系列的标准制定者基本上就是同一 群人,而且,这两个系列的算法思想基本上都差不多,唯一有一点不同的协议是 mpeg-4,它在它的高级 profile 中提出了小波变换等算法来实现视频压 缩,从实际发展看,个人感觉不是很成功,采用小波变换的商用 codec 很少,这可能和这些算法的达不到实时性有关系。

从应用的角度看,mpeg 系列在消费类应用更广些,大家也更熟悉些,我们熟悉的 vcd 格式视频主要是mpeg-1,dvd 的视频则是 mpeg-2,早期大家看的电影在电脑上存盘文 件格式都是*.mpg,基本上也都是 mpeg 做的压缩了。在行业上,国内的监控行业,也是从 mpeg-1 到 mpeg-2,到前两三年的 mpeg-4,再到 最近的h.264。而h 系列的标准,用得最多的是视频会议,从 h.261 到h.263,再到h.263+、h.263++等,再到现在的 h.264。

从技术角度说,h 系列的协议对网络的支持更好些,这点 mpeg 系列要差一些,但是,mpeg 它每一代都比 h 系列同一代的协议要出得晚些,算法也相对更先进 些,因此,它用来做存储协议是很合适的,这也就是为什么普通消费类产品用户很少了解到 h 系列协议的原因。

h.264 是两大组织最新的算法成果,它在算法层面应该说是非常先进了,有人评价,h.264 是视频压缩技术的一个里程碑,在可预见的 5 到10 年内,出现新的视频压缩协议可能性很小,除非压缩理论有重大突破。

中国也有自己的视频压缩协议,叫做 avs,搞了好多年了,不过搞得不是很好。从市场分析,消费类电子、视频会议和流媒体行业,现在要再想进去可能很困难 了。不过最近听说 avs 又有点火起来了,有消息称,iptv 指定要支持 avs,这可能是它的最后机会了吧。

除了上面说的协议,还有很多公司也有自己的压缩算法,不过基本上都是不公开的了,他们这些算法也都非常好,不过和开发人员关系倒不是很大了,典型的是微软 的 wmv、realplay 公司的 rm 和 rmvb 等,他们的使用者也很多,而且他们都偏向流媒体应用。

1.5.2.2、音频协议

音频协议也分两大类,itu 组织的主要是用于视频会议的 g 系列协议,包括g.711、g.722、g.723、g.726、g.728、g.729 等。这些 协议主要有两大特点,第一是比较关注语音压缩,毕竟开会主要是要听人讲话;对音乐的压缩效果可能就不是太好了;第二是压缩率都比较大,码率都比较低,典型 的g.723 支持 5.9k/s 这样的码率,而且语音音质还很不错。iso 的音频可能更为人熟知一些,最流行的就是 mp3,它的全称是mpeg-1 audio layer 3,意思是 mpeg-1的音频第三层;另外,最新的音频算法被称为 aac(也称为 mp4),它定义在mpeg-2 或 mpeg-4 的音频部分。他们的特点是 音质好,支持多声道,高采样精度和采样频率,尤其对音乐的压缩效果比 g 系列要好太多。当然,这也是因为它们的应用领域侧重点不同造成的。

同样的,很多大公司也有自己的语音压缩标准,效果也非常好。不过都是他们自己的知识产权和算法,通用市场用的还是少。

1.5.2.3、上层通讯协议

在视频会议系统中,目前最流行的有 h.323 和 sip 协议,在流媒体应用中,isma rtsp 应用得比较多,它属于开源项目,而很多流媒体产商有自己的流媒体传输协议,比如微软的 mms 等。

h.323 主要用于视频会议,被称为协议簇,我们前面提到的 h 系列视频压缩协议和 g 系列音频压缩协议都属于它的子协议。除了音视频编解码器外;它还定义了各种数据应 用,包括 t.120、t.84、t.434 等;另外还包括 h.245控制信道、h.225.0 呼叫信令信道以及 ras 信道。

sip 是由ietf 提出来的一个应用控制(信令)协议。正如名字所隐含的–用于发起会话。它可用来创建、修改以及终结多个参与者参加的多媒体会话进程。参与会话的成员可以通过组播方式、单播连网或者两者结合的形式进行通信。

h.323 和sip 分别是通信领域与因特网两大阵营推出的建议。h.323 企图把ip 电话当作是众所周知的传统电话,只是传输方式发生了改变,由电路交换变成了分组交换。而 sip 协议侧重于将 ip 电话作为因特网上的一 个应用,较其实应用(如 ftp,e-mail 等)增加了信令和 qos 的要求,它们支持的业务基本相同,也都利用 rtp 作为媒体传输的协议。但 h.323 是 一个相对复杂的协议。

rtsp 主要用于流媒体传输,它的英文全称是 real time streaming protocol。典型的应用就是网络电视的应用,由客
户向服务器进行点播,如果在监控行业应用的话,建议当用户进行远程回放录像时,可采用 rtsp 协议。

1.6、常用概念

1.6.1、硬解

视频解码分为软解和硬解:

  • “软解”就是通过软件让CPU 进行视频解码处理;
  • “硬解”是指不依赖于CPU,通过专用的设备(子卡)
    单独完成视频解码,比如曾经的 VCD/DVD 解压卡、视频压缩卡都被冠以“硬解”的称号。现在实现高清硬解不需要额外的子卡,也不需要额外的投入,因为硬解码模块被整合在了 GPU 内部,而目前主流的显卡(包括整合显卡)都能支持硬解码。
  • “硬解”其实更需要软件的支持,只是基本不需要CPU 参与运算,从而为系统节约了很多资源开销。通过降低CPU
    占用率,可以给用户带来很多实惠

GPU 硬解码高清视频的优势:

  1. 不需要太好的 CPU,单核足矣,CPU 方面节约不少资金;
  2. 硬解码基本相当于免费附送,不到 500 元的整合主板都能完美支持;
  3. 硬解码让 CPU 占用率超低,系统有能力在看 HDTV 的同时进行多任务操作;
  4. CPU 需要倾尽全力才能解码HDTV,而GPU 只需动用 0.1 亿晶体管的解码模块就能完成任务,功耗控制更好;

GPU 硬解码高清视频的劣势:
5. 起步较晚,软件支持度无法与软解相提并论;
6. 面对杂乱无章的视频编码、封装格式,硬解码无法做到全面兼容;
7. 软解拥有大量画面输出补偿及画质增强技术,而硬解这方面做得还远远不够;
8. 硬解码软件设置较为复杂,很多朋友根本不知道该如何正确使用 GPU 硬件解码。

1.7.2、IBP帧

帧——就是影像动画中最小单位的单幅影像画面,相当于电影胶片上的每一格镜头。而在实际压缩时,会采取各种算法减少数据的容量,其中 IPB 就是最常见的。

基本概念:

  • I frame:帧内编码帧 又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。I 帧可以看成是一个图像经过压缩后的产物。
  • P frame:前向预测编码帧 又称 predictive-frame,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧;
  • B frame:双向预测内插编码帧 又称bi-directional interpolated prediction frame,既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧;
  • PTS:Presentation Time Stamp(显示时间戳)。PTS 主要用于度量解码后的视频帧什么时候被显示出来
  • DTS:Decode Time Stamp(解码时间戳)。DTS 主要是标识读入内存中的bit流在什么时候开始送入解码器中进行解码。

在没有B 帧存在的情况下DTS 的顺序和PTS 的顺序应该是一样的。

I帧特点:

  • 它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG 压缩编码及传输;
  • 解码时仅用 I 帧的数据就可重构完整图像;
  • I 帧描述了图像背景和运动主体的详情;
  • I 帧不需要参考其他画面而生成;
  • I 帧是P 帧和B 帧的参考帧(其质量直接影响到同组中以后各帧的质量);
  • I 帧是帧组GOP 的基础帧(第一帧),在一组中只有一个 I 帧;
  • I 帧不需要考虑运动矢量;
  • I 帧所占数据的信息量比较大。

P帧特点:

  • P 帧是以I 帧为参考帧,在 I 帧中找出P 帧“某点”的预测值和运动矢量,取预测差值和运动矢量一起传送。在接收端根据运动矢量从 I 帧中找出P 帧“某点”的预测值并与差值相加以得到P 帧“某点”样值,从而可得到完整的P 帧。
  • P 帧是 I 帧后面相隔1~2 帧的编码帧;
  • P 帧采用运动补偿的方法传送它与前面的I 或P 帧的差值及运动矢量(预测误差);
  • 解码时必须将 I 帧中的预测值与预测误差求和后才能重构完整的P 帧图像;
  • P 帧属于前向预测的帧间编码。它只参考前面最靠近它的I 帧或P 帧;
  • P 帧可以是其后面P 帧的参考帧,也可以是其前后的B 帧的参考帧;
  • 由于P 帧是参考帧,它可能造成解码错误的扩散;
  • 由于是差值传送,P 帧的压缩比较高。

B帧特点:

  • B 帧以前面的 I 或P 帧和后面的P 帧为参考帧,“找出”B 帧“某点”的预测值和两个运动矢量,并取预测差值和运动矢量传送。接收端根据运动矢量在两个参考帧中“找出(算出)”预测值并与差值求和,得到B 帧“某点”样值,从而可得到完整的B 帧。
  • B 帧是由前面的I 或P 帧和后面的P 帧来进行预测的;
  • B 帧传送的是它与前面的I 或P 帧和后面的P 帧之间的预测误差及运动矢量;
  • B 帧是双向预测编码帧;
  • B 帧压缩比最高,因为它只反映丙参考帧间运动主体的变化情况,预测比较准确;
  • B 帧不是参考帧,不会造成解码错误的扩散。

注:I、B、P 各帧是根据压缩算法的需要,是人为定义的,它们都是实实在在的物理帧,至于图像中的哪一帧是 I 帧,是随机的,一但确定了 I 帧,以后的各帧就严格按规定顺序排列

从上面的解释看,我们知道 I 和P 的解码算法比较简单,资源占用也比较少,I 只要自己完成就行了,P 呢,也只需要解码器把前一个画面缓存一下,遇到 P 时就使用之前缓存的画面就好了,如果视频流只有 I 和 P,解码器可以不管后面的数据,边读边解码,线性前进,大家很舒服。

但网络上的电影很多都采用了B 帧,因为B 帧记录的是前后帧的差别,比P 帧能节约更多的空间,但这样一来,文件小了,解码器就麻烦了,因为在解码时,不仅要用之前缓存的画面,还要知道下一个 I 或者 P 的画面(也就是说要预读预解码),而且,B 帧不能简单地丢掉,因为 B 帧其实也包含了画面信息,如果简单丢掉,并用之前的画面简单重复,就会造成画面卡(其实就是丢帧了),并且由于网络上的电影为了节约空间,往往使用相当多的 B 帧,B 帧用的多,对不支持B 帧的播放器就造成更大的困扰,画面也就越卡。

一般平均来说,I 的压缩率是 7(跟JPG 差不多),P 是20,B 可以达到50,可见使用 B 帧能节省大量空间,节省出来的空间可以用来保存多一些 I 帧,这样在相同码率下,可以提供更好的画质。

GOP(画面组):
GOP(Group of Pictures)策略影响编码质量:所谓 GOP,意思是画面组,一个GOP 就是一组连续的画面。MPEG编码将画面(即帧)分为 I、P、B 三种,I 是内部编码帧,P 是前向预测帧,B 是双向内插帧。简单地讲,I 帧是一个完整的画面,而P 帧和B 帧记录的是相对于 I 帧的变化。没有 I 帧,P 帧和B 帧就无法解码,这就是 MPEG 格式难以精确剪辑的原因,也是我们之所以要微调头和尾的原因。

MPEG-2 压缩的帧结构有两个参数,一个是GOP(Group Of Picture)图像组的长度,一般可按编码方式从 1-15;另一个是 I 帧和P 帧之间B 帧的数量,一般是 1-2 个。前者在理论上记录为N,即多少帧里面出现一次 I 帧;后者描述为多少帧里出现一次P 帧,记录为M。

在这里插入图片描述

在如上图中,GOP (Group of Pictures)长度为13,S0~S7 表示 8 个视点,T0~T12 为 GOP 的 13 个时刻。每个 GOP包含帧数为视点数 GOP 长度的乘积。在该图中一个 GOP 中,包含 94 个 B 帧。B 帧占一个 GOP 总帧数的90.38%。GOP 越长,B 帧所占比例更高,编码的率失真性能越高。

1.7.3、分辨率

  • 物理分辨率, 即手机屏幕能显示的像素数, 用W x H 个像素表示。常见的手机屏幕分辨率为320x240(QVGA), 随着大屏幕手机的普及, 更高的分辨率也开始出现. 例如: 480x320(iphone),640x360(nHD, 诺基亚触屏系列常见),640x480(VGA, 多普达系列常见), 甚至高达852x480(夏普高端手机常见).
  • 视频文件的分辨率, 这个是指视频画面的实际分辨率, 如, 320x240, 480x272, 640x480 等等。一般来说, 大部分手机的解码芯片不支持超过其屏幕物理分辨率的视频, 部分可以支持超过其屏幕物理分辨率的视频, 例如, 虽然 iphone 的屏幕物理分辨率为 480x320, 但它支持 640x480 的视频, 此时播放的画面实际是把原视频缩小的.

1.7.4、码率

一般用多少 kbps(千比特/秒)或者mbps(兆比特/秒)来表示。 手机解码芯片所支持的码率一般都在1Mbps 以下.

1.7.5、帧率

(FPS, 帧/秒), 就是视频画面刷新的速度, 作为参考, 国内电视机一般是25FPS, 电影标准为 24FPS. 手机芯片, 最高支持 30FPS, 早期型号最大只能 15fps。

1.7.6、RGB和YUV

RGB 指的是红绿蓝,应用还是很广泛的,比如显示器显示,bmp 文件格式中的像素值等;而 yuv 主要指亮度和两个色差信号,被称为 luminance 和 chrominance 他们的转化关系可以自己去查一下,我们视频里面基本上都是用yuv 格式。

YUV 文件格式又分很多种,如果算上存储格式,就更多了,比如 yuv444、yuv422、yuv411、yuv420 等等,视频压缩用到的是 420 格式,这是 因为人眼对亮度更敏感些,对色度相对要差些。另外要注意几个英文单词的意思,比如:packet、planar、interlace、 progressive 等。

1.7.7、实时和非实时

实时与非实时 主要用来形容编码器,它含有两个意思,一个是要保证帧率,也就是每秒 25 帧,另一个是“live”的意思,意味着直播,所谓的“实况转播”的“实”。

二、FFmpeg框架

2.1、FFmpeg概述

2.1.1、简介

Open-source multimedia library, 遵从GPL/LGPL 协议,ffmpeg 只是一个商标,它的所有权属于 ffmpeg org。

由Fabrice Bellard(法国著名程序员Born in 1972)于 2000 年发起创建的开源项目,同时也是TinyCC(1996)、发现最快速计算圆周率算法(1997)、 TinyGL(1998)、QEMU(2003)、 Jslinux(2011)等等的发起人或作者。

FFmpeg 在 Linux 平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括 Windows、Mac OS X 等。这个项目是由 Fabrice Bellard 发起的,现在由Michael Niedermayer 主持。

许多 FFmpeg 的开发人员都来自 MPlayer 项目,而且当前 FFmpeg 也是放在 MPlayer 项目组的服务器上。项目的名称来自 MPEG 视频编码标准,前面的"FF"代表"Fast Forward"。

FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库libavcodec。 FFmpeg 是在 Linux 下开发出来的,但它可以在包括 Windows 在内的大多数操作系统中编译。这个项目是由Fabrice Bellard 发起的,现在由 Michael Niedermayer 主持。可以轻易地实现多种视频格式之间的相互转换,例如可以将摄录下的视频 avi 等转成现在视频网站所采用的flv 格式。

2.1.2、功能

多媒体视频处理工具FFmpeg 有非常强大的功能[2]包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。

2.1.3、模块组成

模块功能
libavformat用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;音视频的格式解析协议,为 libavcodec 分析码流提供独立的音频或视频码流源。
libavcodec用于各种类型声音/图像编解码;该库是音视频编解码核心,实现了市面上可见的绝大部分解码器的功能,libavcodec 库被其他各大解码器 ffdshow,Mplayer 等所包含或应用。
libavdevice硬 件 采 集 、 加 速 、 显 示 。 操 作 计 算 机 中 常 用 的 音 视 频 捕 获 或 输 出 设 备 :ALSA,AUDIO_BEOS,JACK,OSS,1394,VFW。
libavfilterfilter(FileIO、FPS、DrawText)音视频滤波器的开发,如宽高比 裁剪 格式化 非格式化 伸缩
libavutil包含一些公共的工具函数的使用库,包括算数运算 字符操作;
libavresample音视频封转编解码格式预设等。
libswscale(原始视频格式转换)用于视频场景比例缩放、色彩映射转换;图像颜色空间或格式转换,如 rgb565 rgb888 等与 yuv420 等之间转换。
libswresample原始音频格式转码
libpostproc(同步、时间计算的简单算法)用于后期效果处理;音视频应用的后处理,如图像的去块效应。
ffmpeg该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等;
ffsever一个 HTTP 多媒体即时广播串流服务器;
ffplay是一个简单的播放器,使用 ffmpeg 库解析和解码,通过 SDL 显示;

2.1.4、命令集

FFmpeg命令集举例:

功能命令作用
获取视频的信息ffmpeg -i video.avi
将图片序列合成视频ffmpeg -f image2 -i image%d.jpg video.mpg上面的命令会把当前目录下的图片(名字如:image1.jpg. image2.jpg. 等…)合并成 video.mpg
将视频分解成图片序列ffmpeg -i video.mpg image%d.jpg上面的命令会生成image1.jpg. image2.jpg. …
支持的图片格式有:PGM. PPM. PAM. PGMYUV. JPEG. GIF. PNG. TIFF. SGI
为视频重新编码以适合在 iPod/iPhone 上播放ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4源视频:source_video.avi
音频编码:aac
音频位率:128kb/s
视频编码:mpeg4
视频位率:1200kb/s
视频尺寸:320 X 180
生成的视频:final_video.mp4
为视频重新编码以适合在PSP 上播放ffmpeg -i source_video.avi -b 300 -s 320x240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_video.mp4源视频:source_video.avi
音频编码:aac
音频位率:32kb/s
视频编码:xvid
视频位率:1200kb/s
视频尺寸:320 X 180
生成的视频:final_video.mp4
从视频抽出声音.并存为Mp3ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3源视频:source_video.avi
音频位率:192kb/s
输出格式:mp3
生成的声音:sound.mp3
将 wav 文件转成Mp3ffmpeg -i son_origine.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3
将.avi 视频转成.mpgffmpeg -i video_origine.avi video_finale.mpg
将.mpg 转成.aviffmpeg -i video_origine.mpg video_finale.avi
将.avi 转成 gif 动画(未压缩)ffmpeg -i video_origine.avi gif_anime.gif
合成视频和音频ffmpeg -i son.wav -i video_origine.avi video_finale.mpg
将.avi 转成.flvffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finale.flv
将.avi 转成 dvffmpeg -i video_origine.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 video_finale.dv
或者
ffmpeg -i video_origine.avi -target pal-dv video_finale.dv
将.avi 压缩成divxffmpeg -i video_origine.avi -s 320x240 -vcodec msmpeg4v2 video_finale.avi
将Ogg Theora 压缩成 Mpeg dvdffmpeg -i film_sortie_cinelerra.ogm -s 720x576 -vcodec mpeg2video -acodec mp3 film_terminate.mpg
将.avi 压缩成SVCD mpeg2NTSC 格式:ffmpeg -i video_origine.avi -target ntsc-svcd video_finale.mpg
PAL 格式:ffmpeg -i video_origine.avi -target pal-svcd video_finale.mpg
将.avi 压缩成VCD mpeg2NTSC 格式:ffmpeg -i video_origine.avi -target ntsc-vcd video_finale.mpg
PAL 格式:ffmpeg -i video_origine.avi -target pal-vcd video_finale.mpg
多通道编码ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2
从 flv 提取mp3ffmpeg -i source.flv -ab 128k dest.mp3

2.2、媒体播放器三大底层框架

媒体播放工具,这里主要指视频播放,因为要面临庞大的兼容性和纷繁复杂的算法,从架构上看,能脱颖而出的体系屈指可数。大体来说业界主要有 3 大架构:MPC、MPlayer 和VLC。这3 大架构及其衍生品占领了 90%的市场,凡是用户能看到的免费媒体播放软件,无一不是源自这 3 大架构。

2.2.1、MPC/HC架构

MPC(Media Player Classic)和它的后续者MPC-HC 应该并列而说。MPC 基于 DirectShow 架构,是Windows
系统下元祖级别的播放器。包括 KMP 之流最早也就是抄来 MPC 的代码再换个界面。MPCHC 则在 MPC 的原作者
Gabest 渐渐退出开发后的继承者, MPCHC 有很多创新特性,包括开始融入 ffmpeg 和支持更多DirectX 特性和DXVA
等等。

在这里插入图片描述

  • **优点:**更直接的支持DXVA,对一些稀奇古怪的 Windows 平台上的格式可以通过调用第三方的Filter 组件等,拥有更好的兼容性
  • **缺点:**有人说 DirectShow 是 Windows 中最难掌握的SDK,开发复杂;DirectShow 允许第三方封装的特点也让兼容性和稳定性问题复杂化;第三方 Filter 出现异常时非常难以分析处理,更难以复用;射手播放器的架构主要来自 MPC-HC,但更多的融合了 FFmpeg 的优势,对DirectShow Filter 进行了多处改写,大大加强了对 ffmpeg 的利用,提高了解码稳定性,同时扩展了解码能力和兼容性。

2.2.2、mplayer架构

如果说MPC 是 Windows 上的元祖,那么mplayer 就是 linux 上媒体播放的元祖了。mplayer 使用ffmpeg 作为解码核心,也是与 ffmpeg 结合最紧密的项目,ffmpeg 的代码就是由 mplayer 来host,开发者群也有非常大的交集。借助 linux 开发/使用者的强大实力, mplayer 建立了要比DirectShow 稳定的多的工作流程。超越 ffmpeg 本身的功能外,后来又通过反向工程使之可以调用 Windows 上的DirectShow Filter DLL,让mplayer 架构越来越吸引人,成为兼具稳定性和性能的优秀作品。

在这里插入图片描述

  • 优点: 稳定,兼容性也可以说相当不错
  • 缺点: 代码结构不清晰;纯 C 语言开发,难于阅读;显卡硬件加速还需要越过更多障碍

2.2.3、VLC架构

VLC 是个后起之秀,开发速度的进展可以说是一只奇葩。虽然同样基于 ffmpeg,但可能是相对于“左三年右三年缝缝补补又三年”的 mplayer 架构来说,VLC 的架构在设计之初就很好的考虑到模块化开发,所以使它更吸引年轻的开发人员。成为近年发展非常快的架构。

在这里插入图片描述

  • 优点: 稳定,兼容性也可以说相当不错
  • 缺点: 纯C 语言开发,难于阅读;硬件加速略有障碍
http://www.dtcms.com/a/267633.html

相关文章:

  • MySQL GROUP_CONCAT函数实现列转行
  • 技术管理核心知识体系:从架构到实践的全方位指南
  • DPDK 网卡驱动
  • 堆叠初始化与配置同步工作机制(以IRF2.0为例)
  • Adobe LiveCycle Designer 中脚本的层级关系
  • 许船长,不断推出契合潮流的创新品类
  • 如何解决Spring Boot中@Valid对List校验失效问题
  • 【Oracle专栏】大批量插入数据 BULK COLLECT
  • 【leetcode100】最长回文子串
  • Altium Designer使用教程 第二章(原理图绘制)
  • 嵌入式 数据结构学习(四) 双向链表详解与工程管理
  • 3dmax标准材质转物理材质插件,支持VR材质和CR材质转换成功物理材质,支持多维子材质
  • vscode工具使用技巧
  • Spring AI介绍:Java开发者迈向智能应用的新利器
  • Delta、Jackknife、Bootstrap
  • n8n完全指南:从入门到精通的工作流自动化实践
  • 闲庭信步使用SV搭建图像测试平台:第三十一课——基于神经网络的手写数字识别
  • RS触发器Multisim电路仿真——硬件工程师笔记
  • 【unitrix】 4.18 类型级二进制数加法实现解析(add.rs)
  • .NET9 实现斐波那契数列(FibonacciSequence)性能测试
  • Windows内存泄漏自动化
  • 部署greenplum7.2双节点集群
  • Softhub软件下载站实战开发(十三):软件管理前端分片上传实现
  • 【部署与总结】从本地运行到公网服务器的全过程
  • Qt智能指针
  • 408第三季part2 - 计算机网络 - 计算机网络分层结构
  • Python数据分析基础04:预测性数据分析
  • 非负矩阵分解(NMF)的python应用 ,基因分析,以胰腺癌上皮亚簇为实例,NMF在癌症研究中的优势
  • 支持多方式拼接图片的软件
  • Zama 机密区块链协议Litepaper