added numframes parameter
[swftools.git] / avi2swf / avi2swf.cc
index 82d70c6..8662605 100644 (file)
@@ -48,6 +48,7 @@ static int skip = 0;
 static float audio_adjust = 0;
 static int mp3_bitrate = 32;
 static int samplerate = 11025;
+static int numframes = 0;
 
 static struct options_t options[] = {
 {"h", "help"},
@@ -57,6 +58,7 @@ static struct options_t options[] = {
 {"m", "mp3-bitrate"},
 {"r", "mp3-samplerate"},
 {"d", "scale"},
+{"k", "keyframe"},
 {"p", "flip"},
 {"q", "quality"},
 {"x", "extragood"},
@@ -75,6 +77,10 @@ int args_callback_option(char*name,char*val)
        outputfilename = val;
        return 1;
     }
+    else if(!strcmp(name, "n")) {
+       numframes = atoi(val);
+       return 1;
+    }
     else if(!strcmp(name, "q")) {
        quality = atoi(val);
        if(quality<0)
@@ -87,6 +93,10 @@ int args_callback_option(char*name,char*val)
        flip = 1;
        return 0;
     }
+    else if(!strcmp(name, "k")) {
+       keyframe_interval = atoi(val);
+       return 1;
+    }
     else if(!strcmp(name, "A")) {
        audio_adjust = atof(val);
        return 1;
@@ -150,8 +160,8 @@ void args_callback_usage(char *name)
     printf("-o , --output filename         Specify output filename\n");
     printf("-A , --adjust seconds          Audio adjust: Shift sound -seconds to the future or +seconds into the past.\n");
     printf("-n , --num frames              Number of frames to encode\n");
-    printf("-m , --mp3-bitrate <rate> (kbps)    Set the mp3 bitrate to encode audio with\n");
-    printf("-r , --mp3-samplerate <rate> (Hz)    Set the mp3 samplerate to encode audio with (default: 11025)\n");
+    printf("-m , --mp3-bitrate <kbps>      Set the mp3 bitrate to encode audio with\n");
+    printf("-r , --mp3-samplerate <hz>     Set the mp3 samplerate to encode audio with (default: 11025)\n");
     printf("-d , --scale <val>             Scale down to factor <val>. (in %, e.g. 100 = original size)\n");
     printf("-p , --flip                    Turn movie upside down\n");
     printf("-q , --quality <val>           Set the quality to <val>. (0-100, 0=worst, 100=best, default:80)\n");
@@ -214,11 +224,13 @@ int main (int argc,char ** argv)
 #endif
 
     processargs(argc, argv);
-    if(!filename)
+    if(!filename) {
+       fprintf(stderr, "You must supply a filename");
        exit(0);
+    }
     if(keyframe_interval<0) {
        if(flashversion>=6)
-           keyframe_interval=200;
+           keyframe_interval=20;
        else
            keyframe_interval=5;
     }
@@ -229,15 +241,15 @@ int main (int argc,char ** argv)
        fprintf(stderr, "Couldn't open %s\n", outputfilename);
        exit(1);
     }
-
+    
 #ifdef WIN32
     ret = videoreader_vfw_open(&video, filename);
 #else
     ret = videoreader_avifile_open(&video, filename);
 #endif
 
-    if(!ret) {
-       printf("Error opening %s\n", filename);
+    if(ret<0) {
+       fprintf(stderr, "Error opening %s\n", filename);
        exit(1);
     }
 
@@ -251,6 +263,8 @@ int main (int argc,char ** argv)
     ret = v2swf_init(&v2swf, &video);
     if(verbose)
        v2swf_setparameter(&v2swf, "verbose", "1");
+    if(numframes)
+       v2swf_setparameter(&v2swf, "numframes", itoa(numframes));
     v2swf_setparameter(&v2swf, "quality", itoa(quality));
     v2swf_setparameter(&v2swf, "blockdiff", "0");
     v2swf_setparameter(&v2swf, "blockdiff_mode", "exact");