書斎の方のカーテンを何気にひいたら、サッシに盛大なカビが繁殖していて絶望する。さすが梅雨時期。テラバイオハザード。
手元にある武器はカビキラー。すさまじい匂いが部屋に充満する。こういうのは晴れている昼間、風通し良くしてやるべきだな・・・
ちょっと外の空気を吸いに自転車で周囲をぐるぐるする。テラ不審者。しかし・・・マンション周辺は商業施設が増えたなー。徒歩5分圏内に、
がある・・・テラ便利wwwwww
前置き長いよう。
ワンセグ野郎の始祖 であるところの Mobile Hackerzさんは、 いまや そこらへんの厨房でも知っている 携帯動画変換君の 開発者であるわけです。
で、携帯動画変換君はWindows用の ffmpegのフロントエンド で、ほぼどんなコーデックを 放り込んでも3GPなどの携帯に転送可能なファイルに変換してくれる。言い換えれば Public License(GPL2,GPL3,LGPL2,LGPL3,と一部Apacheライセンス)で 配布されているフリーのメディアフレームワークである FFMPEGを内部的に呼び出しているラッパーなのである。
なので俺が、 「Linuxでもffmpegさえコンパイルできれば地デジ変換なんて楽勝だよねー」 と 思い込んでも無理からぬことであろう....(え?笑)
少し前ffmpeg-0.5をインストールした ことをお伝えしましたが.... こいつがなかなかPT1で撮った地デジTSを食ってくれない。 特に悩んだのが音声周辺。こういうエラーが出始めると音声なしのMP4ファイルができてしまう。
[aac @ 0x12c2f60]channel element 1.2 is not allocated Error while decoding stream #0.1 Error while decoding stream #0.1 Error while decoding stream #0.1 Error while decoding stream #0.1 Error while decoding stream #0.1
海外フォーラムでもBBC等の録画を変換するときにハマってる人がいたのだが、 決定的な答えはなく、仕方なくソースコードを読んでみると..... AACスキップコードがまったくなく、 TS全体をDEMUXして最初に出てきたAACパケットは、 必ずヘッダから始まっていなければならない構造になっていた。また、 AACチャンネルエレメントIDのマップ取得コードがお粗末 で、入力条件によっては実際に含まれているはずの AACストリームを全捨て するというバグも発見した(これは最新版ではget_che関数の追加で直ってる)。 その他、aac_parser.cが MPEG2 AACのみ対応でMPEG4 AAC食うとパースミスる とか、 地デジ関連では プログラム名で不正な文字コード(エスケープ)をダンプ して端末画面が滅茶苦茶になるとかもうね....。
Friioが発売されてから数年、みんな変換はWindowsでやってんのかな。 たしかにTMPGEnc Xpressを使えばいいんだろうけど。 Linuxerとしてはちょっと悲しい気持ちになった....。 マルチメディア関連のプログラムを改造できる選手層の薄さも残念だわさ。 ぶっちゃけ デジタル家電メーカには腐るほど居る ハズなんだけどな.... 松下とか今やほぼ全製品ラインがLinuxなんだぜ?(立場的に断言していいのかわからんが)
ダウンロード(ffmpeg-2009-06-30.patch)。
本体はFFMPEGの「checkout」からffmpeg-checkout-snapshot.tar.bz2というのを落としてください。 中身は毎日変わりますからコンパイルする気の方はお早めに 。俺の使ったのは ffmpeg-checkout-2009-06-30 です。これ以外は知らない。 関連ライブラリは ffmpeg-0.5をインストールしたを参照。
# tar xvjf ffmpeg-checkout-snapshot.tar.bz2 # cd fmpeg-checkout-2009-06-30 # patch -p1 < /tmp/ffmpeg-2009-06-30.patch # ./configure --enable-gpl --enable-nonfree \ --enable-pthreads --enable-x11grab \ --enable-libfaac --enable-libfaad \ --enable-libmp3lame --enable-libx264 \ --enable-libxvid --enable-zlib \ --enable-libvorbis --enable-libdc1394 # make # make install
直したところ:
AVC/AACのMP4に変換するコマンドラインはこんな感じです。
$ ffmpeg -i input.ts -f ipod -coder 0 -level 13 \ -threads 2 -deinterlace -vcodec libx264 -aspect 16:9 -s 960x540 \ -r 30000/1001 -b 4000k -bt 4000k -qmin 9 -qmax 31 -acodec libfaac -ac 2 \ -ar 48000 -ab 192k test.mp4
ちなみに、 /mnt/tsに保存されたTSファイルからinput.tsの切り出しは perlrtmpのOneSeg24.pmを使います。
さて。一方的に残念とか書いてしまったが...俺のエンコードスタイルが そもそも間違っているという可能性も高いな(笑) 一般にはtsselectかSplitterあたりで分割してから処理してるのですかね?? でもそうすると、どこかの段階でPTSで音位置あわせしないと酷いことになるはず。 特にHD地デジはAACが映像に対してかなり先行して入ってるので。
俺的には手動でMPEG/AVC変換をやるってのは、ちょっと番組数的に 容認できない労力なのですが、皆さんのエンコードテクニックを 聞いてみたいところです。ツール類はDTV関連ツール置き場とか Wikiである程度わかるんだけどね....自動化できてるようには思えないので。
Before...
_ ぱ [ダウンミックスの時に気付きました。「あ、libfaadつかえばいいんじゃね?」と(汗; というわけで俺のパッチは日本..]
_ はなぶさ [>>とおさん configure時に--disable-decoder=aacつけなくてもlibfaadがenabl..]
_ みし [Error while decoding stream #0.1 このエラーって回避するのに一番オススメな方法ってど..]