Windowsの場合はなんてことはなく player.pl差し替え版を使えばいい。 TSConverter.exeやNeroAacDec等のバイナリを置いておけばCGIが勝手にやってくれる。ありがたや。
しかしLinuxの場合はそう簡単にはいかない... スクリプトを少し覗けばわかるが、差し替え版は ありとあらゆるパスがWindows表記 なので、 UNIX系列では再エンコード部分は動かない。音ずれ補正に必須であるTSConverter.exeを動かすために Wineで工夫したりする必要があるし、さらに どうしても見付からないんだNeroAacDec/Encのソースが! 一応本家サイトからLinuxバイナリはダウンロード できるのだが....Debian GNU/Linux etchでは
./neroAacDec: /lib/tls/i686/cmov/libc.so.6: version `GLIBC_2.4' not found (required by ./neroAacDec)
てな感じで動かない。lennyにアップグレードしたろかと思ったけど、現状動いてるサーバを長期間止めることになるので断念。 苦し紛れにlibcとstdc++の*.debをダウンロードしてdata.tar.gzを取り出して共有ライブラリを取り出してLD_PRELOADを駆使して実行してみた。結果はセグメン(^^;
まずはワンセグではなく汎用の...29.97fpsのmp4やflvをiPhoneで再生できるように変換することを考える。千里の道も一歩から。
いろいろ試行錯誤したが、mplayer-export-2009-01-08をコンパイルしてできたmencoderを使うのが一番早そう。最初、海外フォーラムをつぶさに覗いていたのだがどれも情報が古くて mencoderはダメなのでffmpeg使いましょう みたいなことを書いてあってハマった。mplayer今年版なら大丈夫そうだ。-lavcoptsが死ぬ程長いのは、ほとんどlibx264にiPhoneが唯一読み込めるbaseline-profileの指定。尚、MP4Boxコマンドは以前コンパイルしたgpacに含まれていたものです。MP4BoxはAVインタリーブし直しに必要です。
------------encode169.sh------------
#!/bin/sh
infile=$1
test -f $infile || exit 1;
tmpfile=${infile%.*}.tmp
outfile=${infile%.*}.mp4
mencoder -noskip -mc 0 -aspect 1050:576 -ofps 29.97 -vfm ffmpeg -vf scale=480:272,harddup -ovc lavc -oac lavc -lavcopts vglobal=1:vcodec=libx264:vqscale=2:vqmin=2:level=30:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=0:cmp=3:subcmp=3:aglobal=1:acodec=libfaac:abitrate=128 -of lavf -lavfopts format=ipod -o $tmpfile $infile
MP4Box -ipod -fps 29.97 -add $tmpfile -new $outfile
rm -f $tmpfile
------------encode169.sh------------
使い方:
% encode169.sh test.ts
4:3コンテンツの場合はこんな感じでイナフ。ほとんど間違い探しであるが...以下2行書き換えてencode43.shとかで保存しておくといいかな。
mencoder -noskip -mc 0 -aspect 4:3 -ofps 29.97 -vfm ffmpeg -vf scale=480:360,harddup -ovc lavc -oac lavc -lavcopts vglobal=1:vcodec=libx264:vqscale=2:vqmin=2:level=30:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=0:cmp=3:subcmp=3:aglobal=1:acodec=libfaac:abitrate=128 -of lavf -lavfopts format=ipod -o $tmpfile $infile MP4Box -ipod -fps 29.97 -add $tmpfile -new $outfile
ただ、上記でなんでも変換できるわけではなくて内部でlibfaacを使っている関係上、NHKニュースなど二ヵ国語放送のために 音声形式が途中で変更されるものは 雑音が入ったり切替え以降 たまに音がでなくなったりする ....。これは俺がほぼ100%ステレオ音声オンリーであるアニメしか変換しない(意味明瞭)ためにペンディングしている。まじめにやるならLR排他や5.1ダウンミックスしながら1本のステレオWAVにするようなデコーダが必要だろう。etchでNeroAacが動けばなー....
既に書いたが 「Baseline-profile NoBフレ,NoCAVAC,方形ピクセルのAVCであること」 と、 もうひとつ。 「URLの末尾が.mp4で終わること!」(URIパラメータ形式不可) 。これはマジハマッタ。どんなエンコードしても Safariで読み込むと 「このファイルは再生できません」 って言うからさ、てっきりエンコードが失敗してるのかーとか思うじゃないの。実はファイルは正常にできていて、SafariのEMBEDタグ呼出制限にひっかかってただけだった。サーバレスポンスヘッダのコンテンツタイプvideo/mp4も全く参照してないようだし...これどっかに書いてあります?
正直iPhoneは全体的にエラーメッセージが足りなすぎる!隠し機能でいいからおしゃべりモードがほしいな。Web開発だけでもJavaScriptエンジンの情報はもう少しほしい。SDKがあれば改善するのかしら...?
![[BANNER]](http://linux.papa.to/image/banner.png)
|