2012年11月26日 星期一

MP4v2 - 製作MP4檔案格式

從接觸電腦以來,對於影片的檔案格式的區分,就只有依它的副檔名來判斷,.avi 就說它是 .avi 的影片檔,.rm 就只知道它是用 real player 播放的 .rm 檔案,.mp4 就說它是 .mp4 影片檔。不然,也是只有在用某一種播放器時,知道需要對映什麼樣的副檔名,才能看到影片的內容,像大學時很流行的PowerDVD,要看電影用它就對了,也只知道要去打開 .dat 的檔案才能看到。其它像是編碼格式,H.264、MPEG 、MP3等,那時真的不了解它們的意義是什麼?就算修了多媒體影像的課,對於那時的我來說,都只是見樹不見林的階段,一點都不知道全貌是什麼。一直到了需要自己把影片檔案,從頭到尾生出來之後,才真正了解影像聲音的編碼到底在做什麼,它為什麼一定播放器支援才能播放,為什麼沒有解碼器不能看。

一般我們所說的影片檔案格式,像 .mp4 、.avi 、.mkv 、.wmv...,它們都是“容器”,也就是說,它是用來放影像和聲音的,而影像是用什麼編碼的,或聲音是用什麼編碼的,那就看你怎麼搭配(當然,這是理論上的說法,最主要還是得看規格怎麼定),要符合它們所定的格式,對映的播放器才知道怎麼播。所以,有些播放器不能看,就是這個原因,因為它根本就不了解別的容器的意義。如果只是因為沒有安裝需要的解碼器,那還有機會可以看,只要為它安裝就行了,它和不了解容器規格的原因不同,它只是少了那個解碼器。


MP4v2 就是一個製作 .mp4 檔案格式的函式庫,你可以從這裡了解更多關於它。要怎麼利用它,來產生 .mp4,我是利用Google來找到一些範例,它主要的流程為:

    建立 MP4 file 框架 -> 
    加入 Video/Audio Track -> 
    設定相關的參數 -> 
    寫入 Video/Audio Samples 

以程式的方式表示,就會是以下的流程:(可參考 使用mp4v2将H264+AAC合成mp4文件

    MP4CreateEx ->
    MP4AddH264VideoTrack ->
    MP4AddAudioTrack ->
    MP4SetVideoProfileLevel ->
    MP4SetAudioProfileLevel ->
    MP4WriteSample ->
    MP4Close

注意這裡的例子是包括影像和聲音的,所以 MP4WriteSample 是兩者都要處理。另外,有關影音同步也是一門學問,這裡就先不提,我想說的是另一件事,「要怎麼檢查你做出來的 MP4 檔案是否正確?」你當然可以直接用有支援 mp4 檔案格式的播放器直接測試看看,但是如果不能播的時候你該怎麼偵錯呢?

以下是我使用的方法:

1.利用mp4v2 library 裡的工具
2.Linux 的工具:mediainfo

其中,AtomBox Studio是試用版,有7天的使用期限,個人覺得 MediaBoxViewer 比較好用。


沒有留言:

張貼留言