Linuxでワンセグ録画 その4 (TSストリームをMP4ファイルに変換)

前回の続きです。今回はTSストリームから .mp4 へ変換します。

変換するには、TSConverterを使います。TSConverter は元々 Windows のコマンドプロンプト用のソフトですが、Rubber Duckie さんのところで UNIX 系で動かすためのパッチを公開しています。

パッチはここからダウンロードできます。Rubber Duckieさんの2009/5/252009/9/22010/3/4のブログを参考にパッチを当てていきます。

また、Linux では一部ビルドできない部分があったので、簡単なパッチ(TSConverter-linux.patch)を作りました。Rubber Duckieさんの2010/3/4で書かれているバグ修正も入っています。

あと、DtsEdit, MP4Box のフルパスを指定していて、環境変数で変えられるようになっているのですが、勝手に $PATH から探してもらった方が楽なので、フルパス指定を無くしてます。

$ cd ~/project/oneseg/file
$ wget http://theremin.hostoi.com/file/TSConverter_9_01.zip
$ wget http://rduck.web.fc2.com/TSConverter_4_26_patch.tar.bz2
$ wget https://petit-noise.net/system/files/TSConverter-linux.patch
$ cd ..
$ unzip file/TSConverter_9_01.zip
$ cd TSConverter
$ unzip Source.zip
$ tar xf ../file/TSConverter_4_26_patch.tar.bz2
$ cd Source
$ nkf -e -Lu TSConverter.cpp > TSConverter.c
$ mv TSConverter.h TSConverter.h.dos
$ nkf -Lu TSConverter.h.dos > TSConverter.h
$ patch -p1 < ../TSConverter090426.patch
$ patch -p0 < ../../file/TSConverter-linux.patch
$ gcc -o TSConverter TSConverter.c
$ cp TSConverter ~/project/oneseg/bin

 

これで TSConverter はビルドできるのですが、TSConverter は内部で DtsEdit と MP4Box というコマンドを使っていますので、これらもビルドする必要があります。

mp4box は gpac というプロジェクトの一部?らしく、以下でダウンロードできます。

  • http://gpac.wp.institut-telecom.fr/

ただ、ソースのtarballが無いみたいなので、svn checkout して取り出します。

$ cd ~/project/oneseg/
$ svn co https://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac

私が checkout したときは r3247 でした。

そのままビルドすると、mp4box コマンドが libgpac.so を必要とするので、単体で実行可能なように libgpac をリンクするように configure します。

$ cd gpac
$ ./configure --static-mp4box
$ make -j5
$ cp bin/gcc/MP4Box ~/project/oneseg/bin

最後のコマンドでバイナリを ~/project/oneseg/bin にコピーしてます。

 

最後は DtsEdit です。

DtsEdit は TSConverter 同様、元々 Windows 用だったのですが、TSConverter同様 Rubber Duckie さんとこで UNIX 系への移植が行われています。

DtsEdit の開発者のサイトはすでに無くなっており、ソースコードを探し回ったところ、sourceforge プロジェクトのrec10の中に取り込まれている事が分かりました。(探すのに苦労しました・・・)

ただし、リリースされている tarball には DtsEdit が含まれていないので、こちらも svn リポジトリから直接 checkout します。

$ cd ~/project/oneseg/
$ svn checkout http://svn.sourceforge.jp/svnroot/rec10/tstools/DtsEdit

私が checkout したときは r862 でした。

Rubber Duckieさんによるパッチはここからダウンロードできます。

$ cd ~/project/oneseg/file
$ wget http://rduck.web.fc2.com/DtsEdit_20081009_patch.tar.bz2
$ cd ../DtsEdit
$ mkdir patch
$ cd patch
$ tar xf ../../file/DtsEdit_20081009_patch.tar.bz2
$ cd ..
$ for file in src/{*.cpp,*.h}; do echo $file; nkf -wd $file > $file.tmp; mv $file.tmp $file; done
$ cd src
$ nkf -w ../patch/DtsEdit.patch | patch -p1
$ rm stdint.h

このままビルドすると、libgpac.so が無いと言われてビルドに失敗するので、前でビルドした libgpac_static.a をスタティックリンクしてしまいましょう。

Makefile を以下のように変更します。

DtsEdit: $(OBJS)
#    $(CPP) -o $@ $(OBJS) -lgpac -L/usr/local/lib
    $(CPP) -o $@ $(OBJS) ../../gpac/bin/gcc/libgpac_static.a -lz -L/usr/local/lib

乱暴にパス指定してリンクしてしまいます。gpacのディレクトリは適当に変更してください。

これで DtsEdit がビルドできます。

$ make
$ cp DtsEdit ~/project/oneseg/bin

長かったですが、これでようやく TSConverter が使えるようになります。

色々ビルドしましたが、~/project/oneseg/bin の下は以下のような感じになっていると思います。

$ ls ~/project/oneseg/bin/
DtsEdit  MP4Box  TSConverter  dvbstream  mplayer

ここにパスを通して、以下のようにTSストリームをダウンロードし、mp4ファイルに変換できます。

$ export PATH=~/project/oneseg/bin:$PATH
$ dvbstream -c 0 -f `expr 21 \* 6000 + 395143` 8192 -o > test.ts
-----省略------
^CCaught signal 2 - closing cleanly.
$
$
$ TSConverter test.ts
AVC-H264 import - frame size 320 x 180 at 14.985 FPS
AVC Import results: 190 samples - Slices: 8 I 182 P 0 B - 190 SEI - 8 IDR
AAC import  - sample rate 24000 - MPEG-4 audio - 2 channels
Saving /home/tomo/project/oneseg/test.mp4: 0.500 secs Interleaving
$

これで test.mp4 が生成されます。あとは適当なプレイヤーで再生するだけです。

試しに zaurus の mplayer (attyさん作) で再生させてみたところ、映像のデコードが間に合わないみたいですね。H264のデコードは zaurus では QVGA サイズでも厳しいようです。

Android携帯のHTC Desire (X06HTII) で再生してみたらちゃんと再生できました。これで通勤中に録画したワンセグを見ることができそうです。

長いくせに興味ない人にはつまらないエントリですいません ^^;

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です