【轉】Mp4 Faq

轉自:http://hi.baidu.com/%E3%C6%CE%C4%B7%E5/blog/item/591e85011121d00e1d9583de.html

英文出處:http://forum.doom9.org/showthread.php?s=&threadid=62723

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.264x264, 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, FAACbinary)...(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) 我怎樣才能將字幕(Chapter)混合進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中。這一方法可適用於任何字幕(使用mp4boxdvd2mp4gui,例如轉換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的菜單)?有沒有例子?
基本上編排創作應“手動”編寫一個文本的語言格式,稱爲XMTbt(基於VRML(Virtual Reality Modeling Language/虛擬現實建模語言),就像我們熟知的Flash),一種能夠把它作爲binary格式(稱爲BIFS)編碼/編譯入mp4(免費的編碼器爲mp4box, mp4toolXMTBatch)。
現在已經有一些面向MP4編排創作的GUI了,使得這一過程變得很方便。例如IBM, AVIPIX, Envivio, Mindego, iVAST, DigimaxEtri,但都未向大衆開放。
所以,如果你想親自編排創作MP4,除了編輯一個BT/XMT的腳本外沒有別的辦法。
感謝GPAC的傢伙們,現在已經有了關於這個處理方法的指南(英文版法文版),這將對你有不小的幫助。
爲了使這個過程更簡單,我創作了一個簡單的腳本工具,命名爲MP4menu,現在已經支持DVD菜單可以提供的所有特性。你可以按照自己的需求使用(指南)。
如果你想看一下實例以瞭解有什麼別的可以放入MP4中,看一下這個小的含視頻的菜單樣本。但是MPEG-4系統還能提供2D和3D的動畫效果(想一下玩具總動員和海底總動員這些影片),看一下這個小的2d動畫樣本(不含視頻流)。
確認你使用的是MPEG-4系統支持的播放器,如GPAC Osmo4 player,來觀看這些樣本。

 10) 我如何才能在MP4文件中使用可變形重設尺寸(anamorphic resize)?
MPEG-4標準崇尚“多才能”,能夠滿足大衆的各種需求。它提供了三種可能性:
1) 碼流方面:這可能是最具可行性且最大衆化的方法。
使用可以設定PAR(pixel aspect ratio/像素寬高比)的編碼(例如3ivx, ffmpeg/ffvfw, xvid)。然後使用任一種MP4的Muxer工具(例如3ivx mp4 mixer, MP4Box, mp4UI)將得到的AVI Mux至mp4。對於已存在的碼流,你可以使用Moitah的MPEG4 Modifier對MPEG-4 ASP進行修改PAR;使用hhanh的ARChange對AVC進行修改PAR。
下列工具可自動在回放中支持可變形重設尺寸:VideoLan, Mplayer或者帶有3ivx, nero或haali parser加上XviD(xvid decode設置AR爲auto), 3ivx(打開“force overlay”), Nero或ffdshow(打開“overlay mixer”)解碼濾鏡的dshow播放器。
2) 容器方面:MP4提供了一種“合成矩陣(Composition Matrix)”,能夠修改AR、畫面旋轉、支持多層數據、回放時將兩條音軌混音(例:將影片的語音和音樂分離)等功能。
Quicktime/Pro提供了很好的合成方法,通過:Movie -> Get Movie Properties -> Video/Sound Track -> Size/Layer/Volume/... ,還能夠正確回放此類經合成編輯的MP4文件。
3) BIFS方面:提供了最廣泛的編排創作的可能(Q9),同樣還能夠修改AR(例:通過改變2d縮放(Transform2D.scale))。你可以使用GPAC的工程軟件:MP4box和Osmo4來創建和回放此類BIFS控制的數據流。


11) 有沒有可能在MP4中創建VFR(Variable Framerate/可變幀率)內容?
可以。察看下面的帖子


