如何基于FFMPEG和SDL写一个少于1000行代码的视频播放器
http://blog.sina.com.cn/s/blog_51396f890100nd91.html
http://lanhy2000.blog.163.com/blog/static/436786082012324114018127/
出于喜好,我很喜欢在 linux 下折腾一些影音相关方面的东西。以前在 windows 下折腾不起来,shell 不给力,ffmpeg 也是移植过去的,mplayer 更是杯具;现在在 linux 下,终于能尽情折腾了。
工欲善其事,必先利其器,正好最近整理文件,找到了以前收藏的用户手册,拿出来和大家分享。个人觉得最全面最正确的还是 man 文档,建议大家根据手册和 man 进行操作。
ffmpeg
均为英文资料。来源于 ffmpeg.org (via),官方还有开发手册等相关资料,我只摘录了比较常用的 docs(文档) , ffplay (播放器)和 faq (问题解答),资料很齐全且简单易懂,故不做翻译。(官方还有ffserver等资料供您阅读)
ffmpeg 中文资料比较少,大部分都是讲解如何转码的,所以学习起来压力不大。最简单方式:
1
|
ffmpeg -i infile.format outfile.format |
输入文件.格式 ,输出文件.格式,然后转码,当然参数都是default啦。剩下的就是在 输入文件 和 输出文件 间加参数了,
1
|
ffmpeg {[infile options] [-i infile]} {[outfile options] outfile} |
参数较多,我写了个html,用以总结参数以及相关用法,还有几个小例子,您可以在这里浏览到这个页面。(如果大家有需求,我以后再写个相关教程以飨读者)
mplayer (mencoder)
说起来mplayer和ffmpeg算是同根同源了,所以 mplayer 用法和 ffplay 相似,mencoder 和 ffmpeg相似,所以您只需要学习了解mplayer 相关用法,即可熟练掌握 mencoder。
mencoder
http://baike.baidu.com/link?url=MDGPHhABwA3OzNo3YsmqIgPyqydesH28SYyc1tOI5TXi3wu1NPoNdNSj5_zQigYPE8h8q3X4_83ftiVId-vuC_
vlc
本来是个一套流媒体解决方案中的客户端。 但客户端却比整套方案更早流行了起来,成为最著名的跨平台媒体播放器和框架之一。video lan比较著名的就是vlc和x264了。
前几天 linuxtoy 也介绍了几个 vlc 的教程:FLOSSManuals 上的教程;ThinkDigit 的 Tips and Tricks 系列之 VLC 篇;How-To Geek 上一篇关于怎样用 VLC 来 Rip DVD 的教程。
我也分享以下我的 pdf 教程 下载地址
ffmpeg
http://baike.baidu.com/link?url=jz8EzaHuIh5mRg9T9m4Zo7sTqarNI3HcwNMxEzXqLTqznfk82Tv5xaclvE6mRYUA
项目组成
<车载物联网项目,视频采集传输部分,第一天> FFmpeg的安装过程
http://blog.csdn.net/yangxuefeng09/article/details/9905419
AAC(Advanced Audio Coding)实际上是高级音频编码的缩写,AAC是由Fraunhofer IIS-A、杜比和AT&T共同开发的一种音频格式,它是MPEG-2规范的一部分。AAC所采用的运算法则与MP3的运算法则有所不同,AAC通过结合其他的功能来提高编码效率。AAC的音频算法在压缩能力上远远超过了以前的一些压缩算法(比如MP3等)。它还同时支持多达48个音轨、15个低频音轨、更多种采样率和比特率、多种语言的兼容能力、更高的解码效率。总之,AAC可以在比MP3文件缩小30%的前提下提供更好的音质,被手机界称为“21世纪数据压缩方式”。
因为“AAC”是一个大家族,他们是共分为9种规格,以适应不同场合的需要:
a) MPEG-2 AAC LC 低复杂度规格 (Low Complexity)
b) MPEG-2 AAC Main 主规格
c) MPEG-2 AAC SSR 可变取样率规格 (Scaleable Sample Rate)
d) MPEG-4 AAC LC 低复杂度规格(Low Complexity),现在的手机比较常见的MP4文件中的音频部份就包括了该规格音频文件
e) MPEG-4 AAC Main 主规格
f) MPEG-4 AAC SSR 可变取样率规格 (Scaleable Sample Rate)
g) MPEG-4 AAC LTP 长时期预测规格(Long Term Predicition)
h) MPEG-4 AAC LD 低延迟规格(Low Delay)
i) MPEG-4 AAC HE 高效率规格(High Efficiency) ===》又称为AAC+
上述的规格中,主规格“Main”包含了除增益控制之外的全部功能,其音质是最好,而低复杂度规格则是比较简单,没有了增益控制,但提高了编码效率,至“SSR”对“LC”规格大体是相同,但是多了增益的控制功能,另外,MPEG-4/AAC/LTP/LD/HE,都是用在低码率下编码,特别是“HE”是有Nero ACC编码器支持,是近来多用的一种编码率种,不过通常来说,Main规格和LC规格的音质相差是不大,因此目前使用最多的AAC规格多数是“LC”规格,因为要考虑手机目前的内存能力未达合理水平。
由于AAC格式家族比较庞大,要了解他,首先要清楚其各有不同的编码器,在目前是包括了商业的,免费的 AAC 格式音频编码器,其中几个主要的有如下 :
a) FhG Fraunhofer IIS研发的权威编码器,拥有很好的音质,可惜不对外开放了。
b) Nero AAC可能是目前最完美的AAC编码器了,(千千静听就是用的此编码器)同时支持"LC AAC/HE AAC"规格,Nero AAC编码器提供了品质最好的"VBR LC AAC"格式,同时亦对面"HE AAC"规格保证了在低码率下也有良好的表现,目前索尼爱立信W800和K750等手机都支持该编码器。
c) QuickTime/iTune Apple公司的两款Media软件都提供了AAC编码功能,其编码技术来自“DolbyLaboratories”,是目前音质最好的中码编率编码器,它编码的48kbps立体声音质比其它AAC编码器好20 - 25%,甚至64 kbps的Dolby AAC音效可媲美128 kbps的MP3。
d) FAAC也是一种很好的命令行编码器,只支持“LC”规格,但音质相当不错,与一般商业用的编码器接近水平,而这个软件更是免费来的,索尼爱立信W800和K750等手机也是同样支持这个编码器。
另外还有Psytel,Coding Technologies,HHI/z Plane(Compaact),Dolby AAC等AAC编码器,而其它如Panasonic,Nokia,AT&T,NEC等公司也都有独家开发的编码器,在大家弄清楚这些AAC格式音频规格和编码器之后,我们就不难知道为什么同一款Nokia手机会支持看起来都是AAC格式音频的诸多文件格式了,比如Nokia 6230i就是既支持AAC格式也支持M4A格式和MP4格式的机型,而这些音频文件格式其实都是属于AAC家族成员的!
MP3与Lame
http://biosea.blog.hexun.com/4436555_d.html
1、Lame是什么?
Lame是目前最好的MP3编码引擎。从1998年12月至今,Lame已被越来越多人的公认为是MP3压缩的最佳利器。Lame编码出来的MP3音色纯厚、空间宽广、 低音清晰、细节表现良好,它独创的心理音响模型技术保证了CD音频还原的真实性,配合APX(APX)参数,可以取得音质几乎媲美CD音频的小体积文件。 对于一个免费引擎来说,Lame的优势不言而喻。
默认情况下,Lame只支持从*.wav(波形文件)压缩到*.mp3。网上也提供一些修改版,加入了从*.ape格式直接压缩成*.mp3。需要注意的 是,MP3的转换最好是采用高质量的音源格式,如CD转录后的wav、ape、flac等,而诸如wma、rm等已经经过压缩的音源转换成MP3则豪无意 义。
2、上边提到的VBR和ABR是什么?还有CBR?
VBR(Variable
Bitrate)动态比特率。也就是没有固定的比特率,压缩软件在压缩时根据音频数据即时确定使用什么比特率。这是Xing发展的算法,他们将一首歌的复
杂部分用高Bitrate编码,简单部分用低Bitrate编码。主意虽然不错,可惜Xing编码器的VBR算法很差,音质与CBR相去甚远。幸运的
是,Lame完美地优化了VBR算法,使之成为MP3的最佳编码模式。这是以质量为前提兼顾文件大小的方式,推荐编码模式。
ABR(Average Bitrate)平均比特率,是VBR的一种插值参数。Lame针对CBR不佳的文件体积比和VBR生成文件大小不定的特点独创了这种编码模式。ABR也 被称为“Safe VBR”,它是在指定的平均Bitrate内,以每50帧(30帧约1秒)为一段,低频和不敏感频率使用相对低的流量,高频和大动态表现时使用高流量。举 例来说,当指定用192kbps ABR对一段wav文件进行编码时,Lame会将该文件的85%用192kbps固定编码,然后对剩余15%进行动态优化:复杂部分用高于192kbps 来编码、简单部分用低于192kbps来编码。与192kbps CBR相比,192kbps ABR在文件大小上相差不多,音质却提高不少。ABR编码在速度上是VBR编码的2到3倍,在128-256kbps范围内质量要好于CBR。可以做为 VBR和CBR的一种折衷选择。
CBR(Constant Bitrate),常数比特率,指文件从头到尾都是一种位速率。相对于VBR和ABR来讲,它压缩出来的文件体积很大,但音质却不会有明显的提高。
对MP3来说Bitrate是最重要的因素,它用来表示每秒钟的音频数据占用了多少个bit(bit per second,简称bps)。这个值越高,音质就越好。
http://baike.baidu.com/link?url=uu2N1znwR0vrh7bpkiKAha9CSozQ_Wy7QWj6661ZT8FqsZil9AzhquXRbCqjOodqzJs0GYZtiWL-srbN4MdmxK
Opus编码器 是一个有损声音编码的格式,由互联网工程任务组(IETF)进来开发,适用于网络上的实时声音传输,标准格式为RFC 6716。Opus 格式是一个开放格式,使用上没有任何专利或限制。
Opus的前身是celt编码器。在当今的有损音频格式争夺上,拥有众多不同编码器的AAC格式打败了同样颇有潜力的Musepack、Vorbis等格 式,而在Opus格式诞生后,情况似乎不同了。通过诸多的对比测试,低码率下Opsu完胜曾经优势明显的HE AAC,中码率就已经可以媲敌码率高出30%左右的AAC格式,而高码率下更接近原始音频。Opus格式音频可以使用GStreamer, libavcodec(ffmpeg),Foobar2000,Firefox(15 Beta或更新)等播放,推荐Foobar2000 1.1.14 beta 1或者更新的版本播放
http://baike.baidu.com/link?url=J5K0LmIShYGGkrbiNMAWvXLhjh9AN-ZQYfBw4fCesKjqZol1dOv7dkchOBUtkJBu
SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码 就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。