一部のYUVなaviを、MikuMikuDanceが背景AVIとして正常に読み込めない問題

環境によっては、Ut VideoのYUV420やYUV422などが、MikuMikuDanceの背景AVIとして、きちんと読み込めず、黒一色になる問題について 確実なのは、RGBなaviにすること。動画編集ソフトで、Ut VideoのRGBなaviにとして書き出すとか。 もしくは、以下のツールを使ってみるのも手。 mp4をUt Videoなaviに変換するバッチ (2 GB越えのaviを読み込ませる方法の説明付) https://bowlroll.net/file/10226 続きを読む
6
こ~りん @kourin

@Higuchi_U @umezawa_takeshi ともかく、確実に読めるRGBを読ませる、ということは了解です。読み込みについての技術的な話は梅澤さんにお任せします

2014-10-26 22:11:49

まとめ。問題解決

映像可逆圧縮総合スレ Part3

http://peace.2ch.net/test/read.cgi/avi/1247236230/

820 名前:名無しさん@編集中[sage] 投稿日:2014/10/26(日) 22:46:45.99 ID:gMc7tIdI
http://peace.2ch.net/test/read.cgi/avi/1247236230/820
>>817-819
>>814-816です。ありがとうございます。色々試していてレスが遅れてしまいました。すみません。
ようやく整理できた気がしますが、まず、こちらで試してわかったことをいくつか。

●Xvid-1.3.3-20140407を入れていると、YV12のデコードが阻害されてしまう。
  (他のバージョンは確認していません)

>>817さんは
  >ff_vfwの設定をすれば「無圧縮のyv12」ならMMDでも再生できるようになった
とありましたが、うちではffdshowの「VFWの設定→Decoder→コーデック→Raw video」で
「YV12」「全YUV形式」「全サポート形式」を選んでも、YV12無圧縮のAVIをMMDの背景AVIに
正常に読み込めず、真っ黒になってしまっていました。
(なお、YV12無圧縮のAVIは、AvsPModでConvertToYV12()をしたavsを読み込み、
 「Tools→Script encoder(VFW)」で、「再圧縮なし」で出力したものです。)

この違いが不可解で色々試していたところ、VirtualDubModでYV12のAVIを開いて「File information」を見ると、
>>814にも書いた
  ttp://freesoft.tvbok.com/movie_encode/virtualdubmod/yv12avs.html
の記事のスクショにもあるように、「Xvid MPEG-4 Codec」がデコーダとして選ばれており、シークすると
  Error decompressing video frame 1: The source image format is not acceptable. (error code -2)
のようにデコードエラーを起こしていました。

そこで、Xvid 1.3.3をアンインストールしてみたところ、ffdshowのVFW設定が効くようになり、
「Raw video」で「YV12」「全YUV型」「全サポート形式」を選んでいれば、VirtualDubModでも
MMDの背景AVI読み込みでも、YV12無圧縮のAVIが正常に読み込めるようになりました。

つまり、Xvid 1.3.3が中途半端にしゃしゃりでてYV12をデコードしようとして失敗していたというわけですね・・・。

また、Xvid 1.3.3をアンインストールしたことでffdshowのYV12デコードが有効になったため、
ULY0、ULH0のAVIも、ffdshowをちゃんと設定すればMMDの背景AVIとして問題なく読み込めるようになりました。

