« ZeroWatchプレーヤーの各モードでの表示領域の広さメモ | トップページ | Google Chrome 21 でのFlashPlayerトラブルの原因と解決方法 »

2012年6月14日 (木)

BandicamでMotionJPEGやMP2を使うとAviUtl等での編集で困ることがある件。

2012/8/12追記
 ・MP2音声の相性が悪いのはx264guiExだけでなく、標準の「WAV出力」を除く
  出力プラグイン全般だったのでその旨を追記。こちらの検証不足でした。
  詳細はこの記事のコメント欄を参照してください。
  rigaya様、調査ありがとうございました。失礼いたしました。

2012/7/10追記
 ・MP2音声が拡張編集だけでなくx264guiExとの相性も悪いようなので追記。


Bandicamという動画キャプチャソフトがあります。
利用制限のある無料版と、制限を無くした有料版があり、
シンプルで初心者向けということもあり、ゲームキャプチャ等で使っている人もいるようです。
記事作成時点での最新バージョンは、「1.8.0.230」です。

ただ、録画後のファイルをAviUtl等の動画編集ソフトで編集する場合、
いくつか注意すべき点があるようなので、それを書いてみようと思います。

この記事で扱う主な注意点は、

  1.映像コーデックに「Motion JPEG」を選択した場合、
    編集ソフト(AviUtl等)に読み込んだ時に色がおかしくなることがある。
    (コントラストが低く、やや暗い映像になる感じ)

  2.音声コーデックに「MPEG-1 L2」を選択した場合、
    AviUtlの「拡張編集」「拡張x264(GUI)Ex」といったプラグインとの相性がよくない。

の2点です。
詳細とその他のメモを以下に示します。

■1.映像コーデックが「Motion JPEG」だと編集時に色がおかしくなることがある

 ●発生する現象

   例えば、下のようなカラーサンプル画像をデスクトップに表示し、
   Bandicamで映像コーデックを「Motion JPEG」にしてキャプチャしたとします。

Colorbar640x360

   出来上がったAVIファイルをWindows Media Player等で再生すると以下の画像のようになります。
   これは正常な色でキャプチャされているように見えます。

Bandiwmp

   次に、出来上がったAVIファイルをAviUtl本体に読み込んでみます。
   入力プラグインの設定等にもよるのですが、多くの方が以下のような見え方になるはずです。
   各画像はクリックすると別窓で表示されますので、タブ切り替え等で比べてみてください。
   元の画像と比較してみると、コントラストが低く、暗い感じになっているのがわかります。
   黒(0,0,0)が(16,16,16)になり、白(255,255,255)が(235,235,235)になってしまっています。

Bandiaviutlload

 ●対処方法

   方法1.Bandicamで映像コーデックに「Motion JPEG」を使うのをやめる。
       そもそもデフォルトはMPEG-1になっているし、Xvidも使えるので、
       あえてMotion JPEGを使う必要はあんまりない。

   方法2.AVIファイルを、AviUtl本体ではなく拡張編集プラグインのタイムラインに読み込み、
       動画オブジェクトの設定画面で「アルファチャンネルを読み込む」にチェックを入れる。
       (こうするとRGB24読み込みではなくRGB32読み込みになる。詳細は下記参照)

   他にも方法はありますが、簡単なのはこのあたりかなと。

 ●問題が発生する原因

   問題が発生する流れは以下のとおりです。

     1.Motion JPEGはフルレンジでエンコードするのが一般的らしいが、
       BandicamのMotion JPEGは、フルレンジではなく圧縮レンジ(TVレンジ)で
       エンコードしている。
       (正式な仕様をよく知らないので、ここでは"一般的"という言葉を使いました)

     2.Bandicamをインストールすると、「Bandi MJPEG Video Decoder」という
       VCMデコーダーがインストールされ、「AVI/AVI2 File Reader」で
       読み込むようになっている場合は、このデコーダーによってMotion JPEGの
       デコードが行われるのだが、このデコーダーは、
         ◎RGB24にデコードする時はフルレンジとしてデコードする
         ◎RGB32でデコードする時は圧縮レンジとしてデコードする
       という、よくわからない挙動になっている。(多分バグだと思う)

     3.Motion JPEGのAVIをAviUtl本体に読み込むと、RGB24での読み込みになる。

     4.1~3の結果、
         「圧縮レンジでエンコードしたAVIをフルレンジとして読み込む」
       という不整合が発生してしまい、結果的にYC圧縮(?)がかかってしまう。

   つまり、
      ◎RGB24でデコードする場合は色がおかしくなる
      ◎RGB32でデコードする場合は正しい色になる

   ということになります。

   WMPでの再生時にはRGB32でデコードされるため正しい色になりますが、
   AviUtl本体ではRGB24でデコードされるため、色がおかしくなります。
   上に書いたようにAviUtl本体ではなく拡張編集プラグインのほうに読み込み、
   「アルファチャンネルを読み込む」にチェックを入れればRGB32でデコードされるため、
   正しい色になります。

   このあたりの挙動は、動画編集ソフトや読み込み方法によっても変わってきます。
   例えばNiVE(NicoVisualEffects) v1.89にVFWInputで読み込んだ場合は、
   RGB32でデコードされるため、正しい色になります。
   MMD(MikuMikuDance)の背景AVIに読み込む場合はVFWのRGB24でデコードされるので
   色がおかしくなります。

 ●その他の影響
   上に書いたように、MotionJPEGはフルレンジでエンコードするのが一般的のようです。
   実際、ffmpegを使って
     ffmpeg.exe -i RGB.avi -vcodec mjpeg mjpeg.avi
   という感じでMotionJPEGのAVIを作ってみると、フルレンジになっています。
   このAVIを、Bandicam付属のBandi MJPEG Video Decoderでデコードすると、
      ◎RGB24でデコードする場合はフルレンジでデコードされるので正しい色になる
      ◎RGB32でデコードする場合は圧縮レンジでデコードされるので色がおかしくなる

   という、Bandicamで録画したものとは逆の現象が発生してしまいます。
   いまどきMotionJPEGのAVIを扱うことはあまりないかもしれませんが、
   Bandicamをインストールしている環境では、扱いに注意する必要があります。

