使用MPlayer转换音频
MPlayer转换视频是无敌的,自然转换音频也应当是小菜一碟,可悲剧的是很多时候它不支持单独转换音频,当我想把一部电影中的一部分音频或者就是一个音频文件转换成ogg或aac时,往往就需要结合外部工具例如oggenc来进行。
传统方法是把音频pcm dump到一个磁盘文件来转,可是巨大的pcm文件有点伤硬盘,于是有人就用内存盘(例如linux的/dev/shm)来暂存这个pcm,可内存盘也有不够用的时候。
因为oggenc之类的工具都有从stdin读入pcm的功能,如果mplayer支持输出pcm到stdout的话就可以用管道来完全避免掉那个pcm中转文件的创建了。可是读遍mplayer的文档,就是没有这个功能,于是我猥琐的眼神凝视到了/dev/stdout上了,对了,就是这么用
mplayer xxx.mp4 -endpos 1:00 -ao pcm:file=/dev/stdout -really-quiet -novideo | oggenc - -o dest.ogg
其中-really-quiet基本上可以保证mplayer不会往stdout上输出任何东西(除了咱的pcm数据流);-novideo当然是为了dump的速度考虑;-endtime是要截取的音频流的长度。
?
后续:这不是一个跨平台的方案,win32可没有/dev/stdout,于是我干脆写了个程序,思路就是使用命名管道中转,有需要的请联系我:waywardson@126.com。