MikuMikuDanceの背景AVI読み込みについて(関連:VFW入力とDirectShow入力)
2011/09/16追記
2011/2/25にコミットされたffdshow tryouts rev3765で「RGB24出力の削除」という仕様変更があり、
それ以降のバージョンでは「VFWの設定」を行なっただけでは背景AVIとして読み込めなくなってしまいました。
コメント欄に詳細や対応方法等を書いたのでご参照ください。
2011/12/06追記
2011/11/20にコミットされたffdshow tryouts rev4054で、RGB24出力が復活したので
元通り「VFWの設定」のVFWデコーダーを利用することが可能になりました。
2011/12/17追記
背景AVIに読み込むための条件に
「RGB24でデコードできること」
を明示的に追加。
ほとんどの場合問題ないが、上に書いたようにffdshow tryoutsのrev3765~rev4053の
VFWデコーダーを使ってデコードする場合はRGB24出力ができないため読み込めない。
rev4054以降の使用を推奨。
------------------------------------------------------------------------------
以前、某スレでMikuMikuDanceの背景AVI読み込みについて書いたことがあるのですが、
背景AVIの仕様について作者の樋口様がVFW APIを使っていると発言してらっしゃったようなので、
それを踏まえてまとめなおしてみました。
相変わらず無駄に長いですし、書き込んだ時の内容とあまり変わってませんが、
VFWであることが確定したのでそれを反映し、FLVExtractの例を追加しています。
あと、途中で映像が切れて真っ黒になってしまうケースについても追記しました。
VFW(Video for Windows)とDirectShowの話になりますので、関連する概念を把握しておけば、
NiVEやAviutlなどでのファイル読み込みにも役立つと思います。
●MikuMikuDanceの背景AVI読み込みで、
「Craving Explorerの"AVIで保存"で落としたAVIが読み込めない」
「FLVファイルからFLVExtractで取り出したAVIが読み込めない」
「読み込んだAVIの映像が途中で真っ黒になってしまう」
といったトラブルを聞くことがあります。
今回は、これらのトラブルの原因と対処方法についてまとめてみます。
●MMDでは背景AVIの読み込みに
「VFW(Video for Windows) API」
という仕組みを使っています。つまり、
「VFWでデコードできること」
という条件を満たすAVIファイルでないと、背景AVIとして読み込むことはできません。
この条件をもう少し細かく言うと、
1.対応するVFWコーデック(VCMコーデック)がインストールされていること
2.VFWが扱えるAVI 1.0コンテナのファイルであること
3.ファイルサイズは2GB以下であること(AVI 1.0の上限)
4.対応するコーデックがRGB24でデコードできるようになっていること
(MMDの背景AVI読み込みでは、デコード要求で明示的にRGB24を指定している模様)
ということになります。
●CravingExplorerで"AVIで保存"を行なった場合、保存されるAVIの映像は
「MS-MPEG4 v2」という映像コーデックで圧縮されています。
これはMicrosoftの純正コーデックなのですが、少なくとも最近のPC(というかWMP)では
このコーデックのデコーダは「VFWコーデック」としては提供されておらず、
「DirectShowフィルタ」としてのみ提供されています。
そのためデフォルトではVFWでのデコードができず、背景AVIへの読み込みに失敗してしまいます。
(WMPとかで再生できるのは、DirectShowでデコードして再生しているからですね。
WMP11を入れてるならMpeg4 Decoder DMOってのがDirectShowデコードに使われます。)
●つまり背景AVIとして使うためには、対応するVFWコーデックをインストールすればいいのですが、
コーデックを個別に入れるのはかなり面倒ですし、入手方法がややこしいものもあります。
そのため、簡単な解決策として、ffdshow tryoutsのVFW機能を利用するのがよいと思います。
ffdshowは、「K-Lite Codec Pack」「CCCP(Combined Community Codec Pack)」
「WECP(Windows Essentials Codec Pack)」などのコーデックパックにも含まれていますが、
もしかするとコーデックパックによってはVFW機能が利用できないかもしれません。
正直、個人的にはコーデックパックのインストールはオススメできないので、
まだ何も入れてない方は「ffdshow tryouts」を単品で入れておくとよいでしょう。
ただし、ffdshow tryoutsのrev3765~rev4053は、一時的にRGB24出力ができなくなっていたため、
背景AVIの読み込みには役に立ちません。 必ずrev4054以降を使うようにしましょう。
●例えばCraving Explorerの"AVIで保存"で落としたAVIを読み込みたい場合は、
まず「すべてのプログラム」のところから、ffdshowの「VFWの設定」を開きましょう。
(「ビデオデコーダーの設定」ではなく「VFWの設定」です。これら2つは設定画面が似ているので要注意。
「ビデオデコーダーの設定」はDirectShowの設定なので、背景AVIの読み込みでは意味がありません。)
コーデックパックを使っている人はコーデックパックのサブメニューになってるかも。
設定画面が開いたら、「Decoder」のタブを開きましょう。
右側に形式やデコーダーの一覧が出てくるはずです。ここで、「MS-MPEG4 v2」を有効にしてやります。
ぱっと見どれがそうなのかわかりにくいですが、
「MS-MPEG4 v2」コーデックを表すFOURCCは"MP42"になります。
"形式"が「MP42」になっている部分の"デコーダー"欄が「無効」になっていると思うので、
「無効」の部分をクリックし、「libavcodec」に変更しましょう。これでMP42のVFWデコードが有効になります。
この状態で「背景AVIの読み込み」を行なえば、問題なく読み込めるようになっているはずです。
●FLVファイルからFLVExtractでAVIを作成した場合、そのAVIのFOURCCは"VP6F"になっていると思います。
これも上と同様に、ffdshowの「VFWの設定」を開いて、"形式"が「VP6F」になっている部分の
"デコーダー"欄を「libavcodec」に変更することで、VFWでのデコードが可能になります。
FLVの種類によっては"FLV1"だったりすることもありますが、この場合は"形式"が「FLV1」のところを
「libavcodec」にしておけばVFWでのデコードが可能になります。
●AVIファイルには、大きくわけて
1.AVI 1.0コンテナのAVIファイル
2.AVI 2.0コンテナのAVIファイル
の2種類がありますが、背景AVIの読み込みはVFW APIを使っているため、基本的に
「2GB制限のあるAVI 1.0コンテナのAVIファイル」
しか読み込めません。
AVI 2.0でも、AVI 1.0とある程度の互換性があるので、一見普通に読みこめるように
見えることがありますが、互換性のない部分は読めません。
途中から真っ黒になったりするような場合は、コンテナがAVI 2.0になっていないか確認しましょう。
できればAVI 1.0のファイルに変換して使うとよいと思いますが、2GB制限などもありますので、
どうしてもAVI 2.0コンテナのファイルをそのまま扱いたい場合は、後述するAvisynthを利用するとよいでしょう。
●条件次第では、Avisynthというプログラムを利用することで、
VFWでは扱えないファイルを読み込めることがあります。
例えば、
「VFWコーデックはあるのだけどコンテナがAVI 2.0なので読み込めない」
という場合には、avsスクリプトでAVISource()を使ってAVIファイルを読み込み、
そのavsスクリプトファイルを背景AVIとしてMMDに読み込めばOKです。
Avisynthが備えているAVI 2.0読み込み機能を利用してVFWに渡すという方法ですね。
●また、CravingExplorerで落としたAVIのように、
「VFWではデコードできないけど、DirectShowでのデコードはできる」
というものであれば、avsスクリプトでDirectShowSource()を使ってAVIを読み込み、
そのavsスクリプトファイルを背景AVIとしてMMDに読み込めば、
ffdshow無しでもCravingExplorerのAVIを読み込めます。
AvisynthのDirectShowデコード機能を利用してVFWに渡すという方法ですね。
●なお、背景AVIとして使いたいAVIファイルの、
「映像コーデックのFOURCCは何なのか」
「コンテナはAVI 1.0なのかAVI 2.0なのか」
を調べるには、コーデックチェッカーと呼ばれるソフトを利用します。
個人的なオススメは、
「MMName2」
「真空波動研SuperLite」
の2つを連携させて使うことです。
MMName2のメニューで真空波動研との連携設定ができ、その後はAVIファイルを
MMName2にD&Dするだけで、両方のソフトでの解析結果を一度に見ることができます。
真空波動研だけだとFOURCCまでわからないこともありますので便利です。
●ちなみに、これはVFWとDirectShowの仕組みの基本的な話ですので、
「NiVEでVFWInputやDSVideoInputを使う場合」
「AviutlでAVI File ReaderやDirectShow File Readerを使う場合」
にも同じような概念が適用されます。
VFWコーデックがあるならVFW経由で読み込めますし、
DirectShowフィルタしかないならDirectShow経由で読み込むことになります。
(Aviutlの場合はプラグイン優先度の設定なども影響しますが。)
===============
まとめ
===============
■MMDの背景AVI読み込みについてのまとめ
●AVIファイルを、MMDの背景AVIとして読み込むには、以下の条件を満たす必要があります。
1.対応するVFWコーデック(VCMコーデック)がインストールされていること
2.VFWが扱えるAVI 1.0コンテナのファイルであること(AVI 2.0は駄目)
3.ファイルサイズは2GB以下であること(AVI 1.0の上限)
4.対応するVFWコーデックがRGB24でデコードできること
(ffdshow tryoutsのrev3765~rev4053は使わず、rev4054以降を使用すること)
●まずは「MMName2」「真空波動研SuperLite」などを使って、
背景AVIとして使いたいAVIファイルのコンテナや映像コーデックの種類を調べましょう。
●調べた結果に応じて、以下のいずれかの方法で対処してみましょう。
方法1.対応するVFWコーデック(VCMコーデック)を入れる
方法2.ffdshow tryoutsをインストールし、「VFWの設定」で対応するVFWコーデックを有効にする
方法3.AvisynthのAVISource()やDirectShowSource()を使ってavsファイルを作り、
そのavsファイルを背景AVIとして読み込む
方法4.AviutlやVirtualDubModなどを使い、読めないAVIを別のコーデックで再エンコードして使う
| 固定リンク
この記事へのコメントは終了しました。
コメント
最近、MMDを触り始めたばかりのものです。
AVIファイルのコーデック等分かりやすくて、大変助かりました。
ありがとうございます
投稿: | 2010年2月11日 (木) 13時59分
背景にAVIを表示できました。
ありがとうございます。
投稿: | 2010年4月11日 (日) 20時04分
「Craving Explorerの"AVIで保存"で落としたAVIが読み込めない」
ffdshowインストール 「VFWの設定」MP42「libavcodec」ok
AVI 1.0 ファイルサイズ98.0 MB
・・・読み込めません;;何故ですか・・・orz
投稿: | 2011年5月12日 (木) 20時58分
背景、読み込めません。
ffdshow tryoutsをインストールし、コーデックを有効にしようとしたところすでに有効。
CravingExplorerでAVIで保存を行ない、 映像コーデックのFOURCCはMP42/MP42とのこと。
コンテナはAVI 1.0を確認。26.8 MB。
AvisynthをダウンロードしAVISourceでやろうとしましたがやり方がなにをみてもわかりませんでした。
PCにはあまり詳しくないので、手詰まり状態です。かれこれ何時間も格闘してるので、ご教授きただけるとありがたいです。
投稿: | 2011年5月24日 (火) 01時43分
ブログ放置しており質問に気づかずすみませんでした。
4ヶ月もたってしまいましたが回答いたします。
■ffdshow tryoutsの「VFWの設定」の「MP42」にしたのにCravingExplorerのAVI 1.0が背景AVIに読み込めない件
こちらでも再現したので調査しました。その結果、
「2011/2/25にコミットされたffdshow tryoutsのrev3765で
"いくつかの出力色空間の削除"
という仕様変更があり、RGB24での出力ができなくなったため、それ以降のバージョンを使って
VFWデコードの設定をしても、それだけでは背景AVIとして読み込むことができなくなった。」
ということが判明しました。
MMDの背景AVIの読み込みではRGB24でのデコードを要求するらしく、それが原因で読み込みに失敗するようです。
(rev3765以前のバージョンでもffdshow tryoutsの出力設定でRGB24をオフにすると読み込めなくなりますし。)
これはCravingExplorerのMP42に限らず、上に書いたFLV ExtractのVP6Fなども含め、
ffdshow tryoutsのVFWでデコードするもの全てに当てはまります。
なお、NiVEのVFWInputはRGB32でデコードをするので大丈夫ですし、
AviUtlの「AVI/AVI2 File Reader」でもYUY2やRGB32で読み込むので問題ありません。
ただしAviUtlの「AVI File Reader(Video For Windows)」では背景AVIと同様にRGB24でのデコードを求めるようで、
これの優先度が「AVI/AVI2 File Reader」より上になっていると読み込めません。
さて、解決策ですが、
・記事最後にある方法3(Avisynth使用)を使う
・記事最後にある方法4(別のコーデックで再エンコード)を使う
・rev3765より前のffdshow tryoutsを使う
・MMDの背景AVI読み込み機能がRGB32などでデコードできるようになるのを待つ?
のいずれかになると思います。
ffdshow tryoutsはバグ修正や機能追加などで更新を続けているので、個人的には方法3か方法4をお勧めします。
どの方法を使うにせよ、デコードはffdshow tryoutsのVFWを利用するといいと思うので、
「VFWの設定」の「MP42」は「libavcodec」にしておいてください。
■AvisynthのAVISource()を利用して背景AVIを読み込む方法の詳細
1.ffdshow tryoutsの「VFWの設定」で「MP42」を「libavcodec」にし、MP42をデコードできるようにしておきます。
2.Avisynthをインストールします。(参考:http://www.avisynth.info)
3.メモ帳で
AVISource("D:\Video\Craving.avi")
ConvertToRGB24()
という2行を書いたテキストファイルを作成し、拡張子を「.avs」にして保存します。
例えば「test.avs」という名前で保存します。
AVISource()の引数には、読み込みたいAVIファイルをフルパスで指定します。
(ffdshowを利用したくない場合はAVISource()ではなくDirectShowSource()を使ってもよいです。)
4.MMDを起動し、「背景AVIの読み込み」を実行します。
デフォルトではAVIファイルのみしか選択できませんが、ファイル選択ダイアログで
「ファイルの種類」のところを「All Files(*.*)」にすると、avsファイルも表示されますので、
3で保存したavsファイル(ここではtest.avs)を選択します。
5.これで、目的のAVIの映像が背景AVIとして読み込まれるはずです。
Avisynthの導入などについては、以前作成した動画でも少し解説していますので、こちらも参考になるかもしれません。
動画の最後に解説しているAvsPなども利用すると便利です。
【MMDとか色々】AvisynthのMVTools(MFlowBlur)でお手軽綺麗なモーションブラー
http://www.nicovideo.jp/watch/sm7559724
投稿: 金の髭 | 2011年9月16日 (金) 03時14分
ffdshow tryoutsは64bit版だと駄目かもしれません。
私は32bit版にしたら読み込めました。
同じ所で詰まってる方居たら、参考までに。
投稿: | 2012年4月11日 (水) 07時43分
↑64bitで駄目な人はMMM使ったほうが手っ取り早いかも
投稿: y | 2013年1月 6日 (日) 11時48分
一応、ちゃんと使えているようなので、
記事の方法でうまく行かない人のための代替手段として宣伝を
mp4をMMDの背景aviにそのまま使うためのバッチ
http://bowlroll.net/up/dl10144
mp4をMMD64bit版の背景aviに使うためのバッチ
http://bowlroll.net/up/dl10199
mp4をUt Videoなaviに変換するバッチ
http://bowlroll.net/up/dl10226
投稿: こ~りん | 2013年4月23日 (火) 21時32分
Craving ExploreでDLしたのが読み込めなかったのですが、
aviutlにL-SMASH Works を落として、AVIを出力しなおしたら解決しました。
nicovideo.jp/watch/sm24806762にL-SMASH Worksの設定とか詳しいです。
投稿: | 2015年8月25日 (火) 15時11分
MMD動画を編集する時は大きな役割を果たすコツだと思います。
AVI動画のサイズは余りにも大きいですので、編集した後の出力も大変なんです。
投稿: AVI 動画 編集 | 2019年5月19日 (日) 23時28分
Avisynth を経由してMMD動画に読み込ませることができますね。勉強になりました。
投稿: avi動画 | 2020年8月20日 (木) 12時57分
After looking into a number of the blog articles
on your site, I seriously appreciate your technique
of writing a blog. I book-marked it to my bookmark website list and will be checking back soon. Take
a look at my website as well and let me know what you think.
投稿: https://diploma.questionedu.com | 2022年4月 9日 (土) 15時02分
Thanks for sharing your thoughts on website.
Regards
投稿: link | 2022年4月11日 (月) 19時41分
I every time used to study paragraph in news papers but now as I am
a user of net so from now I am using net for posts, thanks to web.
投稿: Eduardo | 2022年4月11日 (月) 19時41分
I like the valuable information you provide in your articles.
I'll bookmark your weblog and take a look at again right
here frequently. I am reasonably certain I'll be told a lot of new stuff right right
here! Good luck for the following!
投稿: Jenni | 2022年4月12日 (火) 07時56分