■2.音声が「MPEG-1 L2」だとAviUtlのプラグインとの相性が悪い

  MPEG-1 L2(MP2)の音声をAviUtlの拡張編集プラグインに読み込むと、
  極端に早送りしたような音になり正常に編集できません。

  また、MP2音声のAVIをAviUtl本体に「AVI/AVI2 File Reader」または「AVI File Reader(Video For Windows)」で読み込み、
  出力プラグインで出力しようとすると、エラーまたは異常な結果になります。
  試した限りでは、
     ●拡張 AVI 出力 ver. 0.3.16 by まるも製作所 / plus 7.0 by Aji
         →エラーが発生し出力に失敗(この時のエラーメッセージはコメント欄を参照)
     ●FLV (VP6/MP3) 出力 ver. 0.2.3
         →エラーが発生し出力に失敗(この時のエラーメッセージはコメント欄を参照)
     ●WMV出力 version 0.11 plus 7.0
         →エラーが発生し出力に失敗
     ●拡張x264(GUI)Ex 1.52
         →音声が元の長さよりはるかに短くなる。
           手元のサンプルでは、1分半の動画なのに
           11秒しか音声が出力されませんでした。
  という結果になりました。
  標準の「WAV出力」だけは、うまくいくようです。

  原因はよくわかりませんが、できればMP2は使わないほうがよいでしょう。
  どうしても使いたい場合は、AviUtlに読み込む前にMP2音声をなんらかの方法(※)で
  PCM形式に変換しなおしてからAviUtlに読み込むとよいと思います。

   ※一度AviUtl本体に読み込んでWAV出力するとか。
    ただしうまくいかないケースもあるかもしれません。
    別ソフトで変換するとか、入力プラグインを変えて読み込むといった
    方法もありますが、なんにしても地味に面倒。
    結局のところMP2は編集には向かないので使わないほうがよさそうです。

■Bandicamをアンインストールしてもデコーダーは残ったままなので注意。

  BandicamをインストールするとMPEG-1やMotionJPEG、MP2のデコーダーも
  一緒にインストールされるのですが、Bandicamをアンインストールしても
  これらのデコーダーはシステムに残ったままとなります。

  録画したAVIを再生できなくなるとまずいので残しているのでしょうけど、
  勝手に余計なものを残すなという気もします。
  アンインストール時に一緒に消すかどうか選択できるとよいのですが。

  これらのデコーダー群をアンインストールしたい場合は、コントロールパネルの
  「プログラムの追加と削除」を開き、
      「Bandisoft MPEG-1 Decoder」
  を削除すれば、まとめてアンインストールできます。
  (名前はMPEG-1となっていますがMotionJPEGもあわせて削除されます)

  ただし先程も書いたとおり、デコーダーを削除すると手元にある録画したAVIが
  再生できなくなる可能性が高いので注意しましょう。
  (まあ必要になったらBandicamを入れなおせばいいのですが。)

 
なお、これらの問題は、バージョン1.8.0.230で確認しました。
いつか修正されるかもしれませんが、私は普段使っていないので
修正されても気づかないと思います。

 
■関連してるけど別件メモ

 Bandicamと付属デコーダーをアンインストールし、
 ffdshow tryoutsのMotionJPEGを試してみた。

 ●使用したバージョン:rev4463(記事作成時点の最新版)

 ●VFWのMJPEGエンコーダーは画質指定モードでも量子化指定モードでも、
  指定した数値が反映されずにエンコードされてしまってるっぽい。多分バグ。

 ●VFWデコーダーでMJPEGのデコードをさせる場合、「VFWの設定」で、
  「RGB変換」の「入力レンジ」を「自動」にしておくと、
  フルレンジでRGB変換してくれるようになる。
  (デフォルトは「標準(Y:16-235,CbCr:16-240)」になっている。つまり圧縮レンジ。)

 ●AvsPmod v2.2.1の「Save to AVI」からavs2aviでのMJPEGエンコードを試してみたが、
   ◎RGB32で渡した場合は圧縮レンジ(TVレンジ)でエンコードする
   ◎RGB24で渡した場合はフルレンジでエンコードする
  という挙動を示している。
  これもバグのような気もするけど、上に書いたBandicamのBandi MJPEG Video Decoderの
  謎の挙動とぴったり対応しているようだし、なんかあるのだろうか?
  よく知らないけどBandicamってffmpegとかlibavとか使ってるんでしたっけ?

    GOM Playerは以前ライセンス違反でffmpegの恥の殿堂(Hall of Shame)に入ってたみたいだけど・・・。

