ナマケモノの家

ナマケモノ

お知らせ

本ソフトウエアは、開発中止とします。 後継は、改良版である CMcut4U2 です。

背景

従来 Unix系OS 上で 自動CMカットを行おうとすると comskip ぐらいしか選択肢が無かった。 しかし comskip は精度が悪かったり、 誤判定した時のリカバリが面倒だったりしたので、 自作することにしました。

目的

本プログラムは、「PT2等で録画した mpeg2tsファイルを H.265(HEVC) にエンコードしつつ同時に自動で CMカットを Linux(Unix 系 OS) 上で実行する」為のものです。

特徴

処理概要

CMカット単体の処理の概要は下記の通りです。

これを、TSdir で指定したディレクトリ以下の .ts ファイルに対して繰り返し、 Outdir で指定したディレクトリに mp4 ファイルを出力します。

実行に必要な環境

インストール

下記のコマンド例は、Ubuntu でのものです。 他の OS の場合は、コマンドやパッケージ名は適宜変更して下さい。

ruby

$ sudo apt install ruby
$ sudo apt install ruby-gtk2
$ sudo gem install wav-file

python

$ sudo apt install python-dev python-numpy

ffmpeg & mpv

$ sudo apt install ffmpeg
$ sudo apt install mpv

opencv

opencv は公式パッケージには無いので、 opencvの 公式ページ の手順に従ってソースからインストール。

$ sudo apt install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
$ sudo apt install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
$ mkdir tmp ; cd tmp
$ git clone https://github.com/opencv/opencv.git
$ git clone https://github.com/opencv/opencv_contrib.git
$ cd opencv ; mkdir build ; cd build
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
$ make
$ make install

本ソフト

  1. インストールするディレクトリを決める。( 例:~/video/CMcut4U )
  2. そこに git-hub から https://github.com/kaikoma-soft/CMcut4U/archive/master.zip をダウンロードして展開する。 または
     git clone https://github.com/kaikoma-soft/CMcut4U.git .
    

    を実行する。

  3. 環境変数 PATH に上記のディレクトリを追加する。
  4. const.rb の中身を自分の環境に合わせて、書き換える
パラメータ名 意味
Top TSファイル等のデータを格納するディレクトリ
CPU_core CPUのCPUのコア数
$ffmpeg_bin ffmpeg の実行ファイル名
$nomalSize エンコード後の本編画面サイズ
$comSize エンコード後の CM 画面サイズ
$python_bin python の実行ファイル名
  1. 入力ファイル、出力ファイル、作業用ディレクトリを作成する。
    ( 例は、Top がそのままの場合 )
     % mkdir $HOME/video
     % cd $HOME/video
     % mkdir TS mp4 logo work
    

ディレクトリ構造

入力データ( mpeg2ts ファイル )

入力の TS ファイルは、TS ディレクトリ以下に番組単位のサブディレクトリを 作りその中に置く。

Top
├── TS
│   ├── 番組名-1
│   │   ├── タイトル #01.ts
│   │   ├── タイトル #02.ts
│   │   └── ...
│   ├── 番組名-2
│   │   ├── タイトル #01.ts
│   │   ├── タイトル #02.ts
│   │   └── ...
│   └── ...
│       ├── ...
│       ├── ...
│       └── ...

出力ファイル(mp4ファイル)

出力の mp4 ファイルは Top/mp4 以下に TSディレクトリと相似したものが 生成される。

使用方法

  1. エンコード対象の TS ファイルを「TS/番組名」ディレクトリの下に置く。
  2. cmcuterAll.rb を実行する。
    この段階では、logoファイルが存在しないので、スクリーンショットと wav ファイルを作業ディレクトリに作っただけで、エラーで止まる。
  3. logoファイルを作成する。 ( 詳細はこちら を参照して下さい。)
    1. スクリーンショットが保存されたディレクトリを指定して logoAnalysisSub.py を実行する。
       % logoAnalysisSub.py --dir work/番組名/タイトル/SS
      
    2. スクリーンショット画像が表示されるので、 ロゴマークが明瞭な時点の画像を保存する。

      キー 意味
      j 60コマ( 30秒)飛ぶ
      k 60コマ( 30秒)戻る
      s 現在の画像を保存する。
      b 前のコマ( 0.5秒)に戻る
      q 終了
      上記以外 次のコマ( 0.5秒)に進む
    3. 保存した画像の下部(白黒+強調)部分のロゴマークを を gimp を使って、最小限の大きさで矩形領域の切り抜き (「ツール」-> 「変形ツール」-> 「切り抜き」)をする。
    4. 「画像」-> 「モード」-> 「グレイスケール」で、グレイスケール化する。
    5. logo ディレクトリの下に、画像を保存する。
  4. logo-table.yaml を書き換える。
    TS ディレクトリの下に logo-table.yaml が自動作成されているので、 その中の logofn パラメータを、上で保存したlogo ファイル名に書き換える。
       XXXXX:
           :logofn: YYYY.png
           :cmlogofn:
           :position: top-right
           :chapNum: 6
           :duration: 465
    
  5. 再度 cmcuterAll.rb を実行する。

実行コマンドの説明

設定ファイルの説明

特殊ファイルの説明

カスタマイズ

cmcuterAll.rb と同じ場所に、override.rb という名前でファイルを置くと、 メソッドのオーバーライドが可能です。
具体的にはハードウエアエンコードを使用したい場合などに用います。

性能

既知の問題点