事象の水平線

個人的ブックマーク代わりなメモ書きブログ。 地球は丸いよ。↓このへん。

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop
mpeg2TSのファイルがminidlna経由の日立 Wooo(P50-PX5)で直接見れないので、ためしにffmpegでmpeg2PSに変換してみると見れるようになった。
単純に変換するだけなら、コンテナの変換だけで無劣化らしい。
※すべてLinuxでやってます。 Windows版ffmpegもありますがシランス;;(ほとんど変わらない)

変換の仕方はこんな感じ。(より詳しくは、ffmpeg オプション とか ffmpeg Man

$ ffmpeg -i inputfile.ts -f dvd -vcodec copy -acodec copy outputfile.mpeg

-i :入力ファイル
-f :フォーマット dvd とか vob でうまくいった。 それ以上のことはわからない。
-vcodec :映像のコーデック 変換しないときは copy
-acodec :音声のコーデック aacがだめみたいで、元がaacの場合 copyだとうまくいったように見えて再生すると音が出ないし途中で止まる
また、aacを -acodec aac で指定しようとすると今度はffmpegが
Codec is experimental but experimental codecs are not enabled, try -strict -2
Output #0, dvd, to '/media/sdb/share/Video/ts/test.mpeg':
Stream #0:0: Video: mpeg2video ([2][0][0][0] / 0x0002), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 24000 kb/s, 29.97 fps, 90k tbn, 29.97 tbc
Stream #0:1: Audio: none, 48000 Hz, stereo, flt, 128 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (aac -> aac)

Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height
こんなことを言ってErrorで終わる。試せといわれる-strict -2をやっても、Errorなくファイルが出来るが前と同様、無音で止まる。
パラメーターがおかしいといわれてる気がするので -ab 240k -ar 48000 -ac 2 とかつけるが効果なし。
-acodecをmp2かac3にすると大丈夫みたい。これ以上は深追いしない。
ac3にすることで、形式の変換だけでなくエンコード(=劣化)も行われてるのかはわからない。
とおもったけど、テスト映像をWoooでみているとき、ハイエンド(高音)が歪んでいて音が完全におかしい。とおもったら、やはりエンコードされてるみたい。やはりaacとac3ってまったく別フォーマットなのね。よく分かってないけど・・
ビットレートを指定しないと64kbpsが規定値のようで、ステレオだから(なのか?)128kbpsになってる。ビットレートって正直気にしたことない(flacとwavしか使ってない、車だけナビがmp3じゃないとだめなのでmp3だけど)けど、はっきり言ってこの音質は耐えられない。
fs(サンプリング周波数)は規定値が44.1kHzらしいけど、何の指定もなしで元と同じ48kHzになってるのに。

という訳で、PT3で撮ったmpeg2TSをPSに変換するときは

$ ffmpeg -i inputfile.ts -f dvd -vcodec copy -acodec ac3 -ab 448k -ar 48000 outputfile.mpeg

こんな感じにすることにした。
※ac3は448kbpsが最高値らしい。正確なソースは探してない;;
 よくわからないのでとりあえず最高値に・・・
※日本は音声がaacで放流されてる。らしい



mpeg2TSに複数のストリームが入っているとき以下のコマンドで内容が見れる。らしい。

$ ffmpeg -i filename.ts
Program 1066
Metadata:
service_name : ???????????
service_provider:
Stream #0:0[0x111]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p, 1440x1080 [SAR 4:3 DAR 16:9], 20000 kb/s, 30.42 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0:1[0x112]: Audio: aac ([15][0][0][0] / 0x000F), 48000 Hz, stereo, s16, 192 kb/s
Stream #0:2[0x113]: Audio: aac ([15][0][0][0] / 0x000F), 48000 Hz, stereo, s16, 188 kb/s
Stream #0:3[0x114]: Unknown: none ([6][0][0][0] / 0x0006)
Stream #0:4[0x115]: Unknown: none ([6][0][0][0] / 0x0006)
Program 1448
Metadata:
service_name : ???????????
service_provider:
Stream #0:12[0x181]: Video: h264 (Constrained Baseline) ([27][0][0][0] / 0x001B), yuv420p, 320x180, 22.33 fps, 14.99 tbr, 90k tbn, 29.97 tbc
Stream #0:13[0x182]: Audio: aac ([15][0][0][0] / 0x000F), 48000 Hz, stereo, s16, 54 kb/s
Stream #0:14[0x184]: Unknown: none ([6][0][0][0] / 0x0006)
Stream #0:15[0x1030]: Unknown: none ([13][0][0][0] / 0x000D)


Stream #0:0 の映像 と Stream #0:1 の音声 を取り出したい場合は
$ ffmpeg -i inputfile.ts -f dvd -vcodec copy -acodec ac3 -map 0.0 -map 0.1 outputfile.mpeg

この例だとメインプログラムはバイリンガルのデュアルステレオ放送なのかな?
-mapの指定ではなく、-programid [番号]でもOK
その場合の音声は???


あたまに違うプログラムがくっついてると情報を見たい本体ではなくそっちが見れてしまったりするので、その場合は、

$ dd if=inputfile.ts of=outputfile.ts bs=10MB count=50
(ファイルの頭から500MB分をoutputfile.tsに切り出し ※長い全部を使うのは無駄なので頭から一部切り出し
$ tail -c 100MB outputfile.ts > crop.ts
(outputfile.tsの最後から100MBをcrop.tsに切り出し ※切り出した中から本編にかかってると思われる後ろから100MBを切り出し


$ ffmpeg -i crop.ts
すればいいかんじ。


と、色々やった後になんでTSだめなんやろーと日立のHPをみると、
MPEG-2 TS は DTCP-IP 対応のサーバーで無いとだめと書いてある。
→05シリーズの再生可能ファイル形式 http://av.hitachi.co.jp/tv/support/check/w05/avnetwork.html
(トップ以外のリンクは問い合わせしてから張れとあったのでリンクしてません。めんどーなんで)
ん~著作権保護ですか・・・・DTCP-IP対応のPC用サーバーなんて(有料のものしか)ないので、これはあがいてもどうしようもないです。
それにMPEG-2 PSの場合はAACは非対応みたい。てか、書いてない。というかMPEG-2 PS + AACって組み合わせってないものなのか?よく分からないけど。


さらに、デュアルステレオや5.1chのTSをいじっていて気付く。ffmpegはおそらく-acodec ac3 とかするだけで、その他のオプション チャンネル数(ステレオ、モノ、5.1ch)ビットレート なんかはそのまま受け継がれるのかも。
ただ、ストリームが複数あるもの(バイリンガルのデュアルステレオとか)はどちらかが選ばれる。
で、それらのオプションの基準はファイルの頭のデータで決まるのではないか?

なので、頭にCMとかついてるとそのチャンネル数*ビットレートになるのかなと



という訳で、結構グダグダだけど
mpeg2PSにすればWoooでminidlna経由でみれるよ。と。
この際、映像はコンテナの変換だけなので、無劣化&変換もAtomでも大して時間はかからない。(実時間の1/5~1/10)
ただ、音声をAC3あたりに変換しないといけない(=劣化)。



ちなみに、色々と試行錯誤する中で、rpmforge経由でインストールしていた古いバージョンのffmpegから、ffmpeg1.0にコンパイルしてインストールしている。

ffmpeg1.0のインストールは『知らんがな 2012』さんの『FFmpeg 1.0』を参考にした。というかそのまんま。
ただし、最後のffmpegのmakeでハマッテこんなことを言われた。

libavcodec/libavcodec.so: undefined reference to `x264_encoder_open_125'
collect2: ld returned 1 exit status
make: *** [ffserver_g] Error 1
make: *** Waiting for unfinished jobs....
libavcodec/libavcodec.so: undefined reference to `x264_encoder_open_125'
collect2: ld returned 1 exit status
make: *** [ffprobe_g] Error 1
libavcodec/libavcodec.so: undefined reference to `x264_encoder_open_125'
collect2: ld returned 1 exit status
make: *** [ffmpeg_g] Error 1
libavcodec/libavcodec.so: undefined reference to `x264_encoder_open_125'
collect2: ld returned 1 exit status
make: *** [ffplay_g] Error 1


結論だけ書くと、x264の古いのの一部が残っていたためにだめだったみたい。
yum remove x264してからx264を入れなおしたらあっさりmakeが通った。
スポンサーサイト

PageTop

コメント

 ※
 ※
管理者にだけ表示を許可する
  ※ 必須項目です

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。