最近研究mp4文件的转码与分割合并,需要使用mp4box这个工具。目前这个工具合并到gpac开源项目中,如果需要下载安装的话需要到GPAC的官网去。
https://www.videohelp.com/software/MP4Box
首先介绍下GPAC项目吧,这个项目的目标是致力实现一个mpeg4 system,成为MPEG-4标准的实现参考,合并现在一些标准到其框架下等,项目目前每天都有代码提交,比较活跃。其他信息可以到其主页查看:http://gpac.wp.institut-telecom.fr/。
官网提供每日最新的编译安装包,支持windows、Linux、Andoid、Mac等平台,可以直接下载2进制格式直接使用。不过其提供的Linux二进制包是基于deb的,只支持ubuntn10.10以上版本。所以其他的Linux系统只能从源代码进行安装。
首先下载代码,需要使用svn进行同步:svn co https://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac gpac
然后到http://sourceforge.net/projects/gpac下载其所依赖的三方库gpac extr libs,当前是最新的是0.4.5版本,把下载下来的压缩包解压,并将其中的子目录复制到gpac源代码目录的extra_lib/下。
按照官方文档的说明,此时只需要在gpac的源代码目录里,执行./configure;make;make install即可。不过根据不同的平台,config生成的makefile可能有问题,多数情况下编译会出各种问题。至少我在centos5.4和ubuntu8.04系统中都没顺利编译通过。
遇到的多数问题是缺少外部依赖,最重要的几个依赖为freetype 、freeglut以及zlib,这些依赖需要进入extra_lib目录,按照其中的说明文档逐个编译,在编译三方库的时候也不是很顺利,有时候不得不yum install和apt-get从源中下载,把大数的依赖都搞定了,问题算解决了一半。在编译gpac时依然编不过,不得不把编不过的模块在./configure时去掉,并把gpac配置生成为static,mp4box生成为非static。需要./configure –help仔细一下,经过一翻调整,gpac才生成最终的lib和mp4box以及mp4client,其他的应用依不能成功编过。不过我只要mp4box和mp4client,其他的东西并不关心,没有生成就算了。
mp4client的使用比较简单,它可以播放本地的mp4文件,远程http播放存在问题,一直不成功。
mp4box使用比较复杂,具有许多功能,它可以进行mp4文件的合并、切割、提取其中的track及相关信息,还可以对mp4文件的物理格式进行改写,对mp4文件的每个结构进行改写如版权、语言等等。具体可以查看:http://gpac.wp.institut-telecom.fr/mp4box/mp4box-documentation/
下面对一些较常用的选项进行说明:
mp4box一般并不对音频、视频等进行转码操作。
一,文件转换 mp4box -h import ( 具体支持的文件可以查看官网网页)
文件转换语法如下:mp4box -add file1 -add file2 [-new] dest,通常情况下支持最多20个add
二,通用选项 mp4box -h general
-tmp dir指定生成临时文件的目录
-inter duration 将chunk的media数据按指定间隔进行交错,用于优化流传输或文件访问,所有meta数据放在文件头部,允许在下载的内容内回放。默认交错0.5s,若指定为0,则所有meta数据存在于文件头。
-tight 对媒体轨道执行基于采样的交错(生成文件较大)。在服务器侧为减少磁盘查找时间,用于hint文件时。
-flat 强制采用平坦存储,媒体数据不进行交错,meta数据在于文件结束。当使用-add创建新文件时,将不会创建临时文件
-frag ms 对媒体文件进行分段,分的小段中含有meta及media数据交错而不是存在文件开始或结束。分段将禁止交错。
-isma 把文件处理为isma规范格式
-3gp 移除mpeg4系统信息,转换成3gp规范,保留音、视、文本轨道等3gp支持的
-brand ABCD 设置主brand
-ab ABCD 设置从brand
-rb ABCD 移除从brand
-rem trackID 从文件中移除轨道
-par trackID=PAR
-lang [trackID=lang] 为轨道指定语言,若没有指定ID,则为全部轨道
-delay trackID=time 设置指定轨道延迟时间,单位为微秒
-name trackID=name 设置指定轨道的处理名,处理名有时用来识别内容
-cprt string: 为文件增加版权信息
-chap chap_file 将chap_fil中的chapter信息增加到目的文件中