一連のMonsterTV HDUCのクラックによって、 地デジフルセグストリームが容易に得られるようになったけど、 その大きさに恐れおののいていたというのが先週までの流れ。
UNIXにおいては、ながらくsizeof(int)=sizeof(long)=4の時代が 続いたので、ファイルオフセットなどの演算が32bit前提に なっちゃってるプログラムが多いわけだ。 I/O周辺のシステムコール/ライブラリ関数において、 size_t型をきちんと扱っているプログラムは大丈夫だけど、 加算なんかをするうちに32bit整数変数に代入してしまいがち。オレモナー
前置きが長くなったけど、sizeof(long)=8の環境...つまりLP64の環境に 移行すれば 大規模ファイルが自然と扱えるようになるんじゃね? と 考えたわけだ。
なのでAMD64のDebian lennyをインストール。 画像処理系のパッケージも、etch環境ではtar.ballから自分で入れていたけど、 今回はdebian-multimediaから拝借。
# dpkg -i debian-multimedia-keyring_2008.10.16_all.deb
してから、/etc/apt/source.listに1行加える。
deb http://www.debian-multimedia.org lenny main
あとは
# apt-get update # apt-get install ffmpeg mplayer transcode
とかやると必要なパッケージがコンパイルなしに入れられるというわけだ。 コーデック系は特許の権利関係からみでDebian本体には絶対に入らないから、 こういうリポジトリがあるのはありがたいね。
7GB, 1時間きっかりの地デジTSファイルを再生してみよう。
# gmplayer -vo x11 09052916_Ch18.ts
mplayerが認識している 39分というとちょうど4GB付近 でして、 やはりアプリ本体が64bit対応にコーディングされてないとまったく 無意味なんだねーというお話。当然と言えば当然なんだけどね。
ああ。いいこともありましたよ。 ffmpegとかバージョン違うから一概には参考にならないけど、 こんな感じのバッチで、
#!/bin/sh mencoder -aspect 16:9 -ofps 29.97 -vfm ffmpeg -vf pp=li,scale=960:540,harddup -ovc lavc -oac lavc -lavcopts threads=2:vbitrate=4000:vglobal=1:vcodec=mpeg4:aglobal=1:\ acodec=libfaac:abitrate=192 -of lavf -lavfopts format=ipod \ -o $2 $1
このくらい差がついてる。本当か?って感じですが。
AMD64: 32.24fps i386: 27.72fps
ま、カーネルから標準ライブラリまですべて64bit化されてるから、 1割くらい速くなってもおかしくはないかも。
mencoderには1つの大きなファイルのうちの途中、つまり相対再生時刻でエンコード範囲を指定できるオプションがある。
# mencoder -ss 1800 -endpos 3600 ...
とかやると1800秒めから開始する・・・はずなんだけど
・・・とってもfssek()くさいです。しかも返り値をチェックしてないのでそのまま進んで落ちます。何をやってるんでしょうかこいつは。どこかにマトモなエンコーダはないですかね・・・
正直、フルセグ野郎とかそういうレベルに達してないこのごろ。
_ 通りすがり [いまだSD環境なのですが、もはや骨董品といえるMTV-2000の最大値で録画してる深夜アニメ30分が映像+音声で3...]