|

« ZeroWatchプレーヤーの各モードでの表示領域の広さメモ | トップページ | Google Chrome 21 でのFlashPlayerトラブルの原因と解決方法 »

コメント

こんにちは、rigayaです。

遅くなりましたが、MP2音声の方についてです。

>「拡張x264(GUI)Ex」でMP4出力すると、音声が元の長さよりはるかに短くなってしまいます。
とのことで、なんとかしてみようとしたのですが、結論から言うとなんともなりませんでした…。

音声出力ループの終了判定をバグらせたかなと思ったのですが、
Aviutlから渡される音声の長さの情報(OUTPUT_INFOのaudio_n)
からして短いので、どうしようもない…という状況です。

やはりおっしゃっているように、
・mp2は使わない
・使った場合はpcmにデコードする
といった対策しかないかな、と思います。

lsmashinput.auiなどで読み込ませ、
AVI/AVI2 File Reader経由を避ける事で
Bandi MPEG1 Decoderが使用されないようにするなども対策になるかと思います。

投稿: rigaya | 2012年8月 4日 (土) 12時39分

>rigaya様

しばらくブログをチェックしておらず反応が遅くなってしまいました、申し訳ありません。
調査ありがとうございます。

たまたま試したx264guiExだけを「相性が悪い」として例に挙げてしまったのは私の失敗でした。
標準のWAV出力ならうまくいくのは確認していたのですが、その他の出力プラグインは未確認でした。
もともと「MP2やばい」が主旨だったこともあり、ちゃんと検証していませんでした。
重ね重ね申し訳ありません。

既にそちらでも試されているかもしれませんが、あらためて他の出力プラグインの動作を
確認してみたところ、以下のような結果となりました。
ソースはBandicamで映像MPEG-1・音声MP2でキャプチャしたAVIファイル。
読み込みは「AVi/AVI2 File Reader」です。「AVI File Reader(Video For Windows)」でも同様。
  ------------------------------------------------------------------
  [bandicam.avi]
  512x288 24Bit Chromatic MPEG1 Video I Frame 30.00fps 2754f 1087.93kb/s
  MPEG1-LayerII 48.00kHz 192.00kb/s CBR Stereo
  INFOTAG
  [RIFF(AVI1.0)] 00:01:31.799 (91.799sec) / 14,957,464Bytes
  真空波動研SuperLite 120101 / DLL 120101 Unicode
  ------------------------------------------------------------------

■拡張 AVI 出力 ver. 0.3.16 by まるも製作所 / plus 7.0 by Aji ( exaviplus.auo )
  ●以下のようなエラーメッセージが出て出力に失敗する。
     ----------------------------------------------------------------------------------
     不正なオーディオサンプル数を検出しました
     圧縮音声をソースにしている場合に、AviUtl のバージョンによってこのエラーが出ることがあります
     PCM 系音声にソースを変更するか、AviUtl 本体のバージョンアップを行ってください
     (0.98 系の全てと 0.99 の AviUtl でこの問題が発生します)
     ----------------------------------------------------------------------------------

■FLV (VP6/MP3) 出力 ver. 0.2.3 by まるも製作所 ( flv.auo )
  ●以下のようなエラーメッセージが出て出力に失敗する。
     ----------------------------------------------------------------------------------
     異常なオーディオサンプル数を検出しました。
     圧縮音声 (MP3 等) をもった AVI ファイルを入力としている場合 AviUtl の
     バージョンによってこのメッセージが表示されることがあります
     AviUtl 本体のバージョンアップを行ってください
     0.98 系の全てと 0.99/0.99a の AviUtl でこの問題が発生します
     ----------------------------------------------------------------------------------

■WMV出力 version 0.11 plus 7.0 ( wmvoutplus.auo )
  ●特にメッセージは出ないが出力に失敗する。

rigayaさんの調査にもありますが、AviUtl側の既知の仕様(?)のようですね。
まるもさんのエラーメッセージを見るとバグというか将来的な対応を見込んでいるという感じを受けますが、
実際のところは私にはなんとも判断がつかないところです。

投稿: 金の髭 | 2012年8月12日 (日) 21時09分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1278146/45645892

この記事へのトラックバック一覧です: BandicamでMotionJPEGやMP2を使うとAviUtl等での編集で困ることがある件。:

« ZeroWatchプレーヤーの各モードでの表示領域の広さメモ | トップページ | Google Chrome 21 でのFlashPlayerトラブルの原因と解決方法 »