音视频编码简介

Totem,mplayer,sopcast,realplayer,bmp
回复
yuu1010
帖子: 185
注册时间: 2008-04-11 23:31

音视频编码简介

#1

帖子 yuu1010 » 2010-07-31 11:29

音视频编码简介

放假有一段时间了,每天都闲得发疯,不过幸运的是这个假期我终于能在家上网了!某一天,我看到这样一条新闻:“三位FFmpeg项目开发者——Ronald Bultje、David Conrad以及Jason Garrett-Glaser(同为x264项目开发者)宣布了他们独自开发的VP8解码器自由软件实现”。这一下子让我想起了Google收购On2,并开放WebM标准的事,还有最近的HTML5之争。看到这儿,你可能跟以前的我一样:这都是什么跟什么?
这儿莫名其妙的名词让我想起来看电影的种种痛苦经历:哎呀,怎么AVI格式的突然放不了了;怎么又出来一个MKV格式,文件还怎么大;……现在都多出来WebM、VP8,这都是什么啊?虽然这些乱七八糟的格式并不影响我们看电影,但本着“知其然,知其所以然”的原则,我对这些术语和名词进行了一番“深度搜索”+“刻苦研究”,终于略有收获。现在总结一下,与大家分享。
这篇文章中用到的工具有MPlayer(基于命令行的播放器)、mencoder(基于命令行的转码器)、Firefox(图形界面的浏览器,嘿嘿)。命令行的MPlayer当然不如图形化的好用,但功能那是相当强大,具体使用我就不说了。文中用到的测试视频都是从这个网站(http://samples.mplayerhq.hu/)下载的。
本文主要从使用者的角度看问题,所以不涉及理论,细节更是没有。好了,废话少说,让我们步入正题。


正题:
任何影片的播放都分为3个步骤:拆包->解码->渲染,分别对应播放器的分离器(demuxer)->解码器(decode)->渲染器
说到这儿,应该讲一下视频和音频的基础知识。平时我们所说的格式,如avi 、ts 、mkv 、rmvb 、mp3 、ape 、mov 、wmv 、flv等等,不是视频音频编码格式,而是封装包的格式。封包只是个容器而已,里面装的是压缩的视频、压缩的音频、字幕等。而传说中的xvid,divx,mpeg4等等才是视频编码格式,mp3,aac,flac,ape等等才是音频编码格式。这些某某格式到底是什么呢?嘿嘿,我也不知道,我理解为是对视频或者音频的压缩算法。
以上都是我copy+篡改的,下面听听我个人的理解。想象有红、蓝、绿三种彩带,上面都写着密密麻麻的文字,分别代表视频流、音频流和字幕。下面我们把三种彩带都剪成一段一段的,然后用胶水按红蓝绿的顺序(其他顺序也行)重新连接起来(是不是很好看?),就OK了。所谓的封装包的格式就是这些红彩带、蓝彩带、绿彩带的段长啊,连接顺序啊等,有些mkv格式的文件包含多种语言的字幕,就可以理解为红、蓝、绿、紫、橙等多种彩带剪开后重新连接到一起。所谓音视频编码格式,就是彩带上的文字所用的语言。
拆包,即是播放器调用分离器,将封包中的视频轨道和音频轨道正确的取出来的过程。这样想,所谓拆包就是把连接好的彩带在胶水粘连的位置剪开的过程。剪开之后,不同颜色的彩带被分发到不同的解码器那儿。到底有哪些分离器呢?MPlayer可以告诉我们共有38个,下面显示的是大家比较熟悉的几个。
命令:mplayer –demuxer help
结果:
Available demuxers:
demuxer: type info: (comment)
rawaudio 20 Raw audio demuxer
tv 9 Tv card demuxer (?)
avi 3 AVI demuxer (AVI files, including non interleaved files)
asf 6 ASF demuxer (ASF, WMV, WMA)
mkv 31 Matroska demuxer
realaudio 32 Realaudio demuxer (handles old audio only .ra files)
mov 7 Quicktime/MP4 demuxer (Handles Quicktime, MP4, 3GP)
gif 28 GIF demuxer
ogg 18 Ogg demuxer
aac 39 AAC demuxer (Raw AAC files )
…………
…………
解码,当分离器正确的从封包中取出视频轨道和音频轨道以后,播放器识别文件编码格式,然后调用相应的解码器进行解码。这个过程就像,彩带上的内容可能是用英语、法语、德语写的,你看不懂,怎么办?那就找一个懂这门外语的给你翻译成汉语。这个翻译过程就是解码。我们用MPlayer看看有哪些解码器。
命令:mplayer –vc help //仅仅是视频的编码格式
结果:346 video codecs
Available video codecs:
vc: vfm: status: info: [lib/dll]
xvid xvid working Xvid (MPEG-4) [libxvidcore.a]
divx vfw working DivX ;-) (MSMPEG-4 v3) [divxc32.dll]
mpeg4 vfw working Microsoft MPEG-4 v1/v2 [mpg4c32.dll]
ffvp8 ffmpeg working FFmpeg VP8 [vp8] VP8在这儿
mpeg12 libmpeg2 working MPEG-1 or 2 (libmpeg2)
ffflv ffmpeg working FFmpeg Flash video [flv]
ffh264 ffmpeg working FFmpeg H.264 [h264]
…………
…………
命令:mplayer –ac help //音频的
结果:158 audio codecs
Available audio codecs:
ac: afm: status: info: [lib/dll]
ffflac ffmpeg working FFmpeg FLAC audio [flac]
ffape ffmpeg working FFmpeg Monkey's Audio [ape]
pcm pcm working Uncompressed PCM
divx acm working DivX audio (WMA) [divxa32.acm]
ffwmav1 ffmpeg untested DivX audio v1 (FFmpeg) [wmav1]
ffwmav2 ffmpeg untested DivX audio v2 (FFmpeg) [wmav2]
mp3 mp3lib working mp3lib MPEG layer-2, layer-3
mpg123 mpg123 working MPEG 1.0/2.0/2.5 layers I, II, III
mad libmad working libMAD MPEG layer 1-2-3 [libmad]
…………
…………
渲染,解码器将音频视频翻译完毕,由渲染器输出的过程。可以理解为画面出来了,显示在屏幕上,声音处理好了,从喇叭出来的过程。这个过程很有意思,我们可以作很多干涉,以取得某些特殊的效果(详见mplayer -vf help)。

