OSDN Git Service

add -c option
authorHiroshi Yamashita <piro@users.sourceforge.jp>
Sun, 22 May 2011 13:40:53 +0000 (22:40 +0900)
committerHiroshi Yamashita <piro@users.sourceforge.jp>
Sun, 22 May 2011 13:40:53 +0000 (22:40 +0900)
README
cmcheckwave.c

diff --git a/README b/README
index bcffa20..7371226 100644 (file)
--- a/README
+++ b/README
 
   出力は標準出力に区切りとカット用のコマンドサンプルが出力されます。
 
+  
+  例: mp4ファイルを読み込み一連のカット処理を実行。サムネイル出力も行う。
+      再処理のため判定内容ファイルを 録画ファイル.mp4-sh として保存します。
+  cmcheckwave -t -x 録画ファイル.mp4 > 録画ファイル.mp4-sh
+  
+
   コマンドのオプション
   -b ファイル名    :出力するコマンドに使う元ファイル名を指定します。
                     指定されない場合mp4boxのsplitコマンドのみ出力します。
   -v 判定ボリューム:無音と判定する最小ボリューム デフォルト 9
   -a 音声の再エンコードコマンドを出力しない(MP4のカット結合のみ)
   -t サムネイル出力用コマンドを出力
+  -x コマンドテキストを出力せず、そのまま実行します。(-bのファイル名必須)
 
 --以下未実装
-  -x コマンドテキストを出力せず、そのまま実行します。(-bのファイル名必須)
+  -c コマンドテキストを読み込み出力したサムネイルファイルの削除やmp4ファイルの
+     リネームなどを行う一連のコマンドを出力(チェック済みファイルの置き換えに利用)
 
   判定は無音の秒数のみでみるため不正確です。そのため出力をファイルに保存して修正
   してCM判定を調整することができます。
index 133a290..43f458f 100644 (file)
@@ -61,6 +61,7 @@ static int defmax=9;
 static int thumb=0;
 static int txtrecheck=0;
 static int cmdexecute=0;
+static int checkcomplete=0;
 
 static char *MP4BOXCMD="/usr/local/bin/MP4Box -quiet -noprog";
 static char *MP4BOXCMDRAPSTR="Adjusting chunk start time to previous random access at ";
@@ -127,6 +128,65 @@ int checkMP4RAP(int stsec,int edsec)
        else return stsec;
 
 }
+int cmpinfo(int mcnt)
+{
+       int i;
+       char *cmdptr,readbuf[20];
+       TCLIST *cmdlist;
+
+       if (!wkfilename) return 0;
+
+       cmdlist = tclistnew();
+
+       asprintf(&cmdptr,"#!/bin/sh");
+       tclistpush2(cmdlist,cmdptr);
+       free(cmdptr);
+
+
+       for(i=0;i<mcnt;i++) {
+               if (thumb) {
+                       asprintf(&cmdptr,"rm -f %s-%d.png",wkfilename,i);
+                       tclistpush2(cmdlist,cmdptr);
+                       free(cmdptr);
+               }
+       }
+       // check new mp4
+       asprintf(&cmdptr,"%s-new.mp4",wkfilename);
+       FILE *fp;
+       fp = fopen(cmdptr,"rb");
+       if (fp==NULL) {
+               //ファイルなし
+               return 0;
+       }
+       fread(readbuf,sizeof(readbuf),1,fp);
+       if (!strstr(readbuf+4,"ftypisom")) {
+               //mp4じゃない感じ
+               return 0;
+       }
+       fclose(fp);
+       asprintf(&cmdptr,"mv %s-new.mp4 %s",wkfilename,wkfilename);
+       tclistpush2(cmdlist,cmdptr);
+       free(cmdptr);
+
+       asprintf(&cmdptr,"rm -f %s-sh",wkfilename);
+       tclistpush2(cmdlist,cmdptr);
+       free(cmdptr);
+
+       for(i=0;i<tclistnum(cmdlist);i++) {
+               if (cmdexecute) {
+                       FILE *pp;
+                       char pbuf[1024];
+                       pp = popen(tclistval2(cmdlist,i),"r");
+                       if (pp==NULL) {continue;}
+                       while(fgets(pbuf,1024,pp)!=NULL){
+                       }
+                       pclose(pp);
+               }
+               else
+                       printf("%s\n",tclistval2(cmdlist,i));
+       }
+
+}
 int dumpinfo(int mcnt)
 {
        int honstart,hcnt,totalsec;
@@ -256,7 +316,7 @@ int dumpinfo(int mcnt)
                if (thumb) {
                        pre=0;
                        for(i=0;i<mcnt;i++) {
-                               asprintf(&cptr,"mplayer -ss %.2f -frames 1 -vo png  %s ; mv 00000001.png %s-%d.png",(pre + (m[i].stsec-pre)/2)/1000.0,wkfilename,wkfilename,i);
+                               asprintf(&cptr,"%s -ao nul -ss %.2f -frames 1 -vo png  %s ; mv 00000001.png %s-%d.png",MPLAYERCMD,(pre + (m[i].stsec-pre)/2)/1000.0,wkfilename,wkfilename,i);
                                tclistpush2(cmdlist,cptr);
                                pre = m[i].stsec;
                        }
@@ -324,6 +384,9 @@ int rechecktext(FILE *f)
                }
 
        }
+       if (checkcomplete) {
+               return cmpinfo(cnt);
+       }
        txtrecheck=1;
        return dumpinfo(cnt);
 
@@ -514,7 +577,7 @@ int main(int argc, char *argv[])
        char *tmpenv;
        ret = -1;
 
-       while ((ch = getopt(argc, argv, "adtxb:m:v:")) != -1){
+       while ((ch = getopt(argc, argv, "acdtxb:m:v:")) != -1){
                switch (ch){
                        case 'a':
                                noaudioencode=1;
@@ -537,6 +600,9 @@ int main(int argc, char *argv[])
                        case 'x':
                                cmdexecute=1;
                                break;
+                       case 'c':
+                               checkcomplete=1;
+                               break;
                        default:
                                usage();
                }