« PT2で録画したMPEG2-TSファイルの再生環境について&録画鯖の話 | トップページ | HYBRID W-ZERO3の設定をする »

2010年2月 6日 (土)

PT2で録画したMPEG2-TSファイルをsplitしたりトランスコードをする

このエントリーの続き.

録画したMPEG2-TSファイルの不要部分(CMとかではなく,ワンセグのデータ等)をカットして容量を小さくする話と,H.264へトランスコードしてより容量を小さくしようという話.

既にWindowsでは手法がかなり確立されており,ある程度ルーチンワークに近い部分があります.また,手軽に確実に行いたいという話であれば,TMPGEncを購入して一気にやってしまう方が,試行錯誤する時間を節約できるので吉.ただ,今回はLinuxだけで…ということに拘ってみた.

○不要な情報をカットする

録画したMPEG2-TSファイル(MPEG2-TSコンテナ)には,フルセグの映像・音声データだけでなく,ワンセグやその他データが多重化されて含まれています.しかし殆どの人にとっては,フルセグ以外の情報は不要です.そこでメインのストリームだけ取り出して保存しましょうという話.

Windowsであれば,TsSplitterというソフトを使用するのが定番.実に高機能です.しかしオープンソースでないこともあり,Linux用に移植されていません.そのため,Linux上でwine(Windows用のソフトをLinux上で動かすソフト)を使用して動かすのが一般的.

しかし今回はネイティブアプリのみを使用してLinux上で一連の作業を行いたいので,別の物を探すことにしました.そして見つけたのは『tssplitter_lite』というソフト.TsSplitterの機能のうち,任意のsidを取り出す機能のみ実装した物.開発は今も進行中.ありがたや,ありがたや.

インストール方法は以下の通り.

wget http://hp.vector.co.jp/authors/VA038175/download/tssplitter_lite.zip
unzip tssplitter_lite.zip
cd tssplitter_lite
make
cp tssplitter_lite/tssplitter_lite /usr/local/bin

使い方は,『tssplitter_lite <オリジナルのTSファイル名> <出力TSファイル名> <SID>』です.不要部分をカットすると,大体8割くらいの容量になります.SIDの調べ方は…そのうち自動化するプログラムでも書こうかな.

ちなみにffmpegにそのまま生TSを食わせると,以下のような感じで表示されます.

Input #0, mpegts, from 'hogehoge.ts':
  Duration: 00:50:24.70, start: 9411.739256, bitrate: 15428 kb/s
  Program 2064 MBS毎日放送
    Metadata:
      name            : MBS毎日放送
      provider_name   :
    Stream #0.0[0x111]: Video: mpeg2video, yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], 20000 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0.1[0x112]: Audio: libfaad, 48000 Hz, 1 channels, s16, 129 kb/s
    Stream #0.2[0x114]: Data: 0x0006
    Stream #0.3[0x840]: Data: 0x000d
    Stream #0.4[0x850]: Data: 0x000d
    Stream #0.5[0x857]: Data: 0x000d
    Stream #0.6[0x858]: Data: 0x000d
    Stream #0.7[0x859]: Data: 0x000d
    Stream #0.8[0x860]: Data: 0x000d
    Stream #0.9[0x85e]: Data: 0x000d
    Stream #0.10[0x85f]: Data: 0x000d
    Stream #0.11[0x86e]: Data: 0x000d
  Program 2065 MBS毎日放送2
    Metadata:
      name            : MBS毎日放送2
      provider_name   :
    Stream #0.0[0x111]: Video: mpeg2video, yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], 20000 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0.1[0x112]: Audio: libfaad, 48000 Hz, 1 channels, s16, 129 kb/s
(中略)
  Program 2066 MBS毎日放送3
    Metadata:
      name            : MBS毎日放送3
      provider_name   :
    Stream #0.0[0x111]: Video: mpeg2video, yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], 20000 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0.1[0x112]: Audio: libfaad, 48000 Hz, 1 channels, s16, 129 kb/s
(中略)
  Program 2448 MBS毎日放送携帯
    Metadata:
      name            : MBS毎日放送携帯
      provider_name   :
    Stream #0.15[0x281]: Video: h264, yuv420p, 320x180, 14.99 fps, 14.99 tbr, 90k tbn, 29.97 tbc
    Stream #0.14[0x283]: Audio: libfaad, 24000 Hz, 1 channels, s16, 45 kb/s
    Stream #0.16[0x287]: Data: 0x0006
  Program 2199 Gガイド
    Metadata:
      name            : Gガイド
      provider_name   :
    Stream #0.12[0x7f1]: Data: 0x000d
    Stream #0.13[0x7f2]: Data: 0x000d

