Skip to content

Instantly share code, notes, and snippets.

@elvl
Created January 8, 2014 18:18
Show Gist options
  • Save elvl/8321597 to your computer and use it in GitHub Desktop.
Save elvl/8321597 to your computer and use it in GitHub Desktop.
Avisynth めも
ConvertToYV12(matrix="PC.601")
AvsP での見た目は暗くなり 37 だが、内部的には RGB と同じ 48 で保持されている
37
|<----- Rec ------>|
|<------- PC --------->|
48
(表示上 TV スケールとみなして伸長されてる?)
coring = false で内部数値にマッチする
PC.601 で RGB に戻すと大体元通りになる(素通し)
PC601 で YUV にしたのを Rec601 で RGB に戻してしまうと暗くなり 37 (-11)
37
|<----- Rec ------>|
|<------- PC --------->|
37
----------------------------------------------------------------------------------
ConvertToYV12(matrix="Rec601")
見た目は RGB と同じだが、内部的には 57 で保持されている
57
|<----- Rec ------>|
|<------- PC --------->|
48
coring = false では内部数値にマッチしない
Rec601 で RGB に戻すと大体元通りになる(伸長)
Rec601 で YUV にしたのを PC601 で RGB に戻してしまうと明るくなり 57 (+9)
59
|<----- Rec ------>|
|<------- PC --------->|
57
----------------------------------------------------------------------------------
YUV 間の変換
問題ありそうなのは PC スケールの YUV を作りたい場合
RGB → YUV
常に PC を指定でおk
YUV(PC) → YUV(PC)
常に PC を指定でおk
YUV(TV) → YUV(PC)
もとが YUV のときの matrix オプションはもとのスケールをどちらとみなすかっぽいので
これはいったいどうすればいいのかわからない
そもそもできるのか???
rgb.ConvertToYV12(matrix="Rec601").ConvertToYV24(matrix="PC.601") してみた
→ TV スケールになった、つまり何も行われてない
----------------------------------------------------------------------------------
まとめ
default matrix=Rec matrix=PC
RGB -> YUV(TV) 圧縮○ 圧縮○ そのまま×
RGB -> YUV(PC) 圧縮× 圧縮× そのまま○
YUV(TV) -> RGB 伸長○ 伸長○ そのまま×
YUV(PC) -> RGB 伸長× 伸長× そのまま○
YUV(TV) -> YUV(TV) --- なにもしない ---
YUV(TV) -> YUV(PC) --- なにもしない --- ← こまる
YUV(PC) -> YUV(PC) --- なにもしない --- ← 結果的におk
YUV(PC) -> YUV(TV) --- なにもしない --- ← こまる
matrix オプションは元や変換先のスケールを指示するのではなくて
YUV <-> RGB の変換をしなければならなときに、Rec=圧縮伸長する PC=素通し
自動制御みたいなもんはない
YUV(TV) -> YUV(PC) や YUV(PC) -> YUV(TV) するには
ColorYUV(levels="TV->PC")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment