再エンコうまくいかない

こんな段取りでやってみた。

1.フリーオからTSを抜きつつ、音声と映像を分離する。これはリアルタイム。
nice --10 recfriio $CHANNEL $LENGTH $TSFIFO &
nice --10 b25 $TSFIFO $TSFIFO2 &
ffmpeg -y -f mpegts -i $TSFIFO2 -acodec copy $AACFIFO  -vcodec copy -an -f mpegvideo $MPVFIFO

2。AACをMP3に変換して
faad -f 2 -w abc.aac | ffmpeg -y -f s16le -ac 2 -ar 48000 -acodec pcm_s16le -i pipe: -ar 22050 abc.mp3

3.FLVにエンコードする
ffmpeg -y -i 1234.m2v -i 1234.mp3 -s 480x272 1234.flv

----

まず recfriio がエラーでこける。

つぎに AACのデコードでこける。

Last update: 2008年4月14日 17:22

AACデコードの問題(続き3)

相変わらず音声デコードではまっている。

1.再エンコードでの手間とディスクを削減するために録画時に 映像(m2v)と音声(AAC)を分離して保存

2.AACをデコードするときにエラーがあると、その分だけ音声が欠落する。
    合計では短くなる。。。

3.m2v と AACをデコードしたwavをmuxしようとしても音声が短いので、番組の途中から音がずれる。

4.欠落した分の長さがわかれば 足しこめるが、わからない。
    faad2 のバグかも。。と思ったがCVSと同じにしても変わらず。

 

あきらめて、TSで保存してデバッグに備えることにする。

Last update: 2008年4月 9日 01:51

AACデコードの問題(続き2)

AACデコーダのフロントエンドの faad が 途中で音声チャンネル数が変わると動作しないのは
faadを修正することで対応できた。

チャンネルが変わってエラーになったら、デコーダを再度初期化からやり直す変更をしたらうまくいった。

        /* update buffer indices */
        advance_buffer(&b, frameInfo.bytesconsumed);

        if (frameInfo.error > 0)
        {
            faad_fprintf(stderr, "Error: %s\n",
                NeAACDecGetErrorMessage(frameInfo.error));
#if 1 //add
   NeAACDecClose(hDecoder);
   hDecoder = NeAACDecOpen();
   /* Set the default object type and samplerate */
   /* This is useful for RAW AAC files */
   config = NeAACDecGetCurrentConfiguration(hDecoder);
   if (def_srate)
    config->defSampleRate = def_srate;
   config->defObjectType = object_type;
   config->outputFormat = outputFormat;
   config->downMatrix = downMatrix;
   config->useOldADTSFormat = old_format;
   //config->dontUpSampleImplicitSBR = 1;
   NeAACDecSetConfiguration(hDecoder, config);
   if ((bread = NeAACDecInit(hDecoder, b.buffer,
      b.bytes_into_buffer, &samplerate, &channels)) < 0)
   {
     faad_fprintf(stderr, "Error initializing decoder library.\n");
    if (b.buffer)
     free(b.buffer);
    NeAACDecClose(hDecoder);
    fclose(b.infile);
    return 1;
   }
   /* print some channel info */
            print_channel_info(&frameInfo);
   continue;
#endif //I
        }

Last update: 2008年4月 3日 01:08

AACデコードの問題(続き)

フリーオから取り込んだ TSファイルの再エンコではまっている。
問題は AACが 5.1ch とか 2ヶ国語のときだけでなく、モノラルのときにも起きる。

テレビさいたまのフランダースの犬を録画したデータ。

===

  Program 29752 |ニ・L~ア
    Stream #0.0[0x111]: Video: mpeg2video, yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], 20000 kb/s, 29.97 tb(r)
    Stream #0.1[0x112]: Audio: mpeg4aac, 48000 Hz, mono, 127 kb/s
  Program 29753 |ニ・L~イ
    Stream #0.0[0x111]: Video: mpeg2video, yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], 20000 kb/s, 29.97 tb(r)
    Stream #0.1[0x112]: Audio: mpeg4aac, 48000 Hz, mono, 127 kb/s
  Program 29754 |ニ・L~ウ
    Stream #0.0[0x111]: Video: mpeg2video, yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], 20000 kb/s, 29.97 tb(r)
    Stream #0.1[0x112]: Audio: mpeg4aac, 48000 Hz, mono, 127 kb/s
  Program 30136 |ニ・L7HBS
    Stream #0.2[0x311]: Video: h264, yuv420p, 320x180, 14.99 tb(r)
    Stream #0.3[0x312]: Audio: mpeg4aac, 24000 Hz, mono, 48 kb/s

===

文字化けしているのは、なんだかわからないが、文字コードを設定しても正しく出ない。

問題は mono の部分。

ffmpeg で変換すると 正常に終了するのだが、再生するとサンプリングレートが半分になって、音が低いだけでなくシンクロできてない。
どうして?!何がおかしいかさっぱりわからない。

仕方がないので、別の方法も試してみることにする。

1)ffmpeg mts → mpeg2ts とaacを抜き出す
2)faad で aacからwavにする。 wavを再生しても音にならない。
3)mpeg2ts と wav をmuxしてみる。 2がおかしいので やっぱりNG。

参った。もう少し 試行錯誤してみるか。。

Last update: 2008年4月 2日 00:00

AACのデコードの問題

普通に変換できるファイルの場合。
音声 AACのストリームが stereo になっている。

Input #0, mpegts, from 'b.mts':
  Duration: 00:00:09.8, start: 2022.343711, bitrate: 16522 kb/s
  Stream #0.0[0x111]: Video: mpeg2video, yuv420p, 1440x1080, 20000 kb/s, 29.97 fps(r)
  Stream #0.1[0x112]: Audio: mpeg4aac, 48000 Hz, stereo, 129 kb/s
  Stream #0.2[0x281]: Video: h264, yuv420p, 320x180, 14.99 fps(r)
  Stream #0.3[0x283]: Audio: mpeg4aac, 24000 Hz, stereo, 48 kb/s
  Stream #0.4[0x114]: Audio: liba52

====

NHKニュース
音声が 3ch(Stream #0.1のところ)になっていて、ffmpeg で変換ができない。
同様に 5.1chの動画も見られない。

Input #0, mpegts, from '080322190202.mts':
  Duration: 00:29:48.5, start: 35342.529289, bitrate: 16147 kb/s
  Stream #0.0[0x100]: Video: mpeg2video, yuv420p, 1440x1080, 24000 kb/s, 29.97 fps(r)
  Stream #0.1[0x110]: Audio: mpeg4aac, 96000 Hz, 3 channels, 1232 kb/s
  Stream #0.2[0x581]: Video: h264, yuv420p, 320x180,  7.49 fps(r)
  Stream #0.3[0x583]: Audio: mpeg4aac, 24000 Hz, stereo, 714 kb/s
  Stream #0.4[0x587]: Audio: liba52
  Stream #0.5[0x130]: Audio: liba52

ffmpegでは 音声は2chまでしかサポートしてないので、
2chの Stream #0.3[0x583] を使えばいいのだが、この項目があったり無かったりなのでプログラムでのチェックが必要である。(かなり面倒くさい。)

faadを使えばよさそうだが、MPEG2TSから ffmpegで AACのストリームだけ抜き出して、
faad でデコードしようとすると エラーで進まない。

 

次は どうすべきか。。。

Last update: 2008年3月21日 15:50

地デジ TSからの変換

地デジから抜いたTSのサイズが大きいし、メディアプレーヤとWEBストリーミングで見られるようにするため、MPEG4に変換する。

フリーオ
↓ ここから先はLINUX
recfriio
b25

ffmpeg   MTS→AVI (MSMPEG4V2  MP3)
Windows MediaPlayerで見るために解像度とビットレートを高めにする。

ffmpeg  AVI→FLV
WebストリーミングするためにFLV形式にする。

----

recfriio と b25

ストリームが20Mbps なので、あっという間に GBサイズのファイルになるので、暗号解除前のファイルを保存するのはHDDがあっという間に無くなる。
そこで、2chの掲示板にものっていたが pipe を使って、暗号解除も同時に行う。

----------------------
DATETIME=`date +%y%m%d%H%M%S`
TSFIFO=/tmp/$DATETIME.fifo
  mkfifo $TSFIFO
  if [ $? -ne 0 ] ; then
     rm -f  /tmp/friio.lock;rm -f $TSFIFO  ←同時起動の検出処理。
     exit 1
  fi
  nice --10 recfriio $CHANNEL $LENGTH $TSFIFO &  ←バックグラウンド実行にする
  nice --20 b25 $TSFIFO $MP4FIFO
  rm -f $TSFIFO
--------------------

こんな感じのスクリプトで処理。
他のアプリで負荷がかかったときにバッファがあふれて処理が止まってしまうので、プロセスの優先順位を調整した。
いろいろ試行錯誤したが、暗号解除処理b25のほうの優先順位をあげたほうがいいみたい。(まだ、実験は必要)

うっかり同時にスクリプトを走らすとUSBやPipeが重複するのでうまく動かない。排他処理をきっちりやる必要がある。

----

MTS→AVI 変換

ffmpegは 1つの入力で 2つの形式の出力を一度でできるのだが、なぜか画像が乱れ、映像と音声がずれるので、一つずつ出力するようにした。
========
ffmpeg -y -i $MP4FIFO \
  -vcodec msmpeg4v2 -s 720x400 -aspect 16:9  -r 29.97 \
  -acodec mp3 -ar 48000 -b 2000k $AVIFILE.avi -map 0.0 -map 0.1  || exit 1
========

ストリームにはワンセグ用のデータも入っているので、意図的にストリームの選択を -map で行っている。
音声にはMP3を選択。ビットレートは2Mbps。

----

AVI→FLV変換

========
ffmpeg -y -i $MTSFILE \
   -sameq -s 648x360 -ar 22050 -b 500k  $FLVFILE.flv || exit 1
========

-------

サーバがPⅢ 700MHzなので、エンコードに非常に時間がかかる。録画時間の10倍くらいかかる。。。
このままでは 録画しつづけたらあっという間にHDDがなくなってしまう。

HDDも増量が必要だが、CPUの高速なマシンを使う必要があるだろうか。。。

Last update: 2008年3月21日 14:52

フリーオ到着

image

 

image

切手代は450台湾ドルですね

image

箱の中身は、本体と説明書。

WindowsPCで試してから設置しようかと思ったけど、いきなりLINUXサーバに接続

DSC01674

写真の一番下のノートPC(PⅢ 700MHz)に接続。紫色で点滅。

DSC01675 DSC01676

LINUXには、フリーオを動作させるための環境を一通り入れてあるので、早速TS抜きを実行した。

抜けてる。。VLC media player に流すと、しっかり再生できる。

Last update: 2008年3月20日 14:37

フリーオは移動中..

フリーオは、いまどこにいるのかな・・・

image

Last update: 2008年3月20日 01:42

台湾を出発

フリーオから発送したというメールが来ていたので、追跡調査をした。
いつの間にか東京に到着していた。
フライトまでわかるんだ。。。

 

image

Last update: 2008年3月18日 11:41

B-CASカードが来た

B-CASカードを再発行依頼したら、A4封筒にて速達郵便で届いた。

2000円の代金引換。
届いたカードを別のテレビに装着して、そのテレビについていたのをフリオに装着する予定。。(まだフリオは到着してないけど)

letter

途中省略

image

Last update: 2008年3月17日 11:17

フリーオ(Friio)を購入!

地上デジタルをDRM無しでHDDに記録できる偉大な製品フリーオを購入した。
フリーオのサイトで今日の20時から発売と聞いていて30分前からPCの前でスタンバイ。

 

5分前くらいから在庫有りにステータスが変わって、この後どうやって注文できるようになるのか、すごく心配だった。

20:01ころ 在庫有りのしたのほうに 注文ページへのリンクとユーザ名とパスワードが出てきた

image

  途中省略

image

サーバが重かったのか、数回入力しなおして、通過。
Paypal での支払い画面になって支払いをする。

----

PayPalを使用してFriio様 (info@friio.com)\29,800 JPY宛てに支払いが実行されましたのでお知らせします。
このクレジットカード取引は、お客様の請求書に「PAYPAL *FRIIO」と表示されます。

取引ID:  
商品価格: 29,800 JPY
合計: \29,800 JPY
注文明細: Friio USB2.0 ISDB-T DigitalTV Receiver

----

支払いが完了したら Paypal からこのようなメッセージが届いた。
でも、フリーオのほうから注文完了のメールが来ない。。

大丈夫かな。。。

HDDレコーダの自作をどうやるか考えるだけでも興奮する。
早く 到着しないかな。。

Last update: 2008年3月15日 13:22

AVCHDからMPEGへの変換(その1)

HDDハンディカムには、本体から動画や静止画をPCに吸い出して管理することと
その動画をDVDに書いたり、他のPCで見るためにMPEG2に変換するソフトが付いてくる。
静止画はJPEGなので別段問題がないが、動画はAVCHDでは他のPCで見れないので変換しなければならない。
付属ソフトでMPEG2に変換してみると、なんとファイルサイズが増えるじゃないの。。
ということで、MPEG4のAVIフォーマットにしてサイズを小さくしつつ、他のPCでも見られるように変換する。
ついでに デスクトップ(PenD 2.8G)で変換作業するとPCの電気代とか 余計なことが気になるので、
急ぐ作業ではないから 常時通電のLinux(Pen3 800M)
にAVCHDファイルを置くとMPEG4-AVIに自動的に変換するツールを作ることにした。

<変換ステップ>

1.M2TS(AVCHD動画とAC3音声)→AVCHD動画とDolbyAC3音声 に分離する
2.AC3音声は WindowsMediaPlayerにデコーダがデフォルトで入ってないので
    AC3→MP3に変換
3.AVCHD動画→YUV  つまりデコード。
    全部をYUVに変換したら、ディスクサイズが膨大に必要になるので、
数フレームだけデコードして

   MPEG4にエンコードするようにする。
4.YUV→MPEG4
    HDDハンディカムは1440x1080で記録し、
これではPCで見るのに大きすぎるから
    720x400にリサイズして エンコードする。
5.MPEG4+MP3→AVIフォーマット
     実際には 4と5は同時に行う。
6.外部からアクセスできるように、Webサーバに配置。

<使ったツールと使用方法>

これは 別途。

<ファイルサイズ比較>
いきなり変換結果。

オリジナル:5952KB

MPEG2:8449KB(PictureBrowserで変換)
MPEG4AVI:3992KB  ←MPEG2の半分!

でも、変換マシンのスペックは低いので、1分くらいのファイルを10分くらいで変換する。

Last update: 2008年1月13日 17:49