CMスキップ
元ネタは、foltiaの中の人。
foltiaで全自動CMカットを実現しよう :宗子時空
いつもの通りwineは使わないので、portingされてないかなーと探してみると、MacOSのとlinuxのがあった。
GitHub - essandess/etv-comskip: Commercial Marking and Skipping for EyeTV and iTunes Exports
Comskip for Linux released
MacOSのは、Makefileが何やってるのだかさっぱり分からんので10秒で放棄。
linuxのはbuildがやたら難しいようで、forumが阿鼻叫喚。ひとまずconfigureしてみようと、0.93eを取ってきた。
#forumメッセージの#1をupdateしてくれてるので、最新バージョンは#1を見ればいいです
最初の関門は、gcc-4.8以上が必要ってところ。9.1-STABLEは、gcc-4.2.1なのでした。portsnapして、portmaster -PPして。。。うー、gcc48のpackageがないー。Atomでbootstrap stage1 stage2って、一晩かかるな、こりゃ。
comskipがちゃんと動けば、おれおれDLNAサーバでこのセグメント情報を使えるようにする予定。1つのtsファイルに対して、CMを除いたOP/Aパート/Bパート/EDをそれぞれ別のエントリとして返してやれば、BRAVIAさんはこれを連続再生してくれて、結果的にCMスキップされるはず。検出ポイントがtimeかframeのoffsetで返されるっぽいのが面倒だけど、なんとかbyte offsetに換算して、例によってファイルのextattrに埋め込んでやるのが良さそう。
というわけで、まだ実質何も動いてないぞ。build失敗とか、comskipクラッシュとか、全然検知されーん、とかいろいろありそうな罠。
buildまではできたので追記
- multimedia/ffmpeg(2.0.1)と、lang/gcc48(4.8.2.s20131010)を入れておく。
- devel/argtable2も入れるが、なぜかargtable2.pcがインストールされないので、手で/usr/local/libdata/pkgconfigにコピー。
- 他にも要るかも。怒られたら適当に追加。
% CC=gcc48 CXX=g++48 ./configure
gmake、すると怒られたので、適当に修正。glibcとの差というか。とりあえず下記。
diff --git a/CsEdges.h b/CsEdges.h index d89104f..0b206c9 100644 --- a/CsEdges.h +++ b/CsEdges.h @@ -4,6 +4,8 @@ #include "CsOptions.h" #include "CsExceptions.h" +#include <cmath> + namespace CS { class Edges diff --git a/CsOptions.h b/CsOptions.h index 363cbca..8632440 100644 --- a/CsOptions.h +++ b/CsOptions.h @@ -10,19 +10,19 @@ #define MULTI_EDGE_BUFFER 0 #ifdef __GNUC__ -#include <features.h> -#if __GNUC_PREREQ(4,8) +// // #include <features.h> +// #if __GNUC_PREREQ(4,8) #undef USE_NEW_CPP_CONSTRUCTORS #define USE_NEW_CPP_CONSTRUCTORS 1 -#else -#if __GNUC_PREREQ(4,7) -#ifdef __GNUC_PATCHLEVEL__ -#if __GNUC_PATCHLEVEL__ >= 2 -#undef USE_NEW_CPP_CONSTRUCTORS -#define USE_NEW_CPP_CONSTRUCTORS 1 -#endif -#endif -#endif -#endif +// #else +// #if __GNUC_PREREQ(4,7) +// #ifdef __GNUC_PATCHLEVEL__ +// #if __GNUC_PATCHLEVEL__ >= 2 +// #undef USE_NEW_CPP_CONSTRUCTORS +// #define USE_NEW_CPP_CONSTRUCTORS 1 +// #endif +// #endif +// #endif +// #endif #endif diff --git a/getopt.h b/getopt.h index 91eb54e..bfc6c54 100644 --- a/getopt.h +++ b/getopt.h @@ -133,7 +133,8 @@ struct option errors, only prototype getopt for the GNU C library. */ extern int getopt (int __argc, char *const *__argv, const char *__shortopts); # else /* not __GNU_LIBRARY__ */ -extern int getopt (); +// extern int getopt (); +# include <unistd.h> # endif /* __GNU_LIBRARY__ */ # ifndef __need_getopt
とりあえず起動まで。
$ ./comskip Comskip 0.93e.000, made using avcodec The commandline used was: ./comskip Usage: comskip [-h|--help] [-w|--debugwindow] [-n|--playnice] [--zpcut] [--zpchapter] [--videoredo] [--csvout] [--quality] [--plist] [-m|--demux] [-p|--pid=<string>] [-t|--ts] [-d|--detectmethod=<int>] [-v|--verbose=<int>] [-u|--dump=<int>] [-s|--play] [--timing] [-q|--quiet] [--ini=<file>] [--logo=<file>] [--cut=<file>] [--output=<file>] [--selftest=<int>] <file> [<file>] -h, --help Display syntax -w, --debugwindow Show debug window -n, --playnice Slows detection down --zpcut Outputs a ZoomPlayer cutlist --zpchapter Outputs a ZoomPlayer chapter file --videoredo Outputs a VideoRedo cutlist --csvout Outputs a csv of the frame array --quality Outputs a csv of false detection segments --plist Outputs a mac-style plist for addition to an EyeTV archive as the 'markers' property -m, --demux Demux the input into elementary streams -p, --pid=<string> The PID of the video in the TS -t, --ts The input file is a Transport Stream -d, --detectmethod=<int> An integer sum of the detection methods to use -v, --verbose=<int> Verbose level -u, --dump=<int> Dump the cutscene at this frame number -s, --play Play the video --timing Dump the timing into a file -q, --quiet Not output logging to the console window --ini=<file> Ini file to use --logo=<file> Logo file to use --cut=<file> CutScene file to use --output=<file> Folder to use for all output files --selftest=<int> Execute a selftest <file> Input file <file> Output folder for cutlist Detection methods available: 1 - Black Frame 2 - Logo 4 - Scene Change 8 - Resolution Change 16 - Closed Captions 32 - Aspect Ratio 64 - Silence 128 - CutScenes 255 - USE ALL AVAILABLE Errors: ComSkip: missing option <file> $
続きはまた。。。