Play-yan acceptable format

之前有研究過Game Boy Advance上的Play-yan 播放格式是如何?
怎麼轉成他可以支援的MP4檔?

那時候用的是mencoder 的lavc +lavf,這兩個codecs在mencoder上
不知道為什麼會因為mencoder 版本不同而有不穩定的現象

所以我就乾脆換成mencoder 的xvid + faac
整個步驟類似之前的lavc + lavf ,不過video ,audio的global headers是靠MP4Box

廢話就不多說了,先給我現在用的profile (我這個方式是走two pass的)

[play1]
vf-pre=scale=-2:160,crop=240:160
ovc=xvid=1
xvidencopts=bitrate=175:turbo=1:max_bframes=0:pass=1
nosound=1
font="Droid Sans Fallback"
utf8=1
[play2]
vf-pre=scale=-2:160,crop=240:160
vf-add=harddup
ovc=xvid=1
xvidencopts=bitrate=175:max_bframes=0:pass=2
oac=faac=1
faacopts=br=128:mpeg=4:object=2 
font="Droid Sans Fallback"
utf8=1
nosound=1

紅色是等比例縮放以高度為準計算寬度多少,之後再crop成play-yan最佳解析度
藍色是xvid的流量,以play-yan最佳解析度來說 流量超過256沒有太大意義
因為這種解析度影片流量23X就已經是最大了,再下去畫質也不會變好
我是推薦175 ,這仔細看的畫才可看的出來小暇疵
綠色是代表使用faac 的lc (aac相容性最高的格式)

把上面給的profile 的內容存到 ~/.mplayer/mencoder.conf 裡

然後執行下面兩個步驟

mencoder -profile play1 1.avi -o /dev/null
mencoder -profile play2 1.avi -o 01.avi

藍色是上面給的profile 名稱
綠色是1st pass 由於不需要輸出檔案,所以就用這個方式
紅色是2nd pass 輸出的檔案,可以注意到輸出的還是avi 需要靠MP4Box mux成mp4

MP4Box -aviraw audio 01.avi
MP4Box -aviraw video 01.avi

上面這兩個步驟是分別把01.avi的video,audio分離,準備mux成mp4
分離出的檔案有時候MP4Box可能認不出來檔案類別
譬如:aac的audio 分離出來的變成01.raw,這時候必須把它改名成01.aac
然後再進行下面步驟

MP4Box  -add 01.m2v:fps=29.976 -add 01.aac 01.mp4

紅色是剛剛分離出來的video
綠色是剛剛分離出來的audio
藍色是影片的FPS,由於MP4Box不能抓影片的FPS是多少 所以要手動給
(可以用影片frames+秒數 手動算,也可以用gnome-mplayer來看)
紅紫色當然就是最終目的mp4

這樣是有點複雜一些,不過這是目前最通用的辦法(各種支援MP4的機器都可以用)
而且這篇提到的軟體都是跨平台的,要用也比較方便

這個需要編譯裡有加 xvid,faac 的mencoder 請透過mediauntu來安裝
(faac由於一些關係,ubuntu裏面的mencoder不會包進來)
MP4Box 則是ubuntu裏面就有了,安裝gpac就可以使用MP4Box

延伸閱讀:http://bbs.wissky.com/t21986-p1-1.html

減色PNG linux版

距離上一個windows only版也快一年了,linux only 的當然也要來一下

這次主要是把上次的遺珠之憾(pngnq)放進來
pngnq 1.0 這版把Improved pngnq 改良的source放進來了
整個dithered後 感覺變好很多

更多

AMD/ATi Stream support failed ?

上一篇提到9.2不能使用GPU進行Stream 影片編碼
原因竟然只是AMD/ATi 對dll 進行改名

把原本在windows\system32下的amdcal***.dll改成atical***.dll
理由是要配合未來(兩週內)要釋出的SDK 1.4 ,因為在這個SDK內dll已經改名了
dll的改名會導致之前一些已經支援stream的軟體變成不能支援

要讓舊的軟體再繼續支援很簡單
先複製atical***.dll出來 改成amdcal***.dll後再移回去system32
(原來的atical***.dll不要刪掉,以後會用到)

至於catalyst 9.1、9.2 不能硬解,是不是也因為這類改名稱的錯誤就不得而知

AMD/ATi 的道歉

感謝PCDVD的open123提供情報

總算找到支援Stream的轉檔程式

在Catalyst 9.1、9.2 接連硬解失敗後
有人提到用dxva checker,檢查後發現只剩下兩個格式可以硬解

於是去找了dxva checker來測試看看是不是真的這樣
結果意外的找到了支援Stream GPU影像編碼的程式 A’s Video Converter

更多

用 Stream 轉檔有沒有搞頭

眾所皆知AMD/ATi 於12/10推出了Catalyst 8.12
8.12 最主要的重點是在Stream的支援上,目前有支援Stream的程式很少
(蛋白質折疊、找外星人…)

不過ATi 提供了免費的轉檔程式Avivo Video Converter,就拿這個來開刀吧
(ATi號稱他已經支援了Stream 可以用GPU作影片轉檔)

由於ATi 驅動程式附的Avivo Video Converter實在很不穩定,每次編碼的時間都可以差上好幾倍
(有時候是一分鐘可以完成 有時候又要十幾分鐘,而且還很容易當機)

所以測試使用的是ATi Tray Tools Public Beta裡的atixcoder
這個程式有點像Avivo Video Converter的前端程式
他的速度比官方版穩定很多而且平均速度跟官方版最快的速度類似 也不太會當掉

測試轉檔的影片是從MPEG1轉到MPEG2
(編碼設定能相同的盡量相同,用來當對照組的是純軟體編碼的mencoder)

紅色圈起來的是編碼速度每秒95.69Frames,編碼耗費時間1分25秒

接下來的是mencoder

由於他無法計時就自己看手錶算秒數
紅色圈起來的是編碼速度每秒143.83Frames編碼耗費時間57秒
結論:純軟體編碼還比Avivo Video Converter快1.5倍
難道Avivo Video Converter沒有用到GPU?這當然要測一測再說
測試的最好方法就是對GPU超頻囉!
我設了三組時脈 (core/memory),300/500,750/1000,850/1111
這三組都用Riva Tuner 2.21 鎖定時脈不受Powerplay影響
三組設定各跑了兩次,兩次結果都不同
一次是前面兩組編碼時間很接近一樣快 (時脈最高的編碼時間反而耗時最長),一次是時脈越低的越快
這簡單的測試可以證明 GPU時脈跟影片編碼速度沒有絕對關係(說完全沒有關係也OK)

再次證實了 用Avivo Video Converter 作影片轉檔沒搞頭
(2004年ATi 也是號稱 Avivo Video Converter 可以用GPU加速編碼,但後來被人戳破)