872X480

看板AVEncode作者 (lpo)時間17年前 (2008/10/31 12:58), 編輯推噓1(103)
留言4則, 1人參與, 最新討論串1/1
處理dvd resize的方法因人的主張會有很多細部的不同, 我在這邊就談一下,有怎樣的處理方法.有怎樣的處理差異. 其實我最早處理dvd,使用的是DVD上附註的AR資訊,AR資訊不是什麼4:3或是16:9, 總之就是實際可見畫面在螢幕上的長寬比,每一片都不一定相同, 有的 1.8x:1 有的 2.x:1 ,上下左右黑邊都切一切後, 直接用dvd的Aspect Ratio去計算正確的比例就是, 問題是不是每一片dvd都有附帶這種訊息,不是非常通用, 那這個方法就暫且不繼續討論,這方法對錯怎樣,我也沒興趣再討論. 現在來談談別的. 按照既定教學, 720左右切邊到704 ,然後以704x480 reszie 到 640x360 , 這是正確的方法,但是有沒有維持正常比例,但是又無損畫面呢? 我常覺得人有腦袋,自己思考一下想一下就是,轉檔玩久了,規則原理知曉, 就可以擁有自己另外的一套. 其實想法很簡單, 720左右切8 pixel變成704 , 704x480 reszie 到 640x360 , 那回推一下如果360要再回推到480,那640得變多少呢? 依照比例計算是 853.3333 , 這時候最原本是 704 的pixel原來得擴增到853.333才是正確的,如果按照比例來說, 不切邊的720得變為多少呢? 853.33 / 704 = x / 720 計算出 x = 872 ,這種東西再簡單不過的比例計算推導, 我實在也很懶得把這細部的推導寫出,所以我才會說,也可以考慮拉伸720的方式, 當然還好幾套拉,反正比例計算 1:1 是 1, 2:2是1 ,3:3還是1,都是1,不是死板的. 其實就算你720x480 -> 640x360 ,誤差比例也沒超過3%. 至於細部方法的差異,這邊來討論一下 1.按照發佈dvdrip的慣例,畫面上不得出現無效黑邊,因此在你resize後, 還得進行切邊的工作,切了無效黑邊後會出現什麼情況呢? 長寬可能不被4整除,這在yuv的色彩域取樣是不被允許的,至少avisynth無法處理這種長寬 ,另外也可能無法被16整除,沒辦法被H.264規格壓制,這時候怎麼辦? a.你可以考慮切割畫面到適當倍數為止,我個人討厭切割到實際畫面細節 b.你可以再添加黑邊到適當倍數為止,但是很少人這麼作 c.你可以resize到最接近的適當倍數為止,但是比例會微幅度改變,應該沒超過1%吧. 2.你也可以整個全壓,最後設定AR,保留最多細節,但是有人說這也不正確, 反正變形最多在2%左右,看你自己的取捨. 3.當然你也可以依照過去的教學,看是要704X480 -> 640X360或是640X352都好,高興就好. 此外有的人雖然不會壓成704X480 -> 640X360或是640X352, 但是也不想壓到872X480這麼大,說真的需要流量是比較高沒錯, 其實只要依照比例計算則,你高興怎麼處理就好,但是在這邊其實有一個小問題, 就是在PIXELS的世界裡沒有所謂的小數,也不是所有比例在計算上都能整除, 一定會有小數,這種小數看個人主張的處理法,四捨五入或是直接捨去 你高興就好, 只是不管怎樣,都會多少存在著這種小數誤差, 因此才會說這世界上沒有100%正確比例的DVDRIP,甚至於連11/10也都只是大略值. 談比例,這邊就是在談比例的,但是我實在沒有興趣跟某人討論, 因此獨立成一個新主的主題. 實際上轉檔轉到後來,早期會去在乎正確比例,也使用過教學的東西, 到最後卻覺得即使最傻瓜比例誤差也最大的方法,誤差也是微乎其微, 後來就不是很care這些東西了,有時候像是小數計算上的誤差或是壓縮編碼需要的長寬, 這個本身環節的誤差就一定都會有一些在. 至於處理比例,我以前為avisynth寫過script,給大家參考一下 任何電腦上的影片(沒有帶特殊ar的),avs檔開啟後,加上下面這一段, 都會自動resize和加黑邊到正確的比例,雕蟲小技,基本比例計算的一些程式碼而已, 不過還是給有興趣的人參考一下 # for QVGA w = float (Width) h = float (Height) rate = int ((w / h) * 1000) srate = w / h (rate >1400 )? Eval(""" new_h = 320 / srate new_h = int (new_h) new_h = new_h - (new_h%4) LanczosResize(320,new_h) add_h = (240 - new_h)/ 2 AddBorders(0,add_h,0,add_h) """):Eval(""" """) ( rate >= 1300 && rate <= 1400 )? Eval(""" LanczosResize(320,240) """):Eval(""" """) ( rate < 1300 )? Eval(""" new_w = srate * 240 new_w = int (new_w) new_w = new_w - (new_w%4) LanczosResize(new_w,240) add_w = (320 - new_w)/ 2 AddBorders(add_w,0,add_w,0) """):Eval(""" """) ※ 編輯: erspicu 來自: 220.129.151.100 (10/31 17:28)

11/01 16:17, , 1F
好慘,一直否定別人時還順便否定自己,這種考卷會得零分說.
11/01 16:17, 1F

11/01 16:19, , 2F
dvd就只有正方形和長方形兩種,到現在還在640x360.
11/01 16:19, 2F

11/01 16:20, , 3F
與其花時間保留這種小檔案倒不如抓別人轉的,反正同樣都
11/01 16:20, 3F

11/01 16:22, , 4F
失去一堆細節了.玩轉檔請往高層次發展,例如完美解交錯.
11/01 16:22, 4F
文章代碼(AID): #192f1syZ (AVEncode)