CMカットの自動化を求めて
以前comskipのオプションをうまく使えば、CMカットが楽勝だと聞いていろいろ試してみた。
関連記事
foltiaで全自動CMカットを実現しよう :宗子時空
CMスキップ - だえもんだもん
一応自前の環境、Debian GNU/Linuxでビルドできるようにcomskipを修正した。
comskipは非常にソースが汚く苦労した。
ビルド方法等
ソースは以下のgithubに置いています
GitHub - hangingman/comskip: Comskip, a free MPEG commercial detector
ビルドは以下のようにすればできるはず(x264,argrable2,pthread,libmに依存する)
$ git clone https://github.com/hangingman/comskip.git $ cd path/to/comskip/ $ git submodule init $ git submodule update $ ./bootstrap // bootstrapでうまく行かなければ $ autoheader; aclocal; automake --add-missing; autoconf # ffmpegのディレクトリに移動してビルドする $ cd ffmpeg $ ./configure --enable-gpl --enable-version3 --disable-stripping --enable-libx264 --enable-shared $ make && make install # comskip本体をビルドする $ cd ../ $ ./configure $ make && make install # comskipのラッパースクリプトを用意しているので使ってみてください # 実行するとCMカット、分離、結合まで自動でできます $ cd misc/ $ chmod +x comskip_wrapper.sh $ ./comskip_wrapper.sh comskip.ini kill_la_kill_#6.ts
なぜffmpegをcomskip以下に持っているかというと、comskipがffmpegの特定バージョンに依存しているからだ。
comskipディレクトリのconfigureからffmpegのconfigureを呼べるように細工しようとしたが、ffmpeg側でconfigure.acを
配布していないため、不可能だった。
だから、インストール方法としてはffmpegを/usr/local以下にインストールした後、それに依存したcomskipをビルド
するのが良いと思い、そうしている。
テスト
comskip.iniは以下のものを使用する
detect_method=255 min_show_segment_length=125 punish=28 output_vdr=1
この設定だとcomskipの走査終了後に.vdrファイルができてCMカットしやすい。
検証のため、自作のネイティブ版とwineで動かしたcomskipに、同じtsファイルを食わせてみた。
使用したファイルはキルラキル5話。
ネイティブ版(GNU/Linux elf 64)の起動
$ LD_LIBRARY_PATH=/usr/local/lib comskip -t -d 255 -v 2 \ --zpcut --zpchapter --videoredo --csvout --quality \ --plist --ini=./comskip.ini ./3160-5-20131102-0310.m2t
できあがった.vdrファイル
0:00:21.38 start 0:01:49.37 end 0:04:13.65 start 0:05:42.84 end 0:12:51.77 start 0:15:16.31 end 0:24:25.43 start 0:30:36.63 end
$ wine ~/.wine/drive_c/Program\ Files/comskip/comskip.exe \ -t -d 255 -v 2 --zpcut --zpchapter --videoredo --csvout \ --quality --plist --ini=./comskip.ini 3160-5-20131102-0310.m2t
できあがった.vdrファイル
0:00:21.38 start 0:01:49.37 end 0:04:13.65 start 0:05:42.84 end 0:12:51.77 start 0:15:16.31 end 0:24:25.43 start 0:30:36.63 end
結論
しかし、残念なことに本当のCMの位置と、.vdrファイルのCMの位置は全く一致していない。
(※目視確認でのアニメ本編は 00:01:40:00ごろ開始である。comskipの検出ガバガバじゃねえか…)
つまりcomskipはCMを検出できていない or 誤検出している。
とりあえずこの人はできるとレスしてるが、実際comskip使ってCM検出できるんでしょうかね…
536 :名無しさん@編集中:2013/10/05(土) 22:23:02.74 id:iNl1yeOz
comskip81_056を一日弄っていたけど、CMスキップ楽勝だね、アニメじゃなくても。
先人に感謝。
detect_method=255、min_show_segment_length=125、punish=28
.vdr(output_vdr=1)で出力すると加工は楽です。
自分はバッチでchapters.txtにしてから、空橋さんの「gen_.chapters.txt_to_.chapter(チャプタースキップ用)b.bat」を通してTVTplayで見ている。
Avisynth要りません。まあcomskipはtrimコマンド出力できるので入用な人は大丈夫ですね。
続報
前から気になっていた自動TSエンコードバッチ(AutoConvert)を配布しておられるらんだむけんきゅうじょさんのcomskip.iniを使用させていただいたところ、割とうまいことCMを検出できた。
AutoConvert – 自動TSエンコードツール – – らんだむけんきゅうじょ
出力結果
0:00:00.50 start 0:01:38.33 end 0:13:16.16 start 0:15:16.31 end 0:27:51.23 start 0:30:36.63 end
出力結果はCMの開始・終了とピタリ一致している。(最初のスタート部分以外)
これをバッチ処理でffmpegに渡せばfoltiaとも連携できそうだ。
【課題】
・最初と最後の部分のCM判別が緩い、そのためOP前と次回予告前に少しCMが入るようだ
→ 最初と最後のデータだけもう一度comskipで検出させる?
・bashでffmpegに渡す動画時間の計算を行わせたところ、ミリ秒単位では計算できなかった
→ Perlとか使う?
2013/12/31 追記
・UbuntuやMintでcomskipがビルドできない問題に対処したパッチをマージしました。
shirase氏、2ちゃんねるの【視聴・録画】Linuxでテレビ総合8【デジタル/アナログ】の人ありがとう!
2014/01/26 追記
・Fedora 17 x86_64(つまりRHEL系)でのビルドを可能にしました、GitHubの最新を使えばビルドできるはずです。ただし、昔のCentosだとカーネルが古くてビルド不可と思われる、Centos5系は多分ダメ。
・comskip_wrapper.shの新しいパッチをいただきました。ありがとうございます。
可能になったこと
・日本語 or スペース混じりのファイルのCMカット結合処理
・センチ秒単位のCMカット
・以前書いたavconvとの連携処理をバッチ化したシェルをGitHubに貼っておきます。参考になればどうぞ。
comskipとffmpeg(avconv)連携スクリプト · GitHub
wine + Murdoc Cutter + avconvでCMカット - なんとな~くしあわせ?の日記
・CMカットの成績
試験として「這いよれ!ニャル子さんW」「はたらく魔王さま!」「ココロコネクト」等のアニメをcomskipに食わせてみたが、いずれもほぼCMがちゃんと切れている。(…次回予告も、画面右上にロゴがあれば検知できているように思う)しかし、今のところドラマとか一般的な放送は試しておらず、pt2以外の環境で録画したTSファイルについてもよくわかっていない。生のTSファイルのデータはどれも変わらないと思っていたのだが、comskipの使用報告を見るに何か環境の違いが原因でCMカットの精度が変わっているように思う。
2014/07/22 追記
・argutable2へのライブラリの依存関係を減らしたソースをマージしました、ありがとうございますgleenteaさん