继续操作前请注册或者登录。
胡斌

process multi audio files

@@ -339,20 +339,39 @@ int process_files(const char * output_dest_file) @@ -339,20 +339,39 @@ int process_files(const char * output_dest_file)
339 get_duration_from_video_file(); 339 get_duration_from_video_file();
340 340
341 if (filesvideo.size()) {//has video files 341 if (filesvideo.size()) {//has video files
  342 +
342 for (int i = 0; i < filesaudio.size(); i++){ // 343 for (int i = 0; i < filesaudio.size(); i++){ //
343 fileinfo audio = filesaudio[i]; 344 fileinfo audio = filesaudio[i];
344 - float audio_start = 0; 345 + float audio_start = audio.start_time;
  346 +
  347 + for (int j = i; j < filesaudio.size(); j++){
  348 + filesaudio[j].start_time -= audio_start;
  349 + filesaudio[j].end_time -= audio_start;
  350 + }
  351 +
  352 + for (int j = nv; j < filesvideo.size(); j++) {
  353 + filesvideo[j].start_time -= audio_start;
  354 + filesvideo[j].end_time -= audio_start;
  355 + }
  356 +
  357 + audio = filesaudio[i];
  358 +
  359 + audio_start = 0;
345 360
346 for (; nv < filesvideo.size(); nv++) { 361 for (; nv < filesvideo.size(); nv++) {
347 fileinfo video = filesvideo[nv]; 362 fileinfo video = filesvideo[nv];
348 363
349 if (video.start_time - audio_start > 0.100) { 364 if (video.start_time - audio_start > 0.100) {
350 -  
351 sprintf(destfile, "%d_%s", nf, audio.name.c_str()); 365 sprintf(destfile, "%d_%s", nf, audio.name.c_str());
352 - split_audio(audio, audio_start, video.start_time - audio_start, destfile); 366 + if (video.start_time > audio.end_time){
  367 + split_audio(audio, audio_start, audio.end_time - audio_start, destfile);
  368 + }
  369 + else{
  370 + split_audio(audio, audio_start, video.start_time - audio_start, destfile);
  371 + audio_start = video.start_time;
  372 + }
353 tmp_files.push_back(destfile); 373 tmp_files.push_back(destfile);
354 -  
355 - audio_start = video.start_time; 374 +
356 375
357 sprintf(destfile, "%s.jpg", video.name.c_str()); 376 sprintf(destfile, "%s.jpg", video.name.c_str());
358 get_video_first_frame_jpeg(video, destfile); 377 get_video_first_frame_jpeg(video, destfile);
@@ -362,6 +381,10 @@ int process_files(const char * output_dest_file) @@ -362,6 +381,10 @@ int process_files(const char * output_dest_file)
362 merge_audio_pic(audio, nf, video, destfile); 381 merge_audio_pic(audio, nf, video, destfile);
363 merged_files.push_back(destfile); 382 merged_files.push_back(destfile);
364 nf++; 383 nf++;
  384 +
  385 + if (video.start_time > audio.end_time){//to next audio
  386 + break;
  387 + }
365 } 388 }
366 if (nv != filesvideo.size() - 1) {// not the last one 389 if (nv != filesvideo.size() - 1) {// not the last one
367 sprintf(destfile, "%d_%s", nf, audio.name.c_str()); 390 sprintf(destfile, "%d_%s", nf, audio.name.c_str());