事象の水平線

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

上記の広告は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
日立が自社TVの生産を終了することも発表し、すでに一世代前の型になったXP05ですが、エコポイントがあるうちにそれなりの値段で買いました。

で、ここ(どこ?)へ至った経緯は長いので端折って、XP05でPCの中のムービーファイルを見ようとしたら、結構大変だったぞ。の備忘録です。(が、実は道半ば)

まず、紆余曲折あってとりあえず数世代前のWindowsXPノートにWooo標準のDLNAサーバーソフトCyberlink Media Serverを入れました。
日立のHPからWoooのユーザー登録をして、ごにょごにょするとただでDLして使えます。
で、この手のソフトは例に漏れずFireWallにぶち当たるので、FireWallの例外設定をします。
例外設定で許可するアプリは CLMSServer.exe です。
(C:\Program Files\CyberLink\MediaServer\Kernel\DMS\CLMSServer.exe)
サイバーリンクのFAQに書いてあります。
→http://jp.cyberlink.com/prog/support/cs/product-faq-content.do?id=7656&prodId=89&prodVerId=-1

まぁ、これ自体はたいしたことはないです。
(FAQは見たのにもかかわらず、早合点してアプリ本体の MediaServer.exe を例外設定し悩んでサポートに電話したのは内緒です。)

さて、大変だったのはここからです。

ノートPCの中にはうちの猫をとった映像があるのですが、ビデオカムで撮ったものではなく、監視カメラで撮ったものなので色々と普通じゃないファイルになっています。

なもんで、PCでは楽勝で見れてもXP05には全く相手にされません。

で、ググルと なにやら mpeg2じゃないといけないとか、変換するには XMedia Recode がよさそうだとか書いてあるので、斜めに読みながらやってみますが、 XMedia Recode がクラッシュしたり全くだめなので、 AviDemux でごにょごにょうにょうにょ試行錯誤してみたら うまいこといったので 以下その手順です。

ちなみに、先にも書いた通り 元のファイルが 352×280px 15fps というワケワカメな形式なので色々と察してやってください。
AviDemuxのインストールとかは簡単&ほかに説明の丁寧なHPがあるので省略。

AviDemuxを起動し、ファイルからオープン でも、 ドラッグ&ドロップ でも いいのでムービーファイルを読み込ませます。
ファイルによっては パックされてるからアンパックしますか? とか インデックスがうんたらなので作りますか? とか 聞かれるので Yes でも No でも 好きなほうを選びます。
Yesだと時には時間がかかります。 でも Noだと 後でだめなときもあるので、そのときは 一からやり直してYesで読み込んでください。 ちなみに、アンパックだとかインデックスだとか何のことだか理解してません。orz



  設定その一
avidemux1

  設定その二
Videoの下の Filters をクリックし 必要に応じて解像度とフレームレートを変換します。
このとき 解像度が あまりありえないものだとおかしな表示になります。
(352×280のままのときはテレビ画面の上半分に2画面になって表示されてました。)
なので最終的に、ありがちな
720×480
1280×720
1920×1080
になるようにするといいみたいです。
また、フレームレートは29.97でないとだめみたいです。
    (昔はドロップとかあったけど今はどうなんやろかー・・・ぼそぼそ)

avidemux2
ちなみに この設定は、
Crop >> 映像の上下に若干黒帯がついているので それを切り取り
Add black borders >> (およそ)16:9になるように横に黒帯を追加
Resize >> 適度に拡大 (小さいままだとWooo上で変な表示に・・・)
Resample fps >> フレームレートを29.97fpsへ
  です。

  設定その三
Audioの下の Filters をクリックし サンプルレートを48kHzへ (48kじゃないとだめみたいです)
avidemux3

これで、後は Save Video で 拡張子を.mpegで保存したら何とか見れました。

まぁ、要はDVD-Video規格のようなんですけど・・BD世代になって詳しいところは完全についていけてないので、まぁ、こんなんでとりあえずは動くぞと・・・


でも、実は北森セレロン2.8G機が眠っているので、それにLinuxを入れてSambaを入れてDLNAサーバーを・・・と色々やろうとしていたのですが、Ubuntuのインストールでというか、CDブートでこけるのでPuppyLinuxを試したり、PuppyLinuxにMiniDlnaを入れてもうまく動かなかったり、Linux沼にハマッテてんぱってたので色々調べてみたらDVD-Rドライブがリコール対象品でしたorz
ので、とりあえず一番簡単に動きそうなWindowsXP+Wooo純正DLNAサーバーでの実験でした;;

<<追記>>
UbuntuとminiDLNAでファイル再生『Ubuntu + minidlna = Woooでファイル再生 minidlnaをインストール
CentOSとminiDLNAでファイル再生『CentOS6.0 に minidlna インストール

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