«前の日記(2009-06-29) 最新 次の日記(2009-07-02)» 編集

ぱぱネット(仮)


2009-07-01 いや誰かやってくれませんかねマジで [長年日記]

_ [ワンセグ野郎][Linux] 動画変換の道のり

前置き長いよう。

ワンセグ野郎の始祖 であるところの Mobile Hackerzさんは、 いまや そこらへんの厨房でも知っている 携帯動画変換君の 開発者であるわけです。

で、携帯動画変換君はWindows用の ffmpegのフロントエンド で、ほぼどんなコーデックを 放り込んでも3GPなどの携帯に転送可能なファイルに変換してくれる。言い換えれば Public License(GPL2,GPL3,LGPL2,LGPL3,と一部Apacheライセンス)で 配布されているフリーのメディアフレームワークである FFMPEGを内部的に呼び出しているラッパーなのである。

なので俺が、 「Linuxでもffmpegさえコンパイルできれば地デジ変換なんて楽勝だよねー」 と 思い込んでも無理からぬことであろう....(え?笑)

_ [Linux] が、現実は厳しい

少し前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なんだぜ?(立場的に断言していいのかわからんが)

_ [Linux] 仕方ないのでffmpeg最新版に対するパッチを公開する!

ダウンロード(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

直したところ:

  1. MPEG4 AACがMUXされていてもビットずれを起こさずDEMUXできるように
  2. フルセグ/ワンセグを含むTSファイルに対してクロップオプションが効くように
  3. TSファイル中のAACが途中から始まっていたらADTSヘッダサーチするように(音ずれは発生)
  4. 途中でチャンネルエレメントを見失った場合もADTSヘッダサーチするように(音ずれは発生)
  5. ARIB文字コード変換をかませて正しいチャンネル名が出るように(iconvが必要)

正常

_ 使い方

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である程度わかるんだけどね....自動化できてるようには思えないので。

本日のツッコミ(全8件) [ツッコミを入れる]
_ こにしか (2009-07-01 16:11)

<br>本家に送っておかないと、ffmpegを最新にする旅に、毎回手パッチするはめになるとおもうので、ぜひ、本家に送りつけてください<br>5が採用されるかどうかは、よくわかりませんが1-4は重要だと思います。

_ (2009-07-01 16:30)

メーリングリストがいっぱいありすぎてわからないwwwww<br>ffmpeg-develかなまずは.....

_ (2009-07-01 16:51)

ちょっと愚痴なのですが、外人達がAACに興味ないのは、<br>海外にはコンテナがMPEG2-TSで音声がAACって<br>ストリームがほとんどないからなんだよね....。<br>AACはMP4/MOVコンテナで扱うもんだと。そういう認識っぽい。

_ すいません通りすがりです (2009-07-06 06:36)

>Friioが発売されてから数年、みんな変換はWindowsでやってんのかな。<br>recfriioの作者というか私の場合の話ですが、<br>1. wineを使ってTsSplitterでHD/SDと、音声のチャンネル数が違う部分を分割<br>2. VLCを使ってmp4にremux<br>3. 2.で変換が失敗している場合があるので、音声/動画のストリームがあるかとそれぞれの長さをチェック。<br>4. 動画をx264でエンコードしてMP4Boxでmux。<br>のように動かないと分かっている場所は迂回という状態ですね。<br>最終的にどうも安定しなかったので面倒になって3.までやった状態でそのまま保存しているという。

_ とお (2009-07-30 19:53)

どうやら、 configure時に--disable-decoder=aac をつけないと<br>libfaadではなく内臓のaacデコーダーが使われるみたいですよ。<br>現時点では、libfaadの方が安定しているようです。

_ (2009-12-16 11:10)

ダウンミックスの時に気付きました。「あ、libfaadつかえばいいんじゃね?」と(汗;<br>というわけで俺のパッチは日本語化しか意味ナス。とおさんどもありがとう。

_ はなぶさ (2010-01-28 12:01)

>>とおさん<br>configure時に--disable-decoder=aacつけなくてもlibfaadがenableなら<br>infile optionsで-acodec libfaadを付けるだけでいいような。

_ みし (2014-05-22 22:13)

Error while decoding stream #0.1<br>このエラーって回避するのに一番オススメな方法ってどんなやり方がありますか?


2001|04|
2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|03|04|05|10|

[BANNER]
このサーバーをもう12年も維持しているかと思うとめまいがしますよ。
ツッコミ機能は、ハンドル名が完全日本語じゃないと登録できません。
また、本文にURLが含まれていても登録できません。
いずれもSPAM対策です。
[Panda Papanda]
2009年
7月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

[Papanda]  [Kuma]  [Tomorin]  [Iron]  [Eiza]  [Dokkin]  [Honya]  [Zyou]  [Tsuyo]  [Bike]  [KoeBBS]  [Chukei]  [portal]  [tvmatome]  [KaoPaku] 

訪問者数:(+2560143)