@@ -106,6 +106,11 @@ static char * whisper_param_turn_lowercase(char * in){
106106 return in;
107107}
108108
109+ static char * requires_value_error (const std::string & arg) {
110+ fprintf (stderr, " error: argument %s requires value\n " , arg.c_str ());
111+ exit (0 );
112+ }
113+
109114static bool whisper_params_parse (int argc, char ** argv, whisper_params & params) {
110115 for (int i = 1 ; i < argc; i++) {
111116 std::string arg = argv[i];
@@ -124,22 +129,23 @@ static bool whisper_params_parse(int argc, char ** argv, whisper_params & params
124129 whisper_print_usage (argc, argv, params);
125130 exit (0 );
126131 }
127- else if (arg == " -t" || arg == " --threads" ) { params.n_threads = std::stoi (argv[++i]); }
128- else if (arg == " -p" || arg == " --processors" ) { params.n_processors = std::stoi (argv[++i]); }
129- else if (arg == " -ot" || arg == " --offset-t" ) { params.offset_t_ms = std::stoi (argv[++i]); }
130- else if (arg == " -on" || arg == " --offset-n" ) { params.offset_n = std::stoi (argv[++i]); }
131- else if (arg == " -d" || arg == " --duration" ) { params.duration_ms = std::stoi (argv[++i]); }
132- else if (arg == " -mc" || arg == " --max-context" ) { params.max_context = std::stoi (argv[++i]); }
133- else if (arg == " -ml" || arg == " --max-len" ) { params.max_len = std::stoi (argv[++i]); }
134- else if (arg == " -bo" || arg == " --best-of" ) { params.best_of = std::stoi (argv[++i]); }
135- else if (arg == " -bs" || arg == " --beam-size" ) { params.beam_size = std::stoi (argv[++i]); }
136- else if (arg == " -ac" || arg == " --audio-ctx" ) { params.audio_ctx = std::stoi (argv[++i]); }
137- else if (arg == " -wt" || arg == " --word-thold" ) { params.word_thold = std::stof (argv[++i]); }
138- else if (arg == " -et" || arg == " --entropy-thold" ) { params.entropy_thold = std::stof (argv[++i]); }
139- else if (arg == " -lpt" || arg == " --logprob-thold" ) { params.logprob_thold = std::stof (argv[++i]); }
140- else if (arg == " -nth" || arg == " --no-speech-thold" ) { params.no_speech_thold = std::stof (argv[++i]); }
141- else if (arg == " -tp" || arg == " --temperature" ) { params.temperature = std::stof (argv[++i]); }
142- else if (arg == " -tpi" || arg == " --temperature-inc" ) { params.temperature_inc = std::stof (argv[++i]); }
132+ #define ARGV_NEXT (((i + 1 ) < argc) ? argv[++i] : requires_value_error(arg))
133+ else if (arg == " -t" || arg == " --threads" ) { params.n_threads = std::stoi (ARGV_NEXT); }
134+ else if (arg == " -p" || arg == " --processors" ) { params.n_processors = std::stoi (ARGV_NEXT); }
135+ else if (arg == " -ot" || arg == " --offset-t" ) { params.offset_t_ms = std::stoi (ARGV_NEXT); }
136+ else if (arg == " -on" || arg == " --offset-n" ) { params.offset_n = std::stoi (ARGV_NEXT); }
137+ else if (arg == " -d" || arg == " --duration" ) { params.duration_ms = std::stoi (ARGV_NEXT); }
138+ else if (arg == " -mc" || arg == " --max-context" ) { params.max_context = std::stoi (ARGV_NEXT); }
139+ else if (arg == " -ml" || arg == " --max-len" ) { params.max_len = std::stoi (ARGV_NEXT); }
140+ else if (arg == " -bo" || arg == " --best-of" ) { params.best_of = std::stoi (ARGV_NEXT); }
141+ else if (arg == " -bs" || arg == " --beam-size" ) { params.beam_size = std::stoi (ARGV_NEXT); }
142+ else if (arg == " -ac" || arg == " --audio-ctx" ) { params.audio_ctx = std::stoi (ARGV_NEXT); }
143+ else if (arg == " -wt" || arg == " --word-thold" ) { params.word_thold = std::stof (ARGV_NEXT); }
144+ else if (arg == " -et" || arg == " --entropy-thold" ) { params.entropy_thold = std::stof (ARGV_NEXT); }
145+ else if (arg == " -lpt" || arg == " --logprob-thold" ) { params.logprob_thold = std::stof (ARGV_NEXT); }
146+ else if (arg == " -nth" || arg == " --no-speech-thold" ) { params.no_speech_thold = std::stof (ARGV_NEXT); }
147+ else if (arg == " -tp" || arg == " --temperature" ) { params.temperature = std::stof (ARGV_NEXT); }
148+ else if (arg == " -tpi" || arg == " --temperature-inc" ) { params.temperature_inc = std::stof (ARGV_NEXT); }
143149 else if (arg == " -debug" || arg == " --debug-mode" ) { params.debug_mode = true ; }
144150 else if (arg == " -tr" || arg == " --translate" ) { params.translate = true ; }
145151 else if (arg == " -di" || arg == " --diarize" ) { params.diarize = true ; }
@@ -151,31 +157,31 @@ static bool whisper_params_parse(int argc, char ** argv, whisper_params & params
151157 else if (arg == " -osrt" || arg == " --output-srt" ) { params.output_srt = true ; }
152158 else if (arg == " -owts" || arg == " --output-words" ) { params.output_wts = true ; }
153159 else if (arg == " -olrc" || arg == " --output-lrc" ) { params.output_lrc = true ; }
154- else if (arg == " -fp" || arg == " --font-path" ) { params.font_path = argv[++i] ; }
160+ else if (arg == " -fp" || arg == " --font-path" ) { params.font_path = ARGV_NEXT ; }
155161 else if (arg == " -ocsv" || arg == " --output-csv" ) { params.output_csv = true ; }
156162 else if (arg == " -oj" || arg == " --output-json" ) { params.output_jsn = true ; }
157163 else if (arg == " -ojf" || arg == " --output-json-full" ){ params.output_jsn_full = params.output_jsn = true ; }
158- else if (arg == " -of" || arg == " --output-file" ) { params.fname_out .emplace_back (argv[++i] ); }
164+ else if (arg == " -of" || arg == " --output-file" ) { params.fname_out .emplace_back (ARGV_NEXT ); }
159165 else if (arg == " -np" || arg == " --no-prints" ) { params.no_prints = true ; }
160166 else if (arg == " -ps" || arg == " --print-special" ) { params.print_special = true ; }
161167 else if (arg == " -pc" || arg == " --print-colors" ) { params.print_colors = true ; }
162168 else if (arg == " -pp" || arg == " --print-progress" ) { params.print_progress = true ; }
163169 else if (arg == " -nt" || arg == " --no-timestamps" ) { params.no_timestamps = true ; }
164- else if (arg == " -l" || arg == " --language" ) { params.language = whisper_param_turn_lowercase (argv[++i] ); }
170+ else if (arg == " -l" || arg == " --language" ) { params.language = whisper_param_turn_lowercase (ARGV_NEXT ); }
165171 else if (arg == " -dl" || arg == " --detect-language" ) { params.detect_language = true ; }
166- else if ( arg == " --prompt" ) { params.prompt = argv[++i] ; }
167- else if (arg == " -m" || arg == " --model" ) { params.model = argv[++i] ; }
168- else if (arg == " -f" || arg == " --file" ) { params.fname_inp .emplace_back (argv[++i] ); }
169- else if (arg == " -oved" || arg == " --ov-e-device" ) { params.openvino_encode_device = argv[++i] ; }
170- else if (arg == " -dtw" || arg == " --dtw" ) { params.dtw = argv[++i] ; }
172+ else if ( arg == " --prompt" ) { params.prompt = ARGV_NEXT ; }
173+ else if (arg == " -m" || arg == " --model" ) { params.model = ARGV_NEXT ; }
174+ else if (arg == " -f" || arg == " --file" ) { params.fname_inp .emplace_back (ARGV_NEXT ); }
175+ else if (arg == " -oved" || arg == " --ov-e-device" ) { params.openvino_encode_device = ARGV_NEXT ; }
176+ else if (arg == " -dtw" || arg == " --dtw" ) { params.dtw = ARGV_NEXT ; }
171177 else if (arg == " -ls" || arg == " --log-score" ) { params.log_score = true ; }
172178 else if (arg == " -ng" || arg == " --no-gpu" ) { params.use_gpu = false ; }
173179 else if (arg == " -fa" || arg == " --flash-attn" ) { params.flash_attn = true ; }
174180 else if (arg == " -sns" || arg == " --suppress-nst" ) { params.suppress_nst = true ; }
175- else if ( arg == " --suppress-regex" ) { params.suppress_regex = argv[++i] ; }
176- else if ( arg == " --grammar" ) { params.grammar = argv[++i] ; }
177- else if ( arg == " --grammar-rule" ) { params.grammar_rule = argv[++i] ; }
178- else if ( arg == " --grammar-penalty" ) { params.grammar_penalty = std::stof (argv[++i] ); }
181+ else if ( arg == " --suppress-regex" ) { params.suppress_regex = ARGV_NEXT ; }
182+ else if ( arg == " --grammar" ) { params.grammar = ARGV_NEXT ; }
183+ else if ( arg == " --grammar-rule" ) { params.grammar_rule = ARGV_NEXT ; }
184+ else if ( arg == " --grammar-penalty" ) { params.grammar_penalty = std::stof (ARGV_NEXT ); }
179185 else {
180186 fprintf (stderr, " error: unknown argument: %s\n " , arg.c_str ());
181187 whisper_print_usage (argc, argv, params);
0 commit comments