「2位じゃ駄目なんですか!?」蓮舫様になじられる自動CMカットツールrecipe --レンボーでもランボーでもなく、レンホーなんだからねっ! 【コレは何?】 1フレームも落としちゃダメ、2位じゃ駄目な人のための自動CMカットツール作法説明。 【言い訳】 (ほぼ)自動CMカットツール logoskip.exe のソースコードは作者の100%書き下ろしでは ないので、公開できません。そのかわり、作り方を説明します。 【材料】 avs2yuv ソースコード comskip ソースコード (ホームページのsvnからチェックアウトできます) 【方法】 avs2yuv ソースコードを読んでavisynthの使い方を理解します。 comskip ソースコードのcomskip.cppから double CheckStationLogoEdge(unsigned char* testFrame); void LoadLogoMaskData(char *logofilename); の二つの関数を抽出して、コンパイルできるように整形します。 これで、avisynthでデコードしてCheckStationLogoEdgeにフレームを渡す準備 ができました。 avs2yuv を変形させて、こんな感じでロゴ検出ループを回します。   // check clip start has logo   for (frm = 0; frm < 15; frm++) {     try {       f = clip->GetFrame(frm, env);  //Get picture via avisynth       data = f->GetReadPtr(PLANAR_Y);     } catch(AvisynthError err) {       if(frm >= 0)         fprintf(stderr, "\nAvisynth error at frame %d:\n%s\n", frm, err.msg);       else         fprintf(stderr, "\nAvisynth error:\n%s\n", err.msg);       getch();       exit(1);     }     d_corr = CheckStationLogoEdge((unsigned char*)data);  //logo detection            f.~PVideoFrame();     //ここで、ゴニョゴニョ判定処理をする。   } 検出シグナル d_corr はわりと不安定なので、logoskip.exe の場合、平滑化しています。 あとは、ロゴ区間に入ったフレームと、ロゴ区間を脱出したフレームを一行づつテキストファイルに記録し ていきます。 検出ループが終了した後、テキストファイルを読んで、ロゴ区間を整理してから、*.cpfのフォーマットに 整形して出力します。 2位じゃ駄目な人なら、この程度の説明でご理解いただけますでしょうか。 シーンチェンジ検出はMacではやったことがあるんですが、動き適応型フロア設定とかしないと変なところ で切れてしまいます。ワイプやフェードは検出しないし、計算コストも高いかも。。 comskip のソースを読むと色んなファクターをチェックしてます(comskip のソース、読み難杉)。 black frame, silence, , scene change...が、結果としてあのざまです(放送のお作法がかなり違う)。 【タイトルについて】 ののしられるツールは単なるネタだったのですが、政治偏向との指摘があるようなので、バランスをとる 目的で、二大政党のもう一方の雄(あれっ、雌?)に登場していただきました。 だだし、一連のツールおよびテキストはフィクションであり、登場する人物、団体、組織名は架空の物です。