Advertisement
enctac

「MPEG-2 VIDEO VFAPI Plug-In」 v0.7.12の色変換行列について気が付いた点の報告

Feb 2nd, 2019
183
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 変更履歴
  2. 2019/02/03 投稿。
  3. 2019/02/03 内容2はreadmeの記述の間違いであってソースは問題なさそうという点を追記。
  4. 2019/02/23 2019/02/17に内容をまとめなおしてメールで報告したのでその内容に更新。
  5.  
  6. ---------
  7.  
  8. 「MPEG-2 VIDEO VFAPI Plug-In」 v0.7.12の色変換行列について気が付いた点の報告
  9.  
  10. ■概要
  11.  
  12.  内容1.BT.709のパラメータが古いままになっているようです。
  13.  
  14.  内容2.readme.ja.txtに記載されている「YUV -> RGB 変換式」に、
  15.      以下2点の間違いがあるようです。(ソースの方はおそらく問題なし)
  16.       
  17.    2-1.伸張時のBの計算式だけ、Yの係数が76309ではなく76308になってしまっている。
  18.    2-2.FCCの計算式が、伸張・ストレートともに間違っている。
  19.  
  20.  
  21. ---------------------------------------------------------------
  22. ■内容1.BT.709のパラメータが古いままになっているようです。
  23. ---------------------------------------------------------------
  24.  
  25.  ●BT.709の変換係数定義は、BT.709-1(1993/11版)と、
  26.   BT.709-2(1995/10版)以降とでは値が異なります。
  27.  
  28.   〇BT.709-1 (旧パラメータ)
  29.     Y = 0.2125 * R + 0.7154 * G + 0.0721 * B
  30.  
  31.   ○BT.709-2~ (新パラメータ)
  32.     Y = 0.2126 * R + 0.7152 * G + 0.0722 * B
  33.  
  34.  ●readme.ja.txtの【謝辞】には「ITU-R BT.709-5」も挙げられているようです。
  35.  
  36.  ●H.262は、readme.ja.txtにあるH.262(2000/02版)までは旧パラメータを採用していましたが、
  37.     H.262 (2000) Amendment 2 (2007/01)
  38.     H.262 (2000) Amendment 4 (2012/02)
  39.   において、新パラメータへの置き換えがなされています。
  40.   最新のH.262(2012/02版)でもそうなっているはずですが、そちらは有料なので未確認です。
  41.  
  42.  ●readme.ja.txtにあるARIB STD-B32 v1.2(平成14年1月24日)は確認できませんでした。
  43.   (日付を考えるとBT.709は新パラメータになっているが、H.262は旧パラメータのままなので
  44.    おそらく旧パラメータが記載されていたと推測。)
  45.   なお、手元にあったARIB STD-B32 v3.7(平成28年7月6日)では
  46.   BT.709-5準拠ということで、新パラメータが記載されているようです。
  47.  
  48.  ●「MPEG-2 VIDEO VFAPI Plug-In」 v0.7.12 のreadme.ja.txtの変換式や
  49.   sequence_header.cを見ると、採用しているのは旧パラメータのようです。
  50.  
  51.    旧パラメータのYCbCr->RGB変換式
  52.     R = Y + 1.575 * V
  53.     G = Y - 0.187033 * U - 0.467833 * V
  54.     B = Y + 1.8558 * U
  55.  
  56.             ↓
  57.  
  58.    「MPEG-2 VIDEO VFAPI Plug-In」v0.7.12での採用式 (readme.ja.txtより)
  59.  
  60.    matrix_coefficient=1 - ITU-R BT.709(伸張)
  61.     R = (76309 * (Y-16) + 117504 * (V-128)) / 65536
  62.     G = (76309 * (Y-16) - 13954 * (U-128) - 34903 * (V-128)) / 65536
  63.     B = (76308 * (Y-16) + 138453 * (U-128) ) / 65536
  64.  
  65.    matrix_coefficient=1 - ITU-R BT.709(ストレート)
  66.     R = (65536 * Y + 103219 * (V-128)) / 65536
  67.     G = (65536 * Y - 12257 * (U-128) - 30659 * (V-128)) / 65536
  68.     B = (65536 * Y + 121621 * (U-128) ) / 65536
  69.  
  70.  
  71.  ●新パラメータに変える場合は、以下のような感じになると思われます。
  72.   (丸め方などに違いがあるかもしれませんので検算願います)
  73.  
  74.    新パラメータのYCbCr->RGB変換式
  75.     R = Y + 1.5748 * V
  76.     G = Y - 0.187324 * U - 0.468124 * V
  77.     B = Y + 1.8556 * U
  78.  
  79.             ↓
  80.  
  81.    matrix_coefficient=1 - ITU-R BT.709(伸張)
  82.     R = (76309 * (Y-16) + 117489 * (V-128)) / 65536
  83.     G = (76309 * (Y-16) - 13975 * (U-128) - 34925 * (V-128)) / 65536
  84.     B = (76309 * (Y-16) + 138438 * (U-128) ) / 65536
  85.  
  86.    matrix_coefficient=1 - ITU-R BT.709(ストレート)
  87.     R = (65536 * Y + 103206 * (V-128)) / 65536
  88.     G = (65536 * Y - 12276 * (U-128) - 30678 * (V-128)) / 65536
  89.     B = (65536 * Y + 121608 * (U-128) ) / 65536
  90.  
  91.  
  92.  ●BT.709を新パラメータに変える場合、「BT.709 to BT.601」など他マトリクスとの
  93.   相互変換係数(sequence_header.cのYUY2_CONVERSION_PARAMETER table[])にも
  94.   影響が出ると思われます。
  95.  
  96.  
  97. ---------------------------------------------------------------
  98. ■内容2.readme.ja.txtに記載されている「YUV -> RGB 変換式」に、
  99.      2点間違いがあるようです。(ソースの方はおそらく問題なし)
  100. ---------------------------------------------------------------
  101.  
  102. ●2-1.伸張時のBの計算式だけ、Yの係数が76309ではなく76308になってしまっている。
  103.  
  104.  〇例:
  105.   MPEG-1 の場合(伸張)
  106.    R = (76309 * (Y-16) + 104597 * (V-128)) / 65536
  107.    G = (76309 * (Y-16) - 25675 * (U-128) - 53279 * (V-128)) / 65536
  108.    B = (76308 * (Y-16) + 132201 * (U-128) ) / 65536
  109.  
  110. ●2-2.FCCの計算式の記述が、伸張・ストレートともに間違っている。
  111.  
  112.  〇ほぼBT.601のままの記述となっている。(一部のみ書き換え)
  113.  
  114.  〇sequence_header.cには正しい値が格納されている模様。
  115.  
  116.  〇sequence_header.cの内容を考慮すると、正しくは以下のようになるかと思います。
  117.  
  118.    matrix_coefficient=4 - FCC(伸張)
  119.     R = (76309 * (Y-16) + 104448 * (V-128)) / 65536
  120.     G = (76309 * (Y-16) - 24759 * (U-128) - 53109 * (V-128)) / 65536
  121.     B = (76309 * (Y-16) + 132798 * (U-128) ) / 65536
  122.  
  123.    matrix_coefficient=4 - FCC(ストレート)
  124.     R = (65536 * Y + 91750 * (V-128)) / 65536
  125.     G = (65536 * Y - 21749 * (U-128) - 46652 * (V-128)) / 65536
  126.     B = (65536 * Y + 116654 * (U-128) ) / 65536
  127.  
  128.  
  129. ●2-1、2-2を修正した場合の「YUV -> RGB 変換式」の全体を以下に貼っておきます。
  130.  BT.709については旧パラメータのままとしておりますので、
  131.  もし新パラメータに変える場合は、そちらに張り替えてください。
  132.  
  133. ---
  134.  
  135.  ・YUV -> RGB 変換式
  136.  
  137.   以下の変換式を使用してます。おかしな点があったら指摘してください。
  138.  
  139.   MPEG-1 の場合(伸張)
  140.    R = (76309 * (Y-16) + 104597 * (V-128)) / 65536
  141.    G = (76309 * (Y-16) - 25675 * (U-128) - 53279 * (V-128)) / 65536
  142.    B = (76309 * (Y-16) + 132201 * (U-128) ) / 65536
  143.  
  144.   MPEG-1 の場合(ストレート)
  145.    R = (65536 * Y + 91881 * (V-128)) / 65536
  146.    G = (65536 * Y - 22553 * (U-128) - 46801 * (V-128)) / 65536
  147.    B = (65536 * Y + 116129 * (U-128) ) / 65536
  148.  
  149.   MPEG-2 sequence_display_extension ありの場合
  150.  
  151.    matrix_coefficient=1 - ITU-R BT.709(伸張)
  152.     R = (76309 * (Y-16) + 117504 * (V-128)) / 65536
  153.     G = (76309 * (Y-16) - 13954 * (U-128) - 34903 * (V-128)) / 65536
  154.     B = (76309 * (Y-16) + 138453 * (U-128) ) / 65536
  155.  
  156.    matrix_coefficient=1 - ITU-R BT.709(ストレート)
  157.     R = (65536 * Y + 103219 * (V-128)) / 65536
  158.     G = (65536 * Y - 12257 * (U-128) - 30659 * (V-128)) / 65536
  159.     B = (65536 * Y + 121621 * (U-128) ) / 65536
  160.  
  161.    matrix_coefficient=4 - FCC(伸張)
  162.     R = (76309 * (Y-16) + 104448 * (V-128)) / 65536
  163.     G = (76309 * (Y-16) - 24759 * (U-128) - 53109 * (V-128)) / 65536
  164.     B = (76309 * (Y-16) + 132798 * (U-128) ) / 65536
  165.  
  166.    matrix_coefficient=4 - FCC(ストレート)
  167.     R = (65536 * Y + 91750 * (V-128)) / 65536
  168.     G = (65536 * Y - 21749 * (U-128) - 46652 * (V-128)) / 65536
  169.     B = (65536 * Y + 116654 * (U-128) ) / 65536
  170.  
  171.    matrix_coefficient=5 ITU-R Rec. 470-2 System B, G
  172.     MPEG-1 の場合と同じ
  173.  
  174.    matrix_coefficient=6 SMPTE 170M
  175.     MPEG-1 の場合と同じ
  176.  
  177.    matrix_coefficient=7 - SMPTE 240M(伸張)
  178.     R = (76309 * (Y-16) + 117579 * (V-128)) / 65536
  179.     G = (76309 * (Y-16) - 16907 * (U-128) - 35559 * (V-128)) / 65536
  180.     B = (76309 * (Y-16) + 136230 * (U-128) ) / 65536
  181.  
  182.    matrix_coefficient=7 - SMPTE 240M(ストレート)
  183.     R = (65536 * Y + 103284 * (V-128)) / 65536
  184.     G = (65536 * Y - 14851 * (U-128) - 31235 * (V-128)) / 65536
  185.     B = (65536 * Y + 119668 * (U-128) ) / 65536
  186.  
  187. ---
Advertisement
RAW Paste Data Copied
Advertisement