mencoder轉影片給IPod Touch觀賞之全攻略

*** Note *** 本篇的作法轉出來的檔案也可以順利的在IPhone上面播放

IPod Touch除了聽歌功能強悍外,影音撥放的能力也是吸引我的重點,大小適中的螢幕適合在通勤或出門等朋友時拿出來看看影片打發時間,可惜IPod Touch承襲著Apple Inc.一貫的風格,只能撥放MPEG4以及x264的編碼,對於大多數的電影採取的xvid、DivX或是日劇常用的rmvb都不支援,必須經過轉換才可以正常撥放,Windows上面有一堆簡單方便且免費的軟體可以使用,但是我實在不想要浪費自己電腦的資源和電費來做這種浪費時間的事情,於是腦筋就動到某台身在遠方卻有8個核心可以使用的強大機器,用遠端的運算資源,電費也是別人家付,多划算阿!!! 畢竟在這經濟不景氣的年代,說要好好善用資源啊!!! XD

那台機器上面跑的是Linux,所以很自然的就想到mencoder這個好用的轉檔程式,支援市面上常見的各種格式。無奈我在該台機器上面沒有root的權限,所以花了很多工夫才弄好,於是在這邊跟大家分享一下,如果再沒有root權限的情況下,裝好mencoder,步驟非常繁複,但是一步一步跟著做應該可以成功編譯完成才是(God bless XD)。

  1. cd /tmp ; mkdir convert ; cd convert ; mkdir x264 yasm faac
  2. 這裡以及這裡抓取下列必要的檔案 (如果有更新的日期就抓最新的)
    source snapshot
    essential-20071007.tar.bz2
    all-20071007.tar.bz2
    windows-all-20071007.zip
  3. 解壓縮最新的source snapsot到/tmp/convert/mplayer_code
    再把all-20071007.tar.bz2解壓縮到/tmp/convert/codecs
    再將windows-all-20071007.zip解壓縮到/tmp/convert/win32
    最後將all-20071007.tar.bz2分別解壓縮到/tmp/convert/codecs以及/tmp/convert/win32
    (兩個目錄都要喔)
  4. 這裡下載最新的x264原始碼並解壓縮到/tmp/convert/x264_code
  5. 取得libfaac最新的原始碼,目前是1.28,解壓縮放到/tmp/convert/faac_code
  6. 取得yasm最新的原始碼,目前是0.7.2,解壓縮放到/tmp/convert/yasm_code
  7. 安裝yasm
    cd /tmp/convert/yasm_code
    ./configure –prefix=/tmp/convert/yasm
    make && make install
  8. 安裝x264 codec
    cd /tmp/convert/x264_code
    ./configure –prefix=/tmp/convert/x264
    make && make install
  9. 安裝libfaac
    cd /tmp/convert/faac_code
    ./configure –prefix=/tmp/convert/faac
    make && make install
  10. 終於進到重點了,開始正式安裝mencoder,由於我們不需要mplayer播放器,所以就不用編譯了,省下一些等待時間。
    cd /tmp/convert/mplayer_code
    ./configure –prefix=/tmp/convert –disable-mplayer –codecsdir=/tmp/convert/codecs –win32codecsdir=/tmp/convert/win32 –language=zh_TW –with-extraincdir=/tmp/convert/faac/include:/tmp/convert/x264/include –with-extralibdir=/tmp/convert/faac/lib:/tmp/convert/x264/lib
    make && make install
  11. 如果一切順利,編譯好的mencoder就會放置在/tmp/convert/bin的目錄下供您使用啦。
  12. 最後使用前,記得先額外指定LD Library Path到libfaac的目錄:
    export LD_LIBRARY_PATH=/tmp/convert/faac/lib

假設上面這複雜且費時的12大步驟都順完成了,就可以開始來轉換檔案給IPod Touch用啦!轉檔前先研究了一下IPod Touch對於影像最多可以支援道甚麼程度

H.264 video, up to 2.5 Mbps, 640 by 480 pixels, 30 frames per second, Baseline Profile up to Level 3.0 with AAC-LC audio up to 160 Kbps, 48kHz, stereo audio in .m4v, .mp4, and .mov file formats

瞭解了之後,才能針對規格去下轉換的參數,關於參數的部分我參考網路上一堆文章後,自己試用後,綜合起來推薦下列的指令 (別懷疑,那一堆是一整行的指令):

/tmp/convert/bin/mencoder 輸入檔案名稱 -o 輸出檔名.mp4 -vf scale=480:-10,harddup \
-lavfopts format=mp4 -faacopts mpeg=4:object=2:raw:br=128 -oac faac -ovc x264 \
-sws 9 -x264encopts nocabac:level_idc=30:bframes=0:global_header:threads=auto:\
subq=5:frameref=6:partitions=all:trellis=1:chroma_me:me=umh:bitrate=500 -of lavf

下了上面那長串的指令,轉出來的檔案便可以直接餵進去IPod Touch來撥放啦。相信應該有人還是會好奇上面的指令用了一堆參數,到底都代表著甚麼意義呢?我挑幾個重要的出來說明一下,如果需要微調的話也有個依據:

  • -sws 9 — 影像resampling使用Lanczos Algorithm來強化影像
  • -vf scale=480:-10 — 將轉出來的影像寬度設為480,高度自動調整,但是維持在16的倍數,為什麼是16的倍數呢?因為多數的codec在長寬都是16的倍數時壓縮效率最好。
  • -vf harddup — 為了維持frame rate,必要時插入重複的frame
  • -x264encopts nocabac:level_idc=30 — 因為IPod Touch只支援Baseline Profile Level 3.0
  • -x264encopts bframes=0 — 因為Baseline Profile不允許B-Frames
  • -x264encopts global_header — 使用單一的全域header,可以節省壓縮後的空間
  • -x264encopts threads=auto — 使用multithreading加快轉換速度但是會損失一點點點點點的品質
  • -x264encopts subq=5:frameref=6 — quarterpixel精度作動作預測設定到最高,並且最多使用6個refernce frames
  • -x264encopts partitions=all — 使用全部的microblock size
  • -x264encopts trellis — 降低編碼的速度及品質,但是可以減少產生出來的檔案大小
  • -x264encopts me=umh — fullpixel的運動補償使用umh演算法

我自己測試壓縮了rmvb、wmv及avi (xvid codec)的影片,在8 core (dual Xeon E5405 2GHz)的機器上的表現為

  • avi 檔案處理效率約為 128 fps
  • rmvb 檔案處理效率約為 110 fps
  • wmv 檔案處理效率約為11 fps

說真的,我也不知道為什麼轉換WMV的效率如此之爛,改天我再拿其他的檔案測測看吧。Anyway,這篇從安裝到轉檔到各項參數均完整說明,希望對有這樣需求的朋友們有所幫助啦。

4 Responses to “mencoder轉影片給IPod Touch觀賞之全攻略”


  • Thanks a lot! Thoroughly EXPLAINED the meanings of all parameters!

  • Thanks for the complete guide! A few points:

    - point 3 the last archive to extract should be essential-20071007.tar?
    - the options are denoted by double-dash?
    - I get the error:

    Unknown parameter: –with-extraincdir=//faac/include://x264/include

    I checked it looks like this is a bug of the snapshot source?

    Thank you very much for your wonderful

  • I mean wonderful tips :)

    Thanks again.

  • OK I know, it’s the blog that removes your double-slash…and some of my contents too…

Leave a Reply