12) 我如何播放MP4文件?
由於MP4的互用性這一巨大優勢及開源標準(授權免費!)這些特性,現在已有衆多工具可以在不同系統包括Mac, Linux, PocketPC當然還有windows中支持MP4。
1) 如果你想用基於dshow的播放器(例如media player classic, bsplayer, zoomplayer或者蹩腳的windows media player)來回放任何此類的媒體文件,首先你需要用到下面兩個東西:
-- 一個分離濾鏡(splitter/parser filter):它能夠在回放時將容器中包含的數據流(音頻流、視頻流、字幕流)分離開。
-- 一個解碼濾鏡(decode filter):它(例如:ffdshow, 3ivx, CoreAAC)能夠將編碼的數據流解碼。
順便說一下,我們在播放AVI時不需要安裝分離濾鏡的唯一原因是windows系統已經默認安裝了這個東西。
這裏有一些組件包,包含了這些濾鏡:
-- Gabest's MP4 Splitter支持AAC, ASP, AVC, MPEG-1/2音頻(如MP2/MP3)與視頻, 先進TTXT, MP4中的VobSubs和章節, 開源(Gabest的MPC播放器已經內建此濾鏡)
-- Haali's Media Splitter支持MP4中的AAC, ASP, AVC, MPEG-1/2音頻(例:mp2/mp3)和視頻,TTXT,vobsubs和章節,並支持地切換音頻、視頻、字幕,是無限制的,部分開源的,免費的
-- 3ivx支持MP2, MP3, AAC, ASP, 章節但不支持MP4裏的AVC!使用ffdshow或CoreAAC這樣的解碼器時請確定“allow unsupport decoders” 選項已勾選
-- Elecard提供了支持AAC, ASP, AVC的MP4 splitter,並附帶ASP/AVC解碼器
-- Nero支持AAC, ASP, AVC, vobsubs和章節(Nero7下只限Nero Showtime!Nero6下僅Nero Showtime支持字幕/章節/多音軌!)
-- HDX4支持MP4中的AAC和ASP
-- EnvivioTV 支持MP4中的高級內容/BIFS(樣本), AAC, ASP和AVC
-- Moonlight提供了支持MP3, AAC, ASP, AVC的MP4 splitter,並附帶ASP/AVC解碼器
-- Dicas的mpegable,支持RTP(Real-Time Transport Protocol/實時傳輸協議)流媒體,AAC, ASP和AMR(.3gp音頻)的解碼
-- Ligos的LSX-MPEG,僅支持Simple Profile視頻,30天預覽版本
2) 如果你不能/不想使用基於windows dshow的播放器,你也可以使用下列的播放器來播放MP4:
-- Apple的Quicktime,廣泛使用,支持MPEG-4 SP, AVC和AAC
-- Realnetworks的RealPlayer10,支持MPEG-4 SP + b楨(僅plus版本)和AAC
-- GPAC的Osmo4,開源(GPL),支持BIFS(字幕,用戶互動,類dvd目錄...)和TTXT
-- MPlayer,開源(GPL),支持ASP和AVC,支持衆多系統,象Win, Linux, Mac OS...
-- Videolan,開源(GPL),支持ASP和AVC,多系統支持
-- MPEG4IP的WMP4Player,開源(LGPL(Lesser General Public
License/GNU較寬鬆公共許可證)/MPL(Mozilla Public License)),支持ASP和AVC
-- xine,開源(GPL),多系統支持
-- TCPMP,用於PalmOS/WindowsCE
-- Philips的Platform4 Player支持PocketPC
-- ENST的Osmo4(基於參考源),支持高級內容/BIFS
-- IBM的M4Play含Toolkit for MPEG-4,基於Java,支持高級內容/BIFS
3) 硬件/獨立播放器:由於最流行的MPEG-4 ASP執行者(DivX5/XviD)經常被放入AVI中,那也成爲了現在播放器最廣泛支持的格式。同樣是nero的那些傢伙,也是爲了滿足消費者日益增 長的需求,他們嘗試將MP4容器格式能夠被硬件播放器支持,並逐步取得了成功:
支持MP4的硬件播放器如下:
-- Avayon的DXP-1000支持MP4的AAC, ASP, VobSubs和章節
-- elta的8815 MP4支持MP4的AAC, ASP, VobSubs和章節
-- Gowell的AS 602支持MP4的AAC, ASP, VobSubs和章節
-- Kiss的DP-558支持AAC, ASP(不支持QPel(Quarter-Pixel/1/4象素預測)/GMC(Global Motion Compensation/全局動態補償)),支持VobSubs和章節(Sigma Designs EM8560)
-- Packard Bell的DVD-DivX 450 pro支持MP4的AAC, ASP, VobSubs和章節
-- Philips的DVP630/632/642播放器支持MP4的ASP(不支持QPel/1WP GMC), MP3(非AAC)(ESS Vibratto-II)
-- RJTech的RJ 1500DVX II支持MP4的AAC(5.1), MP3, ASP (QPel/1WP GMC/CQM), VobSubs, 章節(ESS Vibratto-II)
-- Siemssen的SCO 5000ND支持MP4的AAC(不支持MP3/MP2),ASP (QPel/1WP GMC), VobSubs, 章節(Zoran Vaddis 776)。
-- Targa的DR-5200x支持MP4的AAC, ASP, VobSubs和章節
-- Tevion DR 2004,支持MP4的AAC, ASP (QPel/1WP GMC?)和VobSubs。
-- Tevion DVD-4000,最新的固件(firmware)支持MP4的ASP(不支持QPel/1WP GMC?)和MP3(非AAC)(ESS Vibratto-II)
-- Xoro的HSD 415/310播放器支持MP4的AAC, ASP(不支持QPel/1WP GMC?), VobSubs, 章節(ESS Vibratto-II)。
-- M$的XboxXbox Media Center支持MP4的MP2, MP3, AAC和AVC。
-- Sony的Playstation Portable(PSP)支持MP4的AAC, SP和AVC,保存在記憶棒(Memory Stick)中
-- Apple的iPod支持MP4的AAC,iPod video還支持AVC
-- Sigma Designs的Xcard支持在PC上硬體解碼MPEG-4包括MP4容器


