2013年4月7日日曜日

壊れたMPEGファイルの修復方法について

宇宙戦艦ヤマト2199のTV放映が始まりましたね~.それについては後日書きます.

ところでわたしはPC上で動くとあるシステムで地デジのアニメをエアチェックしています.

このシステムでは、ちょくちょく録画をしくじります.

不具合を具体的に述べると、番組放送開始直前のコマーシャルを受信中に、おかしなMPEGプロファイルを受信してしまうのが不具合のキッカケです.たとえば720iで放送されているという風にそのコマーシャルのMPEGプロファイルを受信します.事実そのコマーシャルは720iで放送されているのかもしれません.

その後、番組が1440iでの放送に切り替わりますと、直前までの録画プロファイルが720iだったところから1440iに切り替わったことに追従できずに、記録されたMPEGファイルが破壊されます.番組直前のコマーシャルは放映期間中同じであるケースが多いので、1クール全ての話のMPEGファイルが破壊されます.

破壊されたMPEGファイルは、windows media playerでは再生できません.Power DVDでも再生できません.

しかし、VLC media playerというフリーソフトはわたしが知る限り極めて優秀なプレイヤーで、そんな破壊されたMPEGファイルでもバシバシ再生できるという高機能さを発揮します.しかもFLVも再生できるし動作は安定しているしでとてもGOODでもはや他の動画再生ソフトは要らないよってかんじになってます.http://www.xucker.jpn.org/keyword/vlcplayer.html
(VLCでも市販BDソフトの再生はできませんがね、暗号を解除できませんから)
←これがVLCのアイコン
どうやら並みレベルのプレイヤーでは、ファイル冒頭に書かれたMPEGプロファイルでEOFまで一気通貫して再生するようです.しかしVLCは、その都度MPEGプロファイルを読み込んで動的にプロファイルを修正して再生するという賢い動作をしているようです.なので、720iが1440iに切り替わってもへっちゃらで再生できる!
逆にいうと、破壊されたMPEGファイルは完全に死亡しているのではなく、中身はある意味でまともなファイルであるとも言えるわけです.途中でMPEGプロファイルが切り替わっているだけですから.

そこまでわかっていながら、破壊されたMPEGファイルはVLCで観るのみしかできなくて、観たら消すしかなかったのがいままでのわたしの悲しみでした.

2013年1月期のアニメですと、破壊されたMPEGファイルは「さくら荘のペットな彼女」、それと「BLACK LAGOON OVA特別編集版」でした.「さくら荘」は永久保存版にしたかった.本編がダメなら2クール目のEDだけでもOPEDライブラリに追加したかった.でもダメでした.
まぁ「さくら荘」なら泣く泣くあきらめることもできたのですが、「BLACK LAGOON OVA特別編集版」は容易にはあきらめられません.というかあきらめるのは無理
そこで今日、破壊されたMPEGファイルの修復方法というのをgoogleで検索して知り得た驚愕の情報がありました.http://freesoft.tvbok.com/freesoft/encode/fix_movie_vlc.html
このページが言ってることは、VLCを利用して修復できるぞ、ということです.なんと、なんとVLCには、ファイル変換機能があるんです.それを使うと破壊されたMPEGファイルを修復できることがわかりました.
さっそく「BLACK LAGOON」を変換してみますと、修復できました.ただし、全編通して720iになってしまっています.どうやら、ファイル冒頭のMPEGプロファイルで一気通貫して変換する仕様であるらしいです.これだと、観れるしDISKに焼けるようにはなりましたが解像度がSDになってしまって悲しみはまだ続いてしまいます.

そこで、さらに一工夫です.冒頭のCMがそもそもガンなわけですから、冒頭のCMを編集ソフトでカットしてやればVLCによって全編1440iで復旧されたBLACK LAGOONを得られるはずです.しかし編集ソフトでこの破壊されたMPEGファイルを編集できないこともわかっています.(TMPGENG+Xmediaでダメなことを確認済み)

乱暴ですが、以下のプログラムでバイナリ的に先頭部分をカットしました.164MBをカットするとちょうどCM部分をカットできまして、あとはVLCの回復力により全編1440の「BLACK LAGOON」を得られたのです.

苦労はありましたけれど、これでエアチェックがマトモにできるようになりました.とてもうれしいです.今日は良い一日でした.

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
  long long i;
  long long cut;
  int  c;
  if(argc>=2) cut=atof(argv[1]);
  else return 1;
  i=0;
  while(1)
    {
      c=getchar();
      if(c==EOF) return(0);
      i++;
      if(i>cut) printf("%c",c);
    }
}

追記2014.1.7:
上記のトラブルの根本原因がわかりました.オーサリングツールの「TMPEGENC authring works 5」を使ったところ、tsファイルは様々なデータを内包しており、13セグと1セグが同居してるのを始めとして(他にもある)、本放送とCMの間でデータプロファイルが切り替わっていることがわかりました.同ツールでならtsファイルを詳細に解析して正しく読み込むことができます.それで永久解決できました.


人気ブログランキングへ

1 件のコメント:

  1. TMPEGENC authring works 5ではなく、(ハックせずに)無料でできるSoftが無いでしょうか?

    返信削除