前些日子,KK 在逛某个 bt 发布站的时候看到一位热心的发布者在资源内容介绍里写了一些关于视频格式选择的内容,KK 看完后发现谬误连连,一时头脑发热,抛下两句冷言冷语扬长而去。事后想想,毕竟作者出发点是好的,KK 这样冷嘲热讽实在有点过分了,谁都是从不懂到懂的。与其装 13,不如来点实在的,于是 KK 就写了这篇文章,与各位来聊一下电脑上(主要指 windows 操作系统下)播放常见视频格式时所遇到的一些技术细节和问题,希望对大家有所帮助。
1. 基本概念:
播放器之所以能让一个视频在电脑上同时呈现画面和声音甚至字幕,是因为许多“小家伙”在后台辛勤工作的结果,这些“小家伙”就是解码器和分离器(其实还有视频和音频渲染器等等,不过这并不是本文的重点)。整个视频播放的过程简单来说大概是这样的:分离器将视频分离为视频部分和音频部分(当然某些高级的格式还带有字幕,甚至多条视频音频),然后视频和音频经过对应的解码器解码,通过视频,音频渲染器呈现出来。下图是一个叫做 GraphStudio 的工具,用它加载视频文件后可以清晰的看到这个视频在后台经过了哪些处理。
说到底,大多数播放器只是一个前端,它通过调用各种解码器,分离器以及渲染器来播放视频文件。
在 windows 下绝大多数的播放器都是基于 DirectShow 这个媒体框架的,但是跨平台的播放器一般不使用 DirectShow(比如 quicktime,realplayer),而是使用它们自己的媒体后端。不过由于 mplayer 是开源的播放器,所以一些经过改进的 windows 版本是支持 directshow 的。(关于 DirectShow,KK 的理解不是很深刻,上面那段可以会有谬误,如果有了解这方面的朋友请指正)
2. 格式:
各位看新番,看 dvd/bd rip,看各种剧,看电影,看预告片,甚至看在线视频时都会碰到各式各样的视频格式,有 avi,mp4,mkv,wmv,mov,mpg,rm,rmvb,flv,ogm 等等等。以前这些格式往往都需要对应的播放器才能播放,比如 mov 必须用 quicktime,rm 必须用 realplayer。而现在出现了各种所谓的万能播放器,几乎所有格式通吃。说到底并不是播放器 NB 了,而是这些格式有了对应的分离器,使得各种播放器可以调用,比如以前所谓的让 windows media player 播放 rm 格式的插件,说白了就是一个 rm 和 rmvb 格式的 DirectShow 分离器而已。
各种格式只是不同的封装形式即不同的媒体容器,大家可以将这些格式想象成不同的便当盒,有些便当盒比较小,只能装下饭和菜(视频和音频),有些除了饭菜还能装下筷子(字幕),高级便当盒是分层的,可以装很多不同的菜(多音轨,多视频轨)。至于饭菜的好坏优劣,那不是盒子所能决定的,所以说格式与视频质量的好坏并没有直接关系,真正决定视频质量好坏的是视频编码。
3. 编码解码:
只有分离器,没有解码器,是无法完成一个视频的播放的,这里给大家看一个文件名[POPGO][Mouryou_no_Hako][02][720P][BluRay][x264_aac][GB][46EBA9AC].mkv
各大字幕组在出片的时候都会用类似的一串东西来作为文件名,这已经是约定俗成的东西了,其中[x264_aac]就是指这个文件的视频和音频编码(这里要指出,x264 只是一个编码器,它是用来做 H.264/avc 视频编码的,将 x264 来标注视频编码略有不妥,嘛…人家做字幕也不容易,这种细节就算了)。可以看出,这是一个 mkv 封装的,以 h.264 作为视频编码,aac 作为音频编码的视频文件,由于 mkv 可以内挂字幕,所以文件里可能还包含字幕。那么如果要播放这个文件,除了需要 mkv 分离器(Haali,Gabest)还需要 H.264 解码器(ffmpeg,coreavc 等等)以及 aac 解码器。缺少任何一种解码器,那么播放时不是没画面就是没声音。
现在介绍一下一些常用的编码方式:vcd 用的是 mpeg1 视频编码(现在大部分的 galgame 的片头片尾动画仍然在用 mpeg1 编码),dvd 用的 mpeg2 视频编码,早期电影的 dvdrip 用的都是 Divx 视频编码,后来改用开源的 Xvid,而蓝光现在大部分用的是 H.264 编码(据说早期的蓝光仍然用的 mpeg2)。而各大字幕组常用的视频编码基本上就是 H.264,real video。
简而言之,只要装了对应的分离器,解码器,任何 DirectShow 播放器都可以播放相应的格式。如果你的操作系统是 win xp,你可以到 C:\Program Files\Windows Media Player 下面找到一个 wmplayer2.exe ,这东西就是 windows media player 6.4,十几年前的老古董了,基本就是个 DirectShow 播放器的空壳子,只有 5K,但是只要你装了正确的解码器和分离器,它照样什么都可以放。
如果将以上内容看明白了,那么基本上不会有什么视频文件会难倒你了,碰到不清楚什么编码的文件,用相关的工具分析一下就一目了然了(比如 mediainfo)。
但是如何让视频放得合理,放得安心,放得舒服呢?KK 会在下次和大家继续讨论。
最后附上 KK 文章里所用到的小工具:MediaInfo 和 GraphStudio
大家有兴趣可以猜猜题图中放了那些片子,用了哪些播放器~