13) 如何直播/收看實時(live-)的MP4流媒體?
Apple和MPEG4IP提供了不錯的、免費的工具以將MP4流媒體化:
想要做流媒體服務器,你可以使用Apple's Darwin Streaming Server,這是everwikedlinuxjornal裏提供的操作指南。
要直播流媒體你可以使用MPEG4IP的mp4live(僅Linux支持),這是everwikedMPEG4IP的指南;在Windows系統中,你可以使用MPEGRecorder(看上去像mp4live的一個端口)。
同樣,你可以看一下ViTooKi的工具包(開源的流媒體服務器、播放器和其他相關工具)。
另一個免費、開源的mp4流媒體服務器是Cata提供的。
如果是MAC系統,你可以看一下Live Channel
要播放廣播/直播式的流媒體,你可以用Apple的Quicktime, Real的RealPlayer 10, MPEG4IP的WMP4Player, Dica的mpegableEnvivioTV(都運作在dshow播放器下)和GPAC的Osmo4(最後兩個也可以支持高級內容/用戶互動)(Envivio的互動演示)。
通過MediaFrame(演示)和IBM(互動演示)的java applets你也可以在不支持安裝播放器情況下來播放流媒體的MP4。
流媒體樣本:1 2


14) 那裏可以找到mp4碼率計算工具?爲什麼由源AVI製作得到的MP4文件體積要比源AVI文件體積小一點?
MP4需要的overhead的容量遠小於AVI容器(特別是VBR-mp3音軌)。勿需質疑,與AVI容器相反,MP4容器就是爲MPEG-4視頻和MP3設計的。
這裏有一個計算式,你可以這樣說:AVI中的視頻流文件體積=最終輸出的含視頻音頻的MP4文件體積(像700MB) - MP4的音頻體積 + 3MB。
3ivx在它的主頁上也提供了一個MP4碼率計算工具,但它看上去不是十分精確。


15) MP4支持CRC(Cyclic Redundancy Check)/循環冗餘碼校驗)/EDC(Error Detection Code/錯誤校驗)或ECC(Error Correction Code/自糾錯)嗎?
不支持。MP4容器本身,乃至MPEG-4標準都不希望支持碼流中的錯誤檢測/糾正(Error Detection/Correction)(它們該用在該用的地方)。
點擊這裏,瞭解更多有關MPEG-4碼流中的差錯恢復(Error Resilience)。


16) 有沒有可能得知一個MP4文件是用何種編碼創建的?
是的。對於MPEG-4 ASP的視頻流和MP3音頻流(現在還沒有一個真正的方法來確認是否用了AAC音頻編碼)來說,是可以的。
點擊這裏,瞭解更多。


17) MP4是MP3的繼承者嗎?
是,也不是。說它不是,因爲MP3是一種特別的音頻格式,而MP4是一種容器格式並非是音頻編碼。說它是的,因爲MP4是MPEG-4標準的一部分,MPEG-4標準是MPEG-1/2的繼承者,而mp3亦是它的一部分。
MPEG-4還包括AAC,一種比MP3更好的音頻編碼,也被用於MP4中。


18) MP4和MOV/3GP是一樣的嗎?
Apple的MOV容器格式確實與MP4的出發點相同(主要在moov atom方面),但它們之間還是有不少區別的。
從另一方面來說,MP4的出發點是3GP格式(通常用於手機中)的開發。3GP格式普遍用於MP4中,就像用於MOV中一樣。然而,這仍是另一種格式。

19) 我還想了解更多關於MP4!在哪裏能夠找到更多信息?
在網絡上有不少此類的信息:
MP4的說明文件可在這裏找到。MPEG-4系統標準的草案可在這裏找到。
有一些關於MP4的文檔:1 2 3
MPEG Industry ForumMotion Picture Experts Group(MPEG)的主頁上也有許多信息。
關於MPEG-4標準MPEG-4系統(非常有技術價值)的FAQs是很有用的。
另外可以在audiocoding wiki找到許多信息(也有許多關於AAC的信息)。
關於MP4的創建, 編譯成果MPEG4IP有不少指南,同樣他們的CVS服務器everwicked.com上也有指南。

發佈了35 篇原創文章 · 獲贊 13 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章