822 名前:名無しさん@編集中[sage] 投稿日:2014/10/26(日) 22:58:16.13 ID:gMc7tIdI
http://peace.2ch.net/test/read.cgi/avi/1247236230/822
MMDの背景AVIでULH2/ULY0/ULH0が真っ黒になることがある件の推測。

 1.MMDの背景AVI読み込みはVFWで、正常に扱えるのはRGB24のみ。

 2.普通はコーデックとネゴシエーションを行い、RGB24しか受け入れられないなら、
   コーデックからRGB24でデータをもらえばいい。
   しかし、MMDの背景AVI読み込みはこの部分の処理に問題があり、
   コーデック側が提示した形式を無条件で受け入れてしまう(?)。

 3.UtVideoの場合、入出力フォーマットはREADME参照。
     ttp://umezawa.dyndns.info/archive/utvideo/utvideo-14.2.1-readme.ja.html
   ULY0はYUY2、ULH2はHDYC、ULY0/ULH0はYV12が最も優先度が高い。
   ネゴシエーションに問題のあるMMDの背景AVI読み込みでは、
   UtVideoはこれらのフォーマットで出力を行おうとする(?)。

 4.MMD側では、YUY2やHDYC、YV12はそのままでは読み込めない。
   だがYUY2やHDYC、YV12をRGB24にデコードできるVCMコーデックが入っていれば、
   それらがRGB24に変換し、正常に読み込むことができる(ようだ)。
   入っていなかった場合は正常に読み込めず、真っ黒になってしまう。

 5.YUY2はWindows標準のmsyuv.dllでサポートされているため、ULY2は問題ない。
   YV12やHDYCはWindows標準ではサポートされない(※注1)ため、対応するVCMコーデックが必要。
   YV12はffdshow(※注2)、HDYCはBlackmagic DesktopVideo。
   これらを入れれば、ULY0/ULH0/ULH2もMMDの背景AVIとして正常に読み込めるようになる。
   (ただ、MMDの背景AVI読み込みのためだけにこれらを入れる必要は無い。別のコーデックを使えばよいだけ。)

     ※注1: Windows8.1でサポートされていないのは確認。その他は不明。
     ※注2: ffdshowの場合「VFWの設定→Decoder→コーデック→Raw video」で「YV12」か「全YUV形式」「全サポート形式」を選択。
          DivXもYV12デコーダーを持つが、既に更新が停止されている上、32bit版しか無いのでx64版MMDでは役に立たない。
          Xvidは、Xvid-1.3.3-20140407を入れると正常にYV12デコードができず、ffdshowの邪魔をするだけとなるので使えない。

821 名前:名無しさん@編集中[sage] 投稿日:2014/10/26(日) 22:49:21.75 ID:gMc7tIdI
http://peace.2ch.net/test/read.cgi/avi/1247236230/821
 
●DivXにも一応YV12 Decoderがついている(今更DivXを使う必要もないのであまり推奨しない)

DivXは10.2からDivXコーデックパックを外してしまいましたが、こちらの記事で最終版が配布されています。
  DivX 10.2: Removing Codec Pack | DivX Blog
  http://blog.divx.com/2014/04/23/codec-pack/
末尾にある2014/8/18追記のところの「~download it 【here】」のところです。
bit.lyからの警告が出ますが、それを無視すればダウンロード可能。
インストール時にノートン先生が反応しますが、これは「RegClean Pro」という迷惑ソフトを入れようとするため。
途中で拒否できるので絶対に拒否する必要があります。うっかり入れないように。
インストールされるDivXコーデックは、
  DivX 6.9.2 Codec 06_09_02_00026_VfwCodec
  ビルト オン Feb 19 2010 @ 11:26:13
となっています。これには
  DivX 6.9.2 YV12 Decoder
が入っていますので、これでもYV12デコードができるようになります。(ffdshowより優先して使われます)
ただし32bit版だけですので、64bitアプリでのYV12デコードはできません。

●VirtualDubとVirtuaDubMod

 VirtalDubでは、「Internal DIB decoder」が内蔵されており、
 YV12などの各種非圧縮フォーマットを自前でデコードできるようになっています。
 入出力色空間なども>>818さんが言われているように色々設定でき、
 VCMのYV12デコーダーなどは必要としません。

 VirtualDubModの方は、入出力がRGBに限られているようです。
 そのため、YV12などを読み込むためには、別途対応するVCMのデコーダーが必要になります。
 試しにYV12無圧縮のAVIファイルを読み込ませてみると、YV12デコーダーの有無を判定できます。
 エラーが出ればYV12デコーダーが入っていないということ。
 エラーが出なかった場合は、「File→File Information」を開いて「Decompressor」を見れば、
 使われているYV12デコーダーがわかります。(ただしVirtualDubModは32bit版しかありません)

823 名前:名無しさん@編集中[sage] 投稿日:2014/10/26(日) 23:52:32.20 ID:gMc7tIdI
http://peace.2ch.net/test/read.cgi/avi/1247236230/823
追記:

Lagarithでも、YV12で圧縮したならYV12で出力しようとするので、>>822のULY0/ULH0と同様に
MMDの背景AVI読み込みでは、YV12デコーダーが入っていないと真っ黒になります。
Lagarithの設定の「Always Suggest RGB for Output」にチェックを入れておくと、
YV12で出力するのではなくRGBで出力するようになるので正常に読み込めるようです。

余談ですが、MMDv9.24のx64版でLagarithのYUY2で圧縮したAVIを読ませると、
lagarith.dllでエラーが起きてMMDごと強制終了となります。(うちの環境だけかもしれませんが)