待续……
I am who I am.

代码: 全选

 ________
( Cool )
 --------
        o    ^__^
          o  (oo)\_______
             (__)\       )\/\
                 ||----w |
                 ||     ||
头像
wbprime
帖子: 445
注册时间: 2010-03-17 17:03
来自: 北京市海淀区

Re: 音视频编码简介

#2

帖子 wbprime » 2010-07-31 14:59

也许你是对的 不过我不大理解
tassos
帖子: 25
注册时间: 2009-06-01 23:18
系统: ubuntu gnome 16.04

Re: 音视频编码简介

#3

帖子 tassos » 2010-08-01 9:44

楼主有当科普作家的潜质,赞!
matilda_chen
帖子: 1
注册时间: 2010-08-20 10:43

Re: 音视频编码简介

#4

帖子 matilda_chen » 2010-08-20 10:51

最近刚接触mplayer和音视频编码,我是在Dos命令行方式下执行mplayer,不过你的介绍对我帮助还蛮大的,对于音视频编解码的比喻也让人立刻能明白这个过程中的主要步骤,期待你更多的分享,谢谢. :em01
头像
cjxgm
帖子: 1952
注册时间: 2010-04-23 20:40
系统: Arch Linux
来自: 浙江·杭州
联系:

Re: 音视频编码简介

#5

帖子 cjxgm » 2010-08-20 11:32

期待你“待续”的部分 :em01
Clanjor Prods. | Develop for Developers. (C++, Lua) | 作曲编曲 | 实时渲染引擎
回复