上記のような場合は『Program 2064』を取り出すということになります.
あ,ちなみに後述するパッチを当てないと上記のようにならず,日本語表示部分が文字化けしますので注意.

[2010/09/22 追記] 分離をする場合,ffmpegのprogramidオプションでIDを指定し,-vcodec copy -acodec copyでうまく行くとのこと.ffmpegは奥が深いですな.このオプションの存在,知らなかった.詳しくは,こちらこちらに解説されていますので,ご覧下さい.

 H.264(x264使用)にトランスコードする

不要部分をカットしても,まだ容量的には非常に大きい.そのため,ライブラリ化というか,長期保存をしようとしたら,H.264にトランスコードし,よりコンパクトなサイズの物にしなければ現実的ではありません.なお,トランスコードするということは,(目に見えて分かる分からないは別として)オリジナルよりも画質が低下することを意味します.『綺麗なままで残したいんだ!』という方は,TSファイルのまま残した方が良いでしょう.

準備するものは,ffmpegだけでOKです.

以前,CentOSへffmpegをインストールする方法に関してまとめましたが,今回は最新のlibx264とffmpegを取得し直すと共に,ffmpegのビルド時のパラメータを一部変更してビルド&インストールし直す必要があります.

何はともあれ,先のページに示すような方法でビルド環境を作り,そしてlibx264とffmpegを再取得してください.

次にffmpegビルド時に,次のようなconfigureパラメータにしてください.

./configure --enable-shared --enable-gpl --enable-nonfree --enable-postproc --enable-avfilter --enable-avfilter-lavf --enable-pthreads --enable-libdirac --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --disable-decoder=aac

キモは,『--disable-decoder=aac』を付けてffmpegの内蔵aacデコーダをオフにし,AACのデコードにはlibfaadを使わせることと,『--enable-libamr-nb』と『--enable-libamr-wb』が無くなったのでその対応です.

そして以下の(一部)日本語化パッチを当ててください.内容的には,こちらのページで公開されていたパッチの日本語化部分を抜き出し,不足分を足した物になります.

「ffmpeg-jp-201001.patch」をダウンロード

実際のffmpegを使用したエンコードは,こちらのページを参考にして行いました.前述のsplitしたtsファイルを食わせてみてください.

なお,最新のffmpegでは『-vpre』は絶対パスでの指定ではなくなっているので,先のページを参考にする場合,プリセットファイルは『/usr/local/share/ffmpeg/libx264-hq-ts.ffpreset』に格納した上で,『-vpre libx264-hq-ts』と書き換えて実行してみて下さい.

これでかなり綺麗なmp4ファイルが出来上がります.容量的には,1/5くらいにはなります.

ただ,前述したとおり,オリジナルのTSファイルよりもシャープさが落ちますので,ディスク容量が許すのであれば,オリジナルのまま保存しておきたいかな.

○問題点

と,いうことで,一応最低限の処理はLinux上で行えるようになりました.しかし,番組内や挿入されているCM等によって音声の切り替えが頻繁にある物の場合,トランスコード時にffmpegが盛大にエラーを吐いて死にます.

解決策としては,tssplitterで-SEPAオプションを使って行うように,音声チャンネルが変わった所でTSを分割し,必要な所をつなぎ合わせて…という作業でしょうか.

まだLinux上でこれを行うための良いツールを見つけられていないので,『無い物は作ろう』かなぁと思い始めています.

と,いうことで,4回に分けてポストしましたが,Linuxでも快適な地デジ録画環境が構築できました.興味のある方は,是非1日でも早くお試しになることをお勧めします.快適過ぎて,『もっと早く作っとけば良かった』と,思うことでしょう.

|

« PT2で録画したMPEG2-TSファイルの再生環境について&録画鯖の話 | トップページ | HYBRID W-ZERO3の設定をする »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/198640/47488248

この記事へのトラックバック一覧です: PT2で録画したMPEG2-TSファイルをsplitしたりトランスコードをする:

« PT2で録画したMPEG2-TSファイルの再生環境について&録画鯖の話 | トップページ | HYBRID W-ZERO3の設定をする »