« ◇ブラームスは楽し | トップページ | ◆エアリーズ号の構造;2001年宇宙の旅 »

◆TOD⇒MPEG2-TS変換ツール

VictorのビデオカメラのファイルはTODという形式をしています。
宣伝では「MPEG2-TS」だとうたっていますが、ファイル形式は MPEG2-TSとは異なっています。
一部のTOD対応ソフト以外では取り扱うことができません。
もう一つの問題が、長時間録画を行うとファイルが分割 されてしまうことにあります。

このTOD形式は実はMPEG2-TSの188バイトのパケット毎に4バイト のindexを付加し192(32×6)バイトにし、並べたものです。
この余計な4バイトを削除するだけで普通のMPEG2-TSファイル にすることができます。

また、分割されたファイルは単純に結合するだけで 画像は全くのフレーム欠落なくつながります。

 変換プログラム

残念ながらVictorからツールが発表されないようなので、単純 なプログラムを自作しました。


// Tod2M2t.java
import java.io.*;
import java.util.*;
class Tod2M2t {
   public static void main(String[] args){
      try{
         String            outFileName= null;// 指定忘れはexceptionとする
         ArrayList<String> inputFiles = new ArrayList<String>();
         for(int idx=0;idx<args.length;++idx) {
            if( args[idx].equals("-out") ) outFileName= args[++idx];
            else  inputFiles.add(args[idx]);
            }
         byte buf[]= new byte[192];
         BufferedOutputStream bos= 
            new BufferedOutputStream(
               new FileOutputStream(
                  new File(outFileName)));
         for(String fName:inputFiles){
            System.err.printf("%nTOD:%s%n",fName);
            BufferedInputStream bis=
               new BufferedInputStream(
                  new FileInputStream(
                     new File(fName)));
            int n = -1;
            while( bis.read(buf,0,192) != 192 ){
               if( (++n%10000)==0 ) System.err.printf("*");
               bos.write(buf,4,188);
               }
            bis.close();
            }
         bos.close();
         }
      catch(Exception _e){ _e.printStackTrace(System.err); }
      }
   }
単純にjavac(JAVA1.5以上)でコンパイルし、
:: make.bat
javac Tod2M2t.java -Xlint:deprecation -Xlint:unchecked
pause
変換/結合するファイルと出力ファイルを指定して起動します。
:: run.bat
@echo off
@SET PARAM= MOV014.TOD MOV015.TOD -out MOV.m2t
java Tod2M2t %PARAM% %*
pause
基本的にはバッチファイルを作って起動します。頻度は高くないことと バッチファイルにしておくと後から見て分かりやすいことが理由です。 起動用のバッチファイル(ここではrun.bat)に対象となるファイルを 起動引数として書いています。
コマンド形式(起動引数)は
Tod2M2t {TODファイル}... -out 出力ファイル
です。TODファイルは複数指定でき、それらは変換/結合されて出力ファイル となります。

「右クリック-対象をファイルに保存」でダウンロードできます

 既存ソフト使用

TODファイルを予め結合し、Victor提供のPowerDirectorで読み込むことでも 可能です。PowerDirectorで読み込むと、ワークファイルが生成されます。 このワークファイルはMPEG2になっています(どこに作られるか忘れました)。
PowerDirectorの編集機能を使っての結合ではフレームの欠落が 発生します。PowerDirector使用の前に結合作業が必要です。
TODの結合はWindowsのコマンドcopyを使って

  copy MOV014.TOD/B+MOV015.TOD/B MOV.TOD/B
といった形でできます。(copy src dst 形式で、srcには+で複数のファイルを指定できます。 /Bはバイナリであることを示しています。/Bは全てのファイルにいちいちつけなければなりません)

TODファイルを取り扱えるソフト、例えばEdiusなどで使用する場合は、copyによる 単純結合のみでも構いません。

TODファイルおよびAVCHD,HDVをソースとしハイビジョンのBDと通常のDVDを作成する記事を AVCHD&HDV&TOD=>BD&DVD作成に起きました。(2008/9/9)

 注意!

連結できるのは、長時間連続撮影のため分断記録されてしまった ファイル、即ち本来連続しているデータ、に限られます。別々に撮影されたファイルを 連結しても正常なデータとはなりません。

####

これは以前「クチコミ」に載せたものと同じです。「クチコミ」では ファイルのダウンロードができませんので、ここに改めて載せました。

### 2008/4/16
copyに説明追加

### 2008/6/9
連結可能なファイルに関する注意を強調

### 2008/9/13
bis.close();追加 (教育的配慮)

### Javaライブラリのご紹介(2010/3/14)

Javaでのファイルのオープン手続きは3段重ね程度とは言え 毎度毎度同じ記述をあちらこちらで書き散らかすことになり ます。
この例ではbinaryデータのファイルですが、Textファイルや Objectファイルが混ざってくると無意味な混乱が発生します。
Binary/Text/ObjectとRead/Writeの観点でまとめた手続き を持つクラスが公開されています。ファイルのオープン 手続きに心理的壁を無くすのは大規模プロジェクト開発 の効率を高めます。
例えば今回のファイルオープンは

   BufferedOutputStream bos= hiU.openBinaryFileW(outFileName);
   BufferedInputStream  bis= hiU.openBinrayFileR(fName);
といった形になります。
Textファイル読み込みなら hiU.openTextFileRでObjectなら hiU.openObjectFileRといった形になります。
興味をお持ちの方はぜひこちらをご覧ください。

ライブラリ全体の説明は にあります。
オツアンドサンズのホームページは です。

|

« ◇ブラームスは楽し | トップページ | ◆エアリーズ号の構造;2001年宇宙の旅 »

トラックバック


この記事へのトラックバック一覧です: ◆TOD⇒MPEG2-TS変換ツール:

« ◇ブラームスは楽し | トップページ | ◆エアリーズ号の構造;2001年宇宙の旅 »