824 名前:名無しさん@編集中[sage] 投稿日:2014/10/26(日) 23:57:19.22 ID:gMc7tIdI
http://peace.2ch.net/test/read.cgi/avi/1247236230/824
更に余談ですが、テストの過程で、
  「無圧縮のYUV系AVIをMediaFoundationで再生すると、解像度や色がおかしく見える」
ということに気づきました。
Windows8.1環境で、YUY2やYV12無圧縮のAVIをWindowsMediaPlayerで再生するか、
QonohaでMediaFoundationを優先する設定にして再生すると、以下の画像のようになってしまいます。
  ttp://2sen.dip.jp/cgi-bin/upgun/up1/source/up0838.png
なおtopoEditは以下のようになっています。
  http://2sen.dip.jp/cgi-bin/upgun/up1/source/up0839.jpg

何が起きているかはよくわからないのですが、豆知識的な情報として貼っておきます。

825 名前:名無しさん@編集中[sage] 投稿日:2014/10/26(日) 23:59:44.54 ID:gMc7tIdI
http://peace.2ch.net/test/read.cgi/avi/1247236230/825
よく見ると色は特に問題ないのかな・・・

826 名前:名無しさん@編集中[sage] 投稿日:2014/10/27(月) 01:58:33.77 ID:MXSxCZf3
http://peace.2ch.net/test/read.cgi/avi/1247236230/826
>>815で書いた

 >2.背景AVI読み込みでMMDが強制終了することもあったのでイベントビューアを見てみると、
 >  DxtoryCodec.dllで障害が発生していた。やむをえずDxtoryをアンインストール。
 >  (入れていたのはDxtory 2.0.128か126。)

についても、条件と原因を整理しました。発生するのは
  ・Dxtory(2.0.128で確認)をインストールしており、
  ・x64のYV12やHDYCのデコーダが存在しない場合に
  ・MMDのx64版で
  ・ULY0/ULH0/ULH2やLagarithのYV12など、YV12やHDYCを優先するコーデックのAVIを読ませた場合
です。

他にYV12やHDYCのデコーダーが無い場合に、なぜかDxtory Video Decoderが、
それらのデコードを行おうとして失敗するのが原因のようです。
試しにVirtualDubModでYV12のAVIを読ませてみると、DecompressorがDxtory Video Decoderになっており、
  VideoSourceAVI error: An unknown error occurred (may be corrupt data). (error code -100)
というデコードエラーが発生しています。
x86版MMDであれば真っ黒になるだけで済みますが、x64版MMDだと強制終了につながるようです。
なお、ffdshow(x64版)のVFW設定でYV12デコードを有効にしておけば、そちらが優先されるため、
x64版MMDでのDxtoryCodec.dllによる強制終了は発生しなくなります。
(ULH2はHDYCなのでBlackmagicDesign DesktopVideoを入れないと駄目ですが)

なおffdshow rev4533のx64版では、VFWコーデック(要注意警告あり)を有効にしてインストールしても
「VFWの設定」のショートカットが作られず、そのままではVFWの設定が開けないようです。
ただし、VirtualDubのx64版があれば、「Video→Compression→ffdshow Video Codec→Configure」で
x64版ffdshowのVFWの設定画面を開くことが可能です。
ただ、これでYV12デコードを有効にしても、x64版MMDではULY0/ULH0やLagarithYV12が正常に読めるようになるだけで、
YV12無圧縮のAVIは「AVIファイルを読み込めません」となるようです。
x86版の場合はYV12無圧縮のAVIも正常に読み込めるようになるのですが、x64版だとなぜか駄目です。

827 名前:名無しさん@編集中[sage] 投稿日:2014/10/27(月) 02:47:03.25 ID:MXSxCZf3
http://peace.2ch.net/test/read.cgi/avi/1247236230/827
なお、>>822のMMDの背景AVI問題についてですが、読めない理由が気になっているだけであり、
基本的には「MMDが普通に読めるコーデックで背景AVIを作って読ませればいいだけ」だとは思っています。

ただ、UtVideoにしてもLagarithにしても、RGBでの出力機能はもっているので、
MMD側の背景AVI読み込み処理を改善すれば、YV12やHDYCのデコーダーが無くても
普通に読めるようになるのではないかという推測はしています。
ただ、実装や仕組みの詳細は私にはわかりませんし、改善の余地がありそうというだけです。
VFWのプログラミング知識があればよかったのですが・・・orz

ここで書くのもあれですが、本件についてツイッターでご協力いただいた方も、ありがとうございました。
長々とすみません。