本FAQ由lying_heart(niuguo)全权翻译,本人(haibara)杂务修补,由于Newbie的关系,如有翻译错误,还请各位指出,
由Doom9的bond编撰的原文Mp4 Faq--------------------------------------------------------------------------------
1) 什么是MP4?听闻它是一种“容器格式”,那是什么?容器格式允许你将不同种类的多媒体数据流(多为视频流和音频流)合并在一个单一的文件内。
多媒体容器格式,就是我们熟知的AVI(.avi), MPEG(.mpg, .mpeg), Matroska(.mkv, .mka), OGM(.ogm), Quicktime(.mov),或Realmedia(.rm, .rmvb).
MP4是遵循MPEG-4(ISO 14496-14)的官方容器格式定义的广义文件扩展名。它可以流媒体化并支持众多多媒体的内容(多音轨(multiple audio)、视频流(video)、字幕(subtitlestreams)、图片(pictures)、可变桢率(variable-framerates)、码率(bitrates)、采样率(samplerates)等)和高级内容(advanced content)(官方称之为“Richmedia”(超媒体)或“BIFS”(Binary Format for Scenes/二进制格式场景),类似2D和3D图形,动画、用户界面、类DVD菜单,上述这些AVI搞不定的东西。
2) MP4文件的扩展名用什么?-.mp4:唯一的官方扩展名,支持所有音频和视频以及高级内容(或它们的混合)
其他相关的扩展名:
- .m4v:是.mp4文件的错误扩展名,由apple提出,支持视频+音频,m4v扩展名可以安全地更名为.mp4
- .m4a:是.mp4文件的错误扩展名,由apple提出,只支持音频,m4a扩展名可以安全地更名为.mp4
- .m4p:随
iTunes发售的DRM(Digital Rights Management/数字版权保护技术)产权保护的文件,使用Apple开发的DRM sheme
- .m4e:由.sdp修改扩展名的来的文件,Envivio用其于流媒体播放。
- .m4v, -.mp4v, -.cmp, -.divx, .-xvid, .264:raw的mpeg-4视频流(并非内含于mp4)。
- .3gp, -.3g2:手机中使用的格式,其中储存的内容同样在.mp4未被定义(H.263, AMR(Adaptive Multi Rate/自适应多码率))。
3) 如何创建标准的MP4文件?简单的回答:参考doom9的
MP4指南或
NERO Recode2指南。
详细解答:
1) 为了制作MP4文件,你应该优先使用MPEG-4标准下的音频/视频格式:
- MP4视频格式包括:
MPEG-4 SP(Simple Profile/简单类)/
ASP(Advanced Simple Profile/高级简单类):
xvid,
divx5,
3ivx,
ffmpeg/
ffdshow,
NeroDigital ASP...及
MPEG-4 AVC/H.264:
x264,
NeroDigital AVC,
Apple...还有MPEG-2, MPEG-1(不含Divx3/M$ MPEG4, WM9, RV9或VP6).-doom9的质量比较测评:
1 2- MP4音频格式包括:Advanced Audio Coding(AAC
FAQ):
Quicktime/
iTunes,
Nero,
Psytel,
FAAC(
binary)...(rjamorim的质量比较测评:
1 2)和mp3, mp2, mp1, celp(语音), TwinVQ(非常低的码率), SAOL(midi), ALS(无损)
- MP4字幕/文本格式:MPEG-4时标文本(见Q7)
- MP4图片格式:JPEG, PNG
2) 使用下列的软件可以将遵循MPEG-4的内容Mux进MP4容器:
- GPAC的
MP4box,命令行界面,支持AVC(Advanced Video Coding/进阶视频编码),packed B-frames(打包B桢),高级内容/BIFS,TTXT和章节(
Doom9指南)
- MPEG4IP的
mp4creator,命令行界面,能够混合AVC,但不要用于AVI及(packed) B-frames!
-
3ivx mp4 muxer,dshow滤镜,可以在GraphEdit中使用,支持使用packed B-frames的avi,但不支持AVC(
3ivx 指南)
-
mp4UI,操作简单,软件基于MPEG4IP,不支持AVC,AVI及(packed) B-frames!(
doom9指南)
-
VideoLAN Client,支持AVC,不能用于packed B-frames
-
ffmpeg,问题多,命令行界面,尤其不能用于AVC,AVI及(packed) B-frames!
- IBM的
Toolkit for MPEG-4,含基于Java的XMTBatch和/或AVGen(也是一个简易的版本)
-
dvd2mp4GUI,mp4tool的GUI,可以简单的将多音轨及字幕(作为高级内容)混合进MP4
-
mp4tool/mp4edit,来自于ENST,类似于mp4box。mp4edit是mp4tool命令行软件的简易GUI版本
3) 下面有一些“all-in-one”的MP4编码工具:
-
Nero Recode2,使用ASP、AVC或AAC来编码MP4(
Doom9指南),字幕是dvd的vob subs(图形字幕),包含dshow muxer
- Doom9的
MeGUI,支持ASP(xvid, libavcodec), AVC(xvid)和AAC(Besweet - Nero)编码
-
HDX4支持ASP和AAC
- Dicas的
mpegable X4 live,操作简单,用dicas的MPEG-4的编码直接编码为mp4
- Envivio的
4coder支持MPEG-4 AAC, ASP/SP和AVC
4) 以下工具可用来编辑MP4文件(如分割、追加合并):
-
MP4Box可以按照时间和尺寸分割MP4(AAC, ASP, AVC, TTXT, MPEG-1/2, 专用媒体流),提取部分及合并mp4
- ulead的
VideoStudio 8+ MPEG-4插件
-
Quicktime/Pro能够创建(编码,混合)和编辑(分割、合并)mp4文件,支持MPEG-4 Simple Profile, AAC, AVC
4) 有没有可能将非MPEG-4标准的数据流放进MP4?可以,虽然我不认为这是个好主意。MPEG-4标准定义了如何将数据流放入MP4的方式。类似于AVI,数据流根据专用的FourCCs方式被放入AVI中;在MP4中,每一个数据流有一个“专用的轨道ID(private track ID)”。记住,没有一个播放器能够支持MP4中此类的数据流,只会简单地把它们忽略。除非你非常明确地要这样做。
以下的数据流,不遵循MPEG-4标准,但已经能够被放入MP4中了。
- Ogg Vorbis和Ogg Theora,使用MP4Box
- Ogg Vorbis,使用
修订版的mp4creator- Apple 的无损音频(ALAC/ALE - 不兼容MPEG-4 ALS),使用
iTunes- DVD图形字幕(Vobsubs),使用
Nero Recode2- AMR语音,使用NEC e808/e616手机
唯有等到了将来,我们才能知道此类的非公开数据流能否被广泛的接受和支持。。。
5) 当我从avi中将MPEG-4视频混合进MP4时,有哪些事项是必须特别注意的?在做AVIs混合至MP4处理时,有一些潜在的问题。特别是编码中使用了B桢(b-frames/B-VOPs/bi-directional)。
1)“delay frames(桢延迟)”:由于一些编码(Xvid, Divx5)仍然使用旧的VFW界面会导致此问题。只有当使用VirtualDub/Mod编码且用了B桢时,就会自动丢桢。
2)“packed bitstream(打包的数据流)” :因旧有容器格式AVI不支持储存B桢而产生。在
DivX5中会用到PB(只有在一个连续B桢的设定情况下),以及新版本的XviD默认设置是使用PB的(处理时要确认PB选项没有被勾选),还有使用其他桢来打包B桢(点击
这里了解更多关于B桢的详细介绍)。
3)“ctts”atom(节点):当混合b桢进入MP4中必须写入的信息。
4)“vol(音量)”:在avi的每个关键桢(keyframe)中都要写入,但现在在MP4中已和影片数据分离开了。
现在,只有
3ivx mp4 muxer和GPAC的
MP4Box可以正确的搞定上述问题。推荐只使用它们进行avi的转换,特别是那些使用packed bitstreams或者那种你不能确定是否使用了b桢设定/编码的avi。否则,你很可能不能够得到100%完全遵循标准的MP4文件!
6) transmux(转换并混合)时是否会对文件内容进行重编码?不会,这是个无损的处理过程,只是将媒体流从一个容器搬到MP4里。
7) 我怎样才能将字幕混合进MP4?这里有三种方法可以实现:
- 相对于MPEG-1/2,MPEG-4标准定义有自己的文本流/字幕标准(基于ISO14496-17的MPEG-4的时标文本)。MP4的字幕格式是基于文本的(不是像DVD字幕那种基于图形),遵循UTF-8/16标准(含古斯拉夫语、阿拉伯语、中文字符等)。它支持所有的动态效果(滚动、色彩、卡拉ok效果等),且支持附加字体及流媒体化。
MPEG-4 TTXT的制作,已被
MP4box和Quicktime支持。
回放时,可以使用Haali的MP4 dshow Parser, Osmo4, Realplayer和Quicktime(仅当放入.3gp文件中)。同样时VideoLan也支持。
- Nero的Recode2可以用来在MP4中储存专用数据流(Q4),且可以轻易的、不加修改的将DVD中的图形字幕(vobsubs)提出并存入MP4中。
回放此类的媒体流,可以使用Nero的滤镜、Haali的Parser、VideoLan(问题多)和一些硬件支持MP4的DVD播放器。
- 另一个基于MPEG-4标准储存字幕进MP4的方法是将字幕转换为XMT/BT文本格式,然后将它们编码为“高级内容”(BIFS binary格式)存入MP4中。这一方法可适用于任何字幕(使用
mp4box或
dvd2mp4gui,例如转换SRT字幕)。
回放这些高级内容,你需要可以支持此类内容的滤镜/播放器(见Q12)。
8) 我如何将章节放入MP4文件中?章节的存储也可以使用高级内容实现(例如创建一个目录菜单),但
Nero使用了另一个方法。它使用了MP4中的一个特性:称为“用户空间”(user space/udta atom)。它允许在MP4中附加任何你想的东西。(例如,iTunes使用udta atom在mp4中储存标签和CD/DVD封面(“coverart”))。
你可以使用Nero Recode2在编码mp4过程中自动插入章节信息,或者用MP4Box和record2的MP4 directshow muxer filter在已存在的mp4文件中添加章节信息。(例如在GraohEdit中使用此滤镜)。
关于播放器,如果不能识别在udta中储存的章节信息,则会简单的忽略掉。你需要一个可以搞定此特殊章节信息的播放器或滤镜。(例如,Gabest, Haali, Nero或3ivx)。
9) 我如何对MP4文件进行编排创作(例如创建类DVD的菜单)?有没有例子?基本上编排创作应“手动”编写一个文本的语言格式,称为
XMT或
bt(基于
VRML(Virtual Reality Modeling Language/虚拟现实建模语言),就像我们熟知的Flash),一种能够把它作为binary格式(称为BIFS)编码/编译入mp4(免费的编码器为
mp4box,
mp4tool或
XMTBatch)。
现在已经有一些面向MP4编排创作的GUI了,使得这一过程变得很方便。例如
IBM,
AVIPIX,
Envivio,
Mindego,
iVAST,
Digimax或
Etri,但都未向大众开放。
所以,如果你想亲自编排创作MP4,除了编辑一个BT/XMT的脚本外没有别的办法。
感谢GPAC的家伙们,现在已经有了关于这个处理方法的指南(
英文版、
法文版),这将对你有不小的帮助。
为了使这个过程更简单,我创作了一个简单的脚本工具,命名为
MP4menu,现在已经支持DVD菜单可以提供的所有特性。你可以按照自己的需求使用(
指南)。
如果你想看一下实例以了解有什么别的可以放入MP4中,看一下这个小的含视频的
菜单样本。但是MPEG-4系统还能提供2D和3D的动画效果(想一下玩具总动员和海底总动员这些影片),看一下这个小的2d
动画样本(不含视频流)。
确认你使用的是MPEG-4系统支持的播放器,如GPAC Osmo4 player,来观看这些样本。