2014年1月31日 星期五

系列番外篇之2─madVR Profile設置實戰

madVR的Profile功能是在0.87版加入的一項重要功能,在madVR教學本文中我多次強調,對於madVR陸續加入的一堆新功能、演算法,我們不太可能在用單一種設定去應付所有不同種類的影片在所有不同狀況下的播放,當然用熱鍵勤勞的切換設定是一種解法,但我想這樣看影片也太辛苦了,我們會希望有一種一勞永逸的方法,讓我們只要設定一次就行了,madVR給了我們這個方法,Profile提供了強大的自訂功能,讓你可以經由它的語法編寫出一套簡單的語言,讓其可以智能的去切換各種設定,而不需要再手動去切換。


madshi對這個功能做了一些說明及範例,如下:

http://forum.doom9.org/showthread.php?p=1271417#post1271417

基本上我主要是以翻譯它的說明為主,並搭配我自己的設定做為範例來說明這個功能的用法。

基本上語法主要是以"if","else if"和 "else" 這些字串所構成,每個"if"或"else if"後面會接著一些括弧,括弧裡面有一個或多個數值的比較或是條件,括弧和括弧之間可以用邏輯運算子"and"或是"or"來連結,之後會有一個滿足條件就會啟用的"profile",當然profile的名稱是可以自訂的。經由編寫大量的數值比較可以達成高度複雜化的選擇機制。

標準範例:

if         (srcWidth <= 1050) and (srcHeight <= 768) and (deintFps < 31) "SD 24fps"
else if  (srcWidth <= 1050) and (srcHeight <= 768)                                "SD 60fps"
else if                                                                             (deintFps < 31) "HD 24fps"
else                                                                                                         "HD 60fps"


"SD 24fps"、 "SD 60fps"、"HD 24fps"、 "HD 60fps"這些都是自訂的profile名稱,括弧內則是比較條件,上面那個範例如果用中文來說的話,就是:

如果srcWidth小於或等於1050,並且srcHeight也小於或等於768,並且deintFps小於31,同時滿足以上三條件的話,運行名為"SD 24fps"的profile。
否則,如果srcWidth小於或等於1050,並且srcHeight也小於或等於768,同時滿足以上兩條件的話,運行名為"SD 60fps"的profile。
否則,如果滿足deintFps小於31這條件的話,運行名為"HD 24fps"的profile。
否則的話,一律運行名為"SD 60fps"的profile。

有寫過程式的人可能會覺得我這樣翻譯很白癡,不過這是給不會寫程式的人看的,請見諒XD

語法支援的關鍵字和運算子:

陳述句:"if", "else if", "elseif", "elsif", "else"
邏輯運算子(並且、或是):"and", "or", "&&", "||"  (第三項就是and,第四項就是or)
等於:"= =", "="
不等於:"!=", "<>", "#"
大於 小於:"<", ">", "<=", ">="    (後兩項是"小於或等於"、"大於或等於")
布林"not"(否定)運算子:"not", "!"
算數運算子:"+" ,  "-" ,  "*" ,  "/" ,  ":"

支援的數字性數值:

片源寬、高(裁切部份照設定):srcWidth  、   srcHeight
被裁切的片源寬、高:croppedSrcWidth  、   croppedSrcHeight
沒被裁切的片源寬、高:uncroppedSrcWidth  、  uncroppedSrcHeight
裁切後的寬高比例、沒被裁切的寬高比例、編碼時的寬高比例:AR  、  uncroppedAR  、   encodedAR
目標解析度寬、高(裁切部份照設定):targetWidth 、  targetHeight 
被裁切的片源目標解析度寬、高:croppedTargetWidth 、  croppedTargetHeight
沒被裁切的片源目標解析度寬、高:uncroppedTargetWidth 、  uncroppedTargetHeight
整體放大比例寬/高:scalingFactor.x/y
片源幀率、去交錯後之幀率、片源色深:Fps 、deintFps、 bitDepth
螢幕比例寬/高、螢幕更新率:displayMode.x/y 、  refreshRate
影片播放時間:runtime

支援的布林數值(true or false):

片源是否為該種像素格式?    4:2:0、 4:2:2、 4:4:4、 RGB
影片是否為HDR?                   HDR
是交錯式片源嗎?                   srcInterlaced
film mode(IVTC)是否作用?     filmMode
片源是否為該種編碼?           MPEG2、 VC-1、 h264
是該種rendering mode嗎?        exclusive、 overlay、 windowed 
工作的是該種GPU嗎?           AMD、 nVidia、 Intel
smooth motion FRC是否作用?smoothMotion
影片是否有可變的寬高比?   variableAR
影片是否為3D?                      3D
影片是全螢幕播放嗎?           fullscreen
電源是用電池運作嗎?           battery

支援的字串數值:

播放器exe檔的名稱                mediaPlayer
文件的副檔名                         fileExt
文件名                                     fileName
文件路徑                                 filePath
顯示器名稱                             display

後三者可搭配兩個wild char(通配符號)使用    "?" , "*"
星號"*"匹配0個或以上的字元,問號"?"匹配1個字元,字元可以是26個英文字母和10個數字之一

如何運用數字性、布林、字串數值的範例:

if ((not 4:2:0) or (AR = 16:9)) and (mediaPlayer = "Funky.exe") "Weird profile" else "Normal profile"

用中文來說的話:
如果"像素格式不是4:2:0"或是"片源比例等於16:9"此兩條件其一成立,並且播放器執行檔名稱等於Funky.exe的話,運行名為Weird profile的profile,否則的話,運行名為Normal profile的profile

字串數值的範例2:

if (filePath = "C:\Videos\*") "Profile 1"

檔案路徑"C:\Videos\"底下的任何檔案套用Profile 1

if (fileName = "*x264*") "Profile 1"

檔案文件名裡面有出現x264這個關鍵字的話就套用Profile 1

if (fileName = "*test0??") "Profile 1"
檔案文件名最後面是"test0??"的話就套用Profile 1,??是兩個任意字元

if (fileExt = "wmv") "Profile 1"

檔案副檔名為wmv的話就套用Profile 1



以上為翻譯內容(字串數值的範例2是我自己加的)

這樣看完應該稍微有點概念了吧,不過要編寫出自己想要的完整選擇機制的話,當然你必須很清楚你要讓什麼片源在什麼情況下使用什麼設置,這邊就必須先做大量的測試,觀察顯卡的負載狀況,並且記錄、整理,有了完整的邏輯之後才能把它寫成語法,然後再去測試和修正,這個步驟可能會相當麻煩而且辛苦,但完成後就能一勞永逸,所以不要怕麻煩。

以下開始實際操作的說明
當我們選擇左邊三大群組的時候,右邊會有建立profile群組的方塊出現,點擊之

會出現問你要把哪些項目包入群組中,勾選後按確定。已經被包入群組的項目,在你建立第二個群組時就不會再看到

群組的設定畫面,群組名稱可自訂,按add profile建立profile,"edit shortcut"為熱鍵編輯,可設定讓你切換此群組內profile的熱鍵,下方大片空白就是讓你寫語法用的,綠色勾勾是語法檢查正確的標記,語法錯誤的話會變成驚嘆號

建立profile後選擇,可看到profile設定畫面,profile名稱可自訂,duplicate profile是讓你再建立一個新的profile並把目前這個profile之下各選項的設定都複製過去。"edit shortcut"為熱鍵編輯,可設定選擇此profile的熱鍵,底下還有兩行command line,目前尚無作用,是madVR為了之後的功能先做出來的。
左邊選擇此profile之下的選項進行設定

設定完成後大概像這樣,建立語法來選擇profile並套用底下的設定,這邊可以發現我除了image downscaling是固定設置之外,其他三項都透過群組裡寫好的選擇機制來套用不同profile,而我的選擇機制主要是以解析度和幀率來做判斷





這些都只是範例,實際上怎麼寫要發揮一點你的想像力,彈性是相當大的,而且大概每個人需要的設置都不一樣。這邊也要小提醒一個地方,如果跟幀率或是螢幕更新率有關的比較條件,不要用"=",而應該使用">" "<"  ">="  "<=",因為這兩個數值都是有小數點的,而且末位會常常變動,所以用"="當做條件的話大概永遠都不會啟用,必須注意。

enjoy it!

96 則留言:

  1. 你好!!我想請教scaling algorithms各profile的設定該怎麼選擇呢?

    語法的部分沒有問題,從你的系列3 madVR介紹當中似乎scaling algorithms演算判別是以目標解析度跟影片解析度比較來決定用何種演算法,這樣說對嗎?因此我好奇的是片源fps的不同也會影響scaling algorithms的設定嗎?

    回覆刪除
    回覆
    1. 不對
      目標解析度跟影片解析度的差別是決定會不會啟用image doubling、upscaling或是downscaling,啟用後使用哪種演算法是你在各個profile中指定好的。
      片源FPS不會影響,但是你可以把它做為選擇profile的條件
      舉個簡單的例子:

      if (deintFps > 30) "Profile 1"
      else if (deintFps>=25) "Profile 2"
      else "Profile 3"

      以上是語法,以下是各profile的設定
      Profile 1
      chroma upscaling:Bicubic75+AR
      image doubling:不勾選
      image upscaling:Jinc3+AR

      Profile 2
      chroma upscaling:Bicubic75+AR
      image doubling:勾選luma翻倍 設定1.5x啟動 32
      image upscaling:Lanczons3+AR

      Profile 3
      chroma upscaling:Bicubic75+AR
      image doubling:勾選luma翻倍 1.5x啟動 64 勾選luma再翻倍 3x啟動 32
      image upscaling:Lanczons3+AR

      大概像這種感覺,不知道有沒有解答你的問題?

      刪除
    2. 不知道有沒有人會問我為什麼要用"deintFps"而不用"srcFps",順便解釋一下好了
      deintFps
      遇到progressive影片,直接讀取幀率
      遇到interlaced影片,讀取去交錯後的幀率

      srcFps
      遇到progressive影片,直接讀取幀率
      遇到interlaced影片,直接讀取幀率(去交錯前,因此60i會被判斷成30p)

      對我來說deintFps比較好用

      刪除
    3. 如果deintFps不會影響為什麼要加入條件中呢?
      像你的設置中有兩行是這樣寫的
      if (srcWidth>1440) and (srcHeight>=1080) and (deintFps>30) "HD 60fps"
      else "HD"

      假設螢幕是1920x1080
      一部1920x1080 deintFps>30的影片會啟用"HD 60fps"這個profile
      若變成deintFps<30就會啟用"HD"對吧?

      對這兩個profile而言image doubling應都不會啟用才是,chroma upscaling+image upscaling 都是用Jinc3+AR的情況下是不是可以寫一個profile就好?

      刪除
    4. 因為我這個群組裡還有其它SD的profile阿
      profile裡面有哪些項目在建立群組時就決定了
      除非你要把image doubling放到另一個群組裡去設定也可以
      只是我習慣放在一個群組內

      我這兩個profile裡面設定不一樣
      HD
      chroma upscaling:Jinc3+AR
      image doubling:不勾選
      image upscaling:Jinc4+AR

      HD 60fps
      chroma upscaling:Bicubic75+AR
      image doubling:不勾選
      image upscaling:Jinc3+AR

      如果設定都一樣,當然只寫一個profile就好(你可以發現我讓4K影片也使用HD 60fps而沒有再另外寫一個profile)
      全部總共要有幾個profile完全由你自己決定哦,像madshi的範例就是只有4個

      刪除
    5. 基本上你的假設沒錯,FHD螢幕下
      HD和HD 60fps裡面image doubling就算有勾選也不會啟用

      刪除
    6. FPS不同只會影響吃多少效能,所以我才要在高幀率時選擇使用消耗較低的演算法

      刪除
    7. 我終於懂了(汗

      感謝你這麼細心說明

      刪除
  2. 我觉得完全没必要写fps,就目前大部分片源情况来说,以下是我的设置:

    if (srcWidth < 848) and (srcHeight < 480) "SD"
    else if (srcWidth = 848) and (srcHeight = 480) "DVD"
    else if (srcWidth = 1280) and (srcHeight = 720) "720P"
    else if (srcWidth = 1440) and (srcHeight = 1080) "1080i"
    else if (srcWidth = 1920) and (srcHeight = 1080) "1080p"
    else if (srcWidth > 1920) and (srcHeight > 1080) "4K"

    回覆刪除
    回覆
    1. 忘记了还有1024x576这种分辨率的片子了,以下是修改后的

      if (srcWidth < 848) and (srcHeight < 480) "SD"
      else if (srcWidth < 1280) and (srcHeight < 720) "DVD"
      else if (srcWidth = 1280) and (srcHeight = 720) "720P"
      else if (srcWidth = 1440) and (srcHeight = 1080) "1080i"
      else if (srcWidth = 1920) and (srcHeight = 1080) "1080p"
      else if (srcWidth > 1920) and (srcHeight > 1080) "4K"

      刪除
    2. FPS對我來說是有必要啦
      我這電視台就有1920*1080/60i訊號
      而且你列的是最常見的解析度沒錯,不過像720就有24p或60p
      1080有24p、30p、60i
      另外像HD也有4:3的內容(如一些藍光重製版)
      這些種類的影片我手邊都有
      所以我會比較喜歡用">" "<"取代"="
      不過當然這是因個人需要設置囉

      刪除
    3. 把歐規PAL的影片算進去的話種類就更多了

      刪除
    4. 这些我会慢慢添加了,这里我用“=”是因为我想不同的分辨率对应一个resize算法,scaling algorithms这一块我只打算管resize这一块,fps这些我喜欢交给其它地方来管理(比如交给rendering下的smooth)

      刪除
    5. 主要是因為我顯卡不夠強
      遇到高幀率的片源勢必要使用較省資源的演算法才能應付......

      刪除
  3. 又去弄了下别的,这真是一个超级大工程

    回覆刪除
  4. if x2.6 Jinc or NNEDI3 better?(x2 use NNEDI3 64*2)

    回覆刪除
    回覆
    1. NNEDI3 would be better in general.
      But it depands on your taste.

      刪除
  5. 你好,我的設置很簡單,不過我完全沒學過這種東西
    不知道能不能幫我寫個profile

    我想要的效果如下
    profile1:影片解析度小於720P
    profile2:影片解析度大於720P
    profile3:影片解析度大於等於1080P

    不知是否可以幫我撰寫一下?
    謝謝

    回覆刪除
    回覆
    1. 作者已經移除這則留言。

      刪除
    2. 我也沒學過阿...
      這篇就是教你寫...
      試著自己寫寫看吧,過不了PO上來我再幫你修改

      刪除
    3. 回文裡"椎名真冬"寫的那個稍為修改一下就是你要的東西了

      刪除
    4. if (srcWidth < 1280) and (srcHeight < 720) "P1"
      else if (srcWidth >= 1280) and (srcHeight >= 720) "P2"
      else if (srcWidth >= 1920) and (srcHeight >= 1080) "P3"

      差不多是這樣?

      話說madVR支援N牌的SLI或A牌的CROSSFIRE嗎?

      刪除
    5. 你寫的這個邏輯,影片解析度大於等於1080P也會先執行P2,P3永遠不會被選擇到...
      不過只要改一下順序就OK了
      以下:
      if (srcWidth < 1280) and (srcHeight < 720) "P1"
      else if (srcWidth >= 1920) and (srcHeight >= 1080) "P3"
      else if (srcWidth >= 1280) and (srcHeight >= 720) "P2"

      madVR不支援SLI或CROSSFIRE

      刪除
  6. 不好意思問個比較笨的問題。播放影片使用這些外掛插件,GPU使用率上升了 ,是不是就是用到了 "GPU通用運算" 能力? 謝謝

    回覆刪除
    回覆
    1. madVR主要是使用GPU的shader,部分功能會用到OpenCL和DirectCompute

      刪除
  7. 我想問 if else中的 else 要怎麼寫
    我的意思是
    if()
    {
    if()...
    }
    else
    {
    if()...
    }

    另外, 發現有 BUG...

    if (srcWidth >= 1440) and (srcHeight >= 1080) and (deintFps >= 29.970) "Full HD 30fps"
    else if (srcWidth >= 1440) and (srcHeight >= 1080) and (deintFps < 29) "Full HD"
    else if (srcWidth >= 960) and (srcWidth < 1440) and (deintFps > 31) "HD"
    else if (srcWidth >= 960) and (srcWidth < 1440) and (deintFps <= 30) "HD"
    else if (srcWidth < 960) "SD"

    這個設定, 外加 Profile settings order
    SD
    HD
    HD 60fps
    Full HD
    Full HD 30fps
    不管怎麼改判斷順序
    播1080i 還是會轉至SD....

    直到我把Profile settings order改成
    Full HD 30fps
    Full HD
    HD 60fps
    HD
    SD
    才正常...

    回覆刪除
    回覆
    1. 我的認知是else永遠是放最後一行,代表"不符合所有以上條件"的情形
      故else後面不用打條件,直接接profile名

      另此bug是否0.87.10還存在?如果是的話可以到bug tracker: http://madVR.bugs.madshi.net
      回報給madshi

      刪除
    2. 嗯...也就是說
      我想的那個條件式就不能用
      我是想加入srcInterlaced這個條件式
      這樣的話以一般程式語言的條件描述式就會變成
      if(srcInterlaced)
      {
      if (srcWidth >= 1440) and (srcHeight >= 1080) and (deintFps >= 29.970) "Full HD 30fps"
      else if (srcWidth >= 1440) and (srcHeight >= 1080) and (deintFps < 29) "Full HD"
      else if (srcWidth >= 960) and (srcWidth < 1440) and (deintFps > 31) "HD"
      else if (srcWidth >= 960) and (srcWidth < 1440) and (deintFps <= 30) "HD"
      else if (srcWidth < 960) "SD"
      }
      else
      {
      if (srcWidth >= 1440) and (srcHeight >= 1080) and (srcFps >= 29.970) "Full HD 30fps"
      else if (srcWidth >= 1440) and (srcHeight >= 1080) and (srcFps < 29) "Full HD"
      else if (srcWidth >= 960) and (srcWidth < 1440) and (srcFps > 31) "HD"
      else if (srcWidth >= 960) and (srcWidth < 1440) and (srcFps <= 30) "HD"
      else if (srcWidth < 960) "SD"
      }

      這邊有個問題就是
      deintFps是專屬於交錯後的影片的判斷?
      還是不管有沒有交錯比如deintFps>30 "SD"
      只要有影片是超過30p的就會轉至"SD"?

      我是使用0.87.10
      回報阿...英文苦手...

      刪除
    3. 這個跟程式語言還是有點不一樣,它好像是每一個陳述句後面都要接一個profile名,語法才會過...

      deintFps 在有去交錯的場合,是看去交錯後的幀率
      沒去交錯的場合,是看原本的幀率
      所以你的例子:deintFps>30 "SD",是只要有影片是超過30fps的就會轉至"SD"

      刪除
    4. 我改了兩個我覺得有點奇怪的地方,你試試這個會不會播1080i 還是會被排序影響轉至SD
      if (srcWidth >= 1440) and (srcHeight >= 1080) and (deintFps >= 29) "Full HD 30fps"
      else if (srcWidth >= 1440) and (srcHeight >= 1080) and (deintFps < 29) "Full HD"
      else if (srcWidth >= 960) and (srcWidth < 1440) and (deintFps > 31) "HD 60fps"
      else if (srcWidth >= 960) and (srcWidth < 1440) and (deintFps <= 30) "HD"
      else if (srcWidth < 960) "SD"

      刪除

    5. 用這個就好了
      可能是不能設定浮點數吧

      刪除
    6. 設浮點數沒有影響
      只是那可能代表你的1080i影片去交錯後幀率在29~29.970之間
      (你原本的描述式如果幀率在這個區間會被跳過)
      但一般來說DXVA去交錯後幀率應該是接近60幀
      除非1.你是用LAV裡的去交錯並且選到"Film"這項
      或是2.madVR裡的"trade quality for performance"裡面有勾到
      "use half frame rate for DXVA deinterlacing"
      或是3.顯卡控制介面裡面(AMD的CCC),去交錯方法強制選擇了"Weave"

      這3種情形可能造成去交錯後幀率只有29幀多

      刪除
    7. 以上只是我的胡亂猜測,也許根本不是這個問題...
      總之如果目前沒有問題,播放流暢度也正常,那就不用管它了

      刪除
    8. 的確..因為本身設備不夠好跑60fps會delay要死
      所以跑這種交錯影片我都用film mode

      嗯...學到了
      film mode 30p是指交錯後會得到29~30fps

      刪除
  8. 布林"not"(否定)運算子:"not", "!" 这个如何写?我试了半天没有成功。
    还有反交错方面,只要这样写就行了吧?
    if (filmMode = true) "IVTC on"
    else "IVTC off"

    回覆刪除
    回覆
    1. not的用法當然是要配合布林數值來使用的
      像這樣:
      if (!srcInterlaced) "profile 1"
      else if (4:2:2) "profile 2"
      else "profile 3"

      以你的例子來說,肯定句那個"= true"不用寫進去。
      還有另一個問題就是,"filmMode"這個布林數值本身是看你去交錯啟用時有無切換(手動或強制)到film mode這個模式,madVR目前沒有自動判斷video或film的機制,所以你的 "IVTC on"和 "IVTC off"裡面是打算放什麼東西呢?

      刪除
    2. 作者已經移除這則留言。

      刪除
    3. 作者已經移除這則留言。

      刪除
    4. 試了N種方法,都沒用,對了你是怎麼寫的?

      刪除
    5. 又嘗試了下,發現可以了,測試了幾個發現正常沒問題,問題根本不是出在參數上而是在交錯設置上

      刪除
    6. 代碼判斷是正確的,但由於我的反交錯設置錯誤導致無論怎麼判斷都是不需要交錯。

      刪除
    7. 如果你是問我反交錯的設置,這個部份我並沒有寫判斷式,純用手動熱鍵切換
      video跟film的自動判斷madshi有說過以後會加入,目前靠判斷式應該是沒辦法處理的,最後還是要靠手動

      刪除
    8. 反交錯這玩意madshi說過要重新全部重寫,基於QMTC.還有會加入著色器功能,類似MPDN播放器那種的。也許會加入銳化功能類似finesharp.還有就是BE教程這玩意你要更新下了 ,因為最新編譯版本MPC-BE 1.4.3.20TempSVN版本就EVR和VMR渲染增加了幾個新的縮放算法,音頻這一塊也已經全部重寫了。

      刪除
    9. 還有就是你知道設置快捷鍵下面的command line功能怎麼用的?還是說現在只是擺設?

      刪除
    10. 其實我沒更新的原因是因為它一直不出1.4.3正式版,而nightly build的變化實在太快,介面排版一直改,我想等它出正式版再一次重寫。
      那兩個新縮法算法我有玩了下,效果不是很滿意,不如bicubic好,要說節省效能又不如bilinear省......

      刪除
    11. command line目前沒有作用,這個有人問過madshi,是為以後的功能預留的~

      刪除
  9. 还有就是以下两个profile能不能可以再合理化?

    一、去色带

    if (mediaPlayer = 'madTPG.exe') 'madTPG'
    else if (srcWidth >= 1280) and(srcWidth < 1920) and(filePath = "F:\BD\*") 'deband BD'
    else if (srcWidth < 1280) and(filePath = "F:\DVD\*") 'deband DVD'
    else if (filePath = "F:\BD\*") 'madTPG'
    else if (srcWidth <= 640) and(srcHeight <= 480) 'deband Bad'
    else if (srcWidth < 1024) and(srcHeight < 720) 'deband Low'
    else if (srcWidth < 1440) and(srcHeight < 1000) 'deband Medium'
    else if (srcWidth < 1920) and(srcHeight < 1080) 'deband High'
    else 'deband Higher'

    二、缩放算法

    if (srcWidth <= 640) and(srcHeight <= 480) 'FLASH'
    else if (filePath = "F:\BD\*") 'BD'
    else if (filePath = "F:\DVD\*") 'DVD'
    else if (srcWidth < 1024) and(srcHeight < 720) and(deintFps < 31) 'SD'
    else if (srcWidth < 1024) and(srcHeight < 720) 'SD 60fps'
    else if (srcWidth < 1440) and(srcHeight < 1000) and(deintFps < 31) 'HD'
    else if (srcWidth < 1440) and(srcHeight < 1000) 'HD 60fps'
    else if (srcWidth < 1920) and(srcHeight < 1080) and(deintFps < 31) 'UHD'
    else if (srcWidth < 1920) and(srcHeight < 1080) 'UHD 60fps'
    else if (srcWidth = 1920) and(srcHeight <= 1080) and(deintFps <= 30) 'FHD'
    else if (srcWidth = 1920) and(srcHeight <= 1080) 'FHD 60fps'
    else 'QHD'

    回覆刪除
    回覆
    1. 語法跟邏輯看起來是沒什麼問題啦,每個人的配置不太一樣,你若測試起來OK就行了~

      不過去色帶那個,分辨率越高開越強嗎?這個個人覺得有點奇怪就是了,當然可能你那邊的片源是需要這樣子的設置。

      刪除
    2. 抱歉,我这个是反的,也就是说虽然配置文件名写的higher,但其实设置等级是最低的low

      刪除
  10. madvr profile支持//注释

    回覆刪除
  11. profile設定的小疑問
    有沒有辦法針對類型去選擇要的profile
    像是2次元動畫用一種,3次元的用一種

    能否這樣做到?

    回覆刪除
  12. profile設定的小疑問
    有沒有辦法針對類型去選擇要的profile
    像是2次元動畫用一種,3次元的用一種

    能否這樣做到?

    回覆刪除
    回覆
    1. 沒辦法,影片內容本身非邏輯式能判斷,只有人腦能區別

      刪除
    2. 用熱鍵手動切換profile是唯一的辦法

      刪除
  13. 請問madVR可以判斷有沒有開SVP嗎?
    他的fps判斷好像是直接從Source Filter去判斷的?

    回覆刪除
    回覆
    1. 不能
      正確來說是抓decoder給它的資訊,SVP算解碼之後的後處理所以無法被辨識

      刪除
  14. 請問有方法可以用單一熱鍵輪流切換單一profile group內所有的profile嗎
    目前有試過設定profile group的keyboard shortcut to toggle profiles
    但是發現只能在profile group的最前面兩個profile之間做切換而已

    回覆刪除
    回覆
    1. 那功能可能還不完全或有bug,不是很確定...

      刪除
  15. 能分享下你的配置文件吗?非常感谢

    回覆刪除
  16. 今天看一部影片發現開不了 影片打開不到三秒就停止回應
    狀況如圖
    http://imgur.com/a/dQPeD

    回覆刪除
    回覆
    1. 濾鏡鏈? 影片資訊?
      先改軟解試試看

      錯誤碼要去MPC-BE的討論串PO,那個只有開發人員看得懂

      刪除
    2. http://forum.doom9.org/showthread.php?t=165890

      刪除
  17. 好像沒人弄代碼像我這麼多XD..把電腦上所有存放視頻的主文件夾都篩選出來(40個),寫明公用...
    然後開始地獄般的測試和調整(這堆代碼用了3天才基本完成,改來改去,刪來刪去...(自己有時都覺得搞這麼細有些多餘,但又停不下來...(*゚ー゚)
    之前磨磨蹭蹭測試圖像算法又消耗了3,4天...

    N卡用不了NNEDI3還是比較遺憾,NGU問題又太多,只能細細的分類后使用..
    3d類二次元視頻和MMD視頻用NGU有奇效,放大后的效果沒有模糊感,就算有鋸齒都像是直接開3D軟件放大出來的..有種模型感..我很喜歡..

    其實距上次認真設置madvr已經有3年了,一想到要搞播放軟體就頭痛..這次換系統還是沒能逃過...(期間一直在用jinc3)..

    傳了代碼和一些說明上去XD..
    https://raw.githubusercontent.com/88738496/a887/master/madvr.md
    雖然看起來很亂,但大部分都通過測試了(基本滿足要求),bug和沒弄到的地方肯定有,不過已經不想再看這個了...
    真人片文件夾有很多,但全部都用的通用設置..基本都是2號檔解決//

    回覆刪除
    回覆
    1. N卡可以用NNEDI3哦,很久以前是有bug不過好幾個版本前就修好了~

      刪除
    2. ???這不可能?!!(。_。)..
      win10 64位,驅動最新版
      色度提升選NNEDI3,有幾率出錯,並且一定會在關閉軟件時軟件死掉..
      圖像提升那選NNEDI3,會在切換到全屏后花屏,畫面上會出現很多白底黑字的長方形格格..
      聽過有人說不使用cuda可以正常使用,但我關掉cuda還是會出問題..

      刪除
    3. 因為我一直都在用,是沒有遇到問題啦
      目前是1060 驅動373.06,以前用960也是OK的
      不過我想你遇到的問題可能類似下面這個case
      http://bugs.madshi.net/view.php?id=354
      可能舊N卡裝新驅動OpenCL會有問題或是新驅動本身就有bug,因為373.06算比較穩版本所以就一直用了,我不確定裝最新的會不會出問題...

      刪除
  18. 真是博學!就是上面那種情況!!(其實是黑底+白點..= =)

    我現在的系統是win10 10週年版64位,驅動是376.33,用內置和外掛LAV同pot和mpc測試:
    無論窗口或全屏,播放中或暫停中,cuda,硬解還是軟件,只要啟用NNEDI3,馬上花屏,這時如果切換成別的算法又會瞬間正常..

    -------------
    因為怕把現在的系統搞亂,我還下了一堆驅動想在別的硬盤里的win764位上做測試...
    原本的驅動同為最新的376.33
    madvr版本0.90和0.94,LAV0.68和最新版,自帶全套和LAV全套,cuda,硬解,軟件//
    使用NNEDI3混合測試,結果完全正常..沒有一次花屏(。_。)...

    我感覺這個問題的原因像是win10..,不然就是NV顯卡的win10驅動都有問題.m_m..

    回覆刪除
    回覆
    1. 有可能,我是用win7 x64,的確是沒遇過問題

      刪除
  19. 真是有可能啊...
    win10都3年了,還是一身BUG,裝系統的那兩周被驅動BUG害的很慘,幾乎每天都會發現新的問題和疑難雜症..
    ======
    另外測試NNEDI3時發現相比其他算法,NNEDI3的畫面總是要顯示的偏左上一點,
    多出來的那部分有時像是原畫面的部分有時又不像..

    看博主madvr那篇的截圖似乎也有這種現象...

    回覆刪除
    回覆
    1. madshi有說他認為win8.1比較穩
      NNEDI3在每個向量上會有像素的偏移,那是它的特性,X和Y軸都套NNEDI3就會偏左上沒錯,可看下面madshi的說明第三點:
      https://forum.doom9.org/showthread.php?p=1663611#post1663611

      有趣的是,madshi說他在二次翻倍時用了另一種修改過的NNEDI3,會往右下偏移,所以用NNEDI3做二次翻倍的話會抵銷一些往左上偏移的效果,但沒辦法完全抵銷
      https://forum.doom9.org/showthread.php?p=1664822#post1664822

      刪除
  20. 明白啦,感謝解答..(*・∀・)/

    回覆刪除
  21. 听说你用1060显卡可以正常使用NNEDI3,可不可以告诉我你的windows版本号和N卡驱动版本号

    回覆刪除
    回覆
    1. 上面有寫了哦,win7 x64 SP1,NV驅動版本373.06

      刪除
  22. 请问如果有没有语句可以判断片源被缩放(非原分辨率)

    回覆刪除
    回覆
    1. 布林值的話沒有,不過應該可以用放大比例"scalingFactor.x"或是"scalingFactor.y"來寫

      例如
      scalingFactor.x > 1.5 就是指寬放大1.5倍
      scalingFactor.y > 2 就是指高放大2倍

      刪除
    2. 如果寫成
      if (scalingFactor.x != 1) or (scalingFactor.y != 1 )
      應該就有單純的縮放判斷效果了

      刪除
  23. 請問一下我一開始打if (srcWidth>1920) and (srcHeight>1080) "UHD"
    else "normal"
    為甚麼會語法錯誤

    回覆刪除
    回覆
    1. profile名稱,預設值是"profile 1" "profile 2"......
      UHD和normal是我自己改的profile名(看圖左邊),圖只是範例參考,要照抄要確定名稱有沒有用對...,不然直接用"profile 1" "profile 2"就好...

      刪除
    2. 喔 原來UHD和normal是自己改的

      刪除
  24. 請問一下我打開OSD一直找不到movie frame interval 數值

    回覆刪除
  25. 請教一下,如果我只想分成 UHD FHD 60fps、FHD、HD、SD這四種,我是不是只要照抄您的所有判斷,然後依需求改分類名就好,還是有更簡單的分法呢?

    回覆刪除
    回覆
    1. 自己設很難嗎...

      刪除
    2. 可以,但是建議您自己寫,只分四種可以把規則寫的簡單一點

      刪除
    3. 匿名酸人誰都會,但還是希望樓上那位仁兄能給點有建設性的意見
      參考版大範例改成只丟四種類型

      if (srcWidth > 1920) and (srcHeight > 1080) "UHD FHD 60fps"
      else if ((srcWidth >= 1440) or (srcHeight >= 1080)) and (deintFps >=50) "UHD FHD 60fps"
      else if ((srcWidth >= 1440) or (srcHeight >= 1080)) and (deintFps >29) "SD"
      else if ((srcWidth >= 1440) or (srcHeight >= 1080)) "FHD"
      else if ((srcWidth >= 1280) or (srcHeight >= 720)) and (deintFps >=50) "FHD"
      else if ((srcWidth >= 1280) or (srcHeight >= 720)) and (deintFps >=29) "HD"
      else if ((srcWidth >= 1024) or (srcHeight >= 720)) and (srcBits >=10) "UHD FHD 60fps"
      else if (srcWidth >= 1024) or (srcHeight >= 720) "HD"
      else if (srcWidth >= 640) and (srcHeight >= 480) and (deintFps >50) "HD"
      else if ((srcWidth >= 1280) or (srcHeight >= 720)) and (deintFps >=29) "SD"
      else if ((srcWidth >= 1024) or (srcHeight >= 720)) and (srcBits >=10) "FHD"
      else if (srcWidth >= 1024) or (srcHeight >= 720) "HD"
      else if (srcWidth >= 640) and (srcHeight >= 480) and (deintFps >=50) "HD"
      else if (srcWidth >= 640) and (srcHeight >= 480) and (deintFps >=29) "SD"
      else if (srcWidth > 640) and (srcHeight > 480) "HD"
      else if (srcWidth <= 640) and (srcHeight <= 480) and (targetWidth >= 1680) and (deintFps >=29) "FHD"
      else if (srcWidth <= 480) and (srcHeight <= 360) "SD"
      else "SD"

      刪除
  26. 首先想让大佬帮我看看这个配置有没有什么问题。
    其次,我使用这个配置的时候,全屏(1920*1080)播放一个源文件为720*480、29.970FPS、Interlaced视频时,我的理解是会启用MidHighProfile,但是调用的却是MidHighProfile 60FPS,不知道为什么。

    if (Intel=true) && ((srcWidth <= 1920) && (srcHeight <= 1080))
    "MidHighProfile"

    else if ((srcWidth < 1280) || (srcHeight < 720)) && ((targetWidth >= 1366) && (targetHeight >= 768)) && (deintFps < 31)
    "MidHighProfile"

    else if ((srcWidth <= 1920) && (srcHeight <= 1080)) && (deintFps >= 31)
    "MidHighProfile 60FPS"

    else if ((srcWidth < 1280) || (srcHeight < 720)) && ((targetWidth >= 1366) && (targetHeight >= 768)) && (deintFps >= 31)
    "MidHighProfile 60FPS"

    else if ((srcWidth <= 1920)&&(srcHeight <= 1080) && (deintFps < 31)) || ((srcWidth< 1920) && (srcHeight <1080))
    "HighProfile"

    else if (srcWidth <= 3840) && (srcHeight <= 2160) && (deintFps < 31) && (srcBits <= 8)
    "MidProfile"

    else if (srcWidth <= 3840) && (srcHeight <= 2160) && (deintFps < 31) && (srcBits > 8)
    "MidLowProfile"

    else "LowProfile"

    回覆刪除
    回覆
    1. 整體來說沒什麼問題 (第四段感覺可刪,不過留著也無妨)

      "deintFps"這個值的意義為"去交錯後之幀率",29.970fps Interlaced的视频,去交錯處理後,除非刻意使用不做倍幀的去交錯方法,不然一般來說幀數會變成為59.94fps

      在你的例子中,這個視頻在非intel的顯卡上播放時將滿足第三段的敘述而套用"MidHighProfile 60FPS"

      刪除
  27. 暮星大大你好,设置太复杂了电脑小白搞不来,请问可以分享一下你的madVR settings.bin文档吗?谢谢

    回覆刪除
  28. 你好,madvr當前版本使用yCMS保存後自動下載會遭遇失敗,yCMS的作者網站已經無法下載了,請問您是否有yCMS的文檔備份,我找了很久也找不到了

    回覆刪除