胡斌

add silence.aac to support for the recording file having video only

set version to 1.0.4
This file is too large to display.
@@ -167,6 +167,13 @@ void merge_audio_pic(fileinfo audio, const char * picfile, const char * destfile @@ -167,6 +167,13 @@ void merge_audio_pic(fileinfo audio, const char * picfile, const char * destfile
167 run_shell_cmd(buf); 167 run_shell_cmd(buf);
168 } 168 }
169 169
  170 +void merge_video_silence(fileinfo video, const char * aacfile, const char * destfile)
  171 +{
  172 + char buf[2048];
  173 + sprintf(buf, "ffmpeg -y -i %s -i %s -shortest %s %s %s", aacfile, video.name.c_str(), acodec_param, vcodec_param, destfile);
  174 + run_shell_cmd(buf);
  175 +}
  176 +
170 void megre_audio_video(fileinfo audio, int nf, fileinfo video, const char * destfile) 177 void megre_audio_video(fileinfo audio, int nf, fileinfo video, const char * destfile)
171 { 178 {
172 char buf[2048]; 179 char buf[2048];
@@ -332,109 +339,129 @@ int process_files(const char * output_dest_file) @@ -332,109 +339,129 @@ int process_files(const char * output_dest_file)
332 int nf = 0; 339 int nf = 0;
333 char destfile[1024]; 340 char destfile[1024];
334 char blank_pic_file[1024]; 341 char blank_pic_file[1024];
  342 + char silence_aac_file[1024];
335 343
336 strcpy(blank_pic_file, cfg_path); 344 strcpy(blank_pic_file, cfg_path);
337 strcat(blank_pic_file, "blank.jpg"); 345 strcat(blank_pic_file, "blank.jpg");
338 346
  347 + strcpy(silence_aac_file, cfg_path);
  348 + strcat(silence_aac_file, "silence.aac");
  349 +
339 get_duration_from_video_file(); 350 get_duration_from_video_file();
340 351
341 if (filesvideo.size()) {//has video files 352 if (filesvideo.size()) {//has video files
  353 + if (filesaudio.size()){
  354 + for (int i = 0; i < filesaudio.size(); i++){ //
  355 + fileinfo audio = filesaudio[i];
  356 + float audio_start = audio.start_time;
  357 +
  358 + for (int j = i; j < filesaudio.size(); j++){
  359 + filesaudio[j].start_time -= audio_start;
  360 + filesaudio[j].end_time -= audio_start;
  361 + }
342 362
343 - for (int i = 0; i < filesaudio.size(); i++){ //  
344 - fileinfo audio = filesaudio[i];  
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 - } 363 + for (int j = nv; j < filesvideo.size(); j++) {
  364 + filesvideo[j].start_time -= audio_start;
  365 + filesvideo[j].end_time -= audio_start;
  366 + }
356 367
357 - audio = filesaudio[i]; 368 + audio = filesaudio[i];
358 369
359 - audio_start = 0; 370 + audio_start = 0;
360 371
361 - for (; nv < filesvideo.size(); nv++) {  
362 - fileinfo video = filesvideo[nv]; 372 + for (; nv < filesvideo.size(); nv++) {
  373 + fileinfo video = filesvideo[nv];
363 374
364 - if (video.start_time - audio_start > 0.100) {  
365 - sprintf(destfile, "%d_%s", nf, audio.name.c_str());  
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 - }  
373 - tmp_files.push_back(destfile);  
374 -  
375 -  
376 - sprintf(destfile, "%s.jpg", video.name.c_str());  
377 - get_video_first_frame_jpeg(video, destfile);  
378 - tmp_files.push_back(destfile); 375 + if (video.start_time - audio_start > 0.100) {
  376 + sprintf(destfile, "%d_%s", nf, audio.name.c_str());
  377 + if (video.start_time > audio.end_time){
  378 + split_audio(audio, audio_start, audio.end_time - audio_start, destfile);
  379 + }
  380 + else{
  381 + split_audio(audio, audio_start, video.start_time - audio_start, destfile);
  382 + audio_start = video.start_time;
  383 + }
  384 + tmp_files.push_back(destfile);
379 385
380 - sprintf(destfile, "%d.ts", nf);  
381 - merge_audio_pic(audio, nf, video, destfile);  
382 - merged_files.push_back(destfile);  
383 - nf++;  
384 386
385 - if (video.start_time > audio.end_time){//to next audio  
386 - break;  
387 - }  
388 - }  
389 - if (nv != filesvideo.size() - 1) {// not the last one  
390 - sprintf(destfile, "%d_%s", nf, audio.name.c_str());  
391 - split_audio(audio, video.start_time, video.end_time - video.start_time, destfile);  
392 - tmp_files.push_back(destfile);  
393 -  
394 - audio_start = video.end_time;  
395 - sprintf(destfile, "%d.ts", nf);  
396 - megre_audio_video(audio, nf, video, destfile);  
397 - merged_files.push_back(destfile);  
398 - nf++;  
399 - }  
400 - else {  
401 -  
402 - sprintf(destfile, "%d_%s", nf, audio.name.c_str());  
403 -  
404 - if (audio.end_time - video.end_time < 1.0) {  
405 - split_audio(audio, video.start_time, audio.end_time - video.start_time, destfile); 387 + sprintf(destfile, "%s.jpg", video.name.c_str());
  388 + get_video_first_frame_jpeg(video, destfile);
406 tmp_files.push_back(destfile); 389 tmp_files.push_back(destfile);
407 390
408 - audio_start = video.end_time;  
409 -  
410 sprintf(destfile, "%d.ts", nf); 391 sprintf(destfile, "%d.ts", nf);
411 - megre_audio_video(audio, nf, video, destfile); 392 + merge_audio_pic(audio, nf, video, destfile);
412 merged_files.push_back(destfile); 393 merged_files.push_back(destfile);
413 nf++; 394 nf++;
  395 +
  396 + if (video.start_time > audio.end_time){//to next audio
  397 + break;
  398 + }
414 } 399 }
415 - else{ 400 + if (nv != filesvideo.size() - 1) {// not the last one
  401 + sprintf(destfile, "%d_%s", nf, audio.name.c_str());
416 split_audio(audio, video.start_time, video.end_time - video.start_time, destfile); 402 split_audio(audio, video.start_time, video.end_time - video.start_time, destfile);
417 tmp_files.push_back(destfile); 403 tmp_files.push_back(destfile);
418 404
419 audio_start = video.end_time; 405 audio_start = video.end_time;
420 -  
421 sprintf(destfile, "%d.ts", nf); 406 sprintf(destfile, "%d.ts", nf);
422 megre_audio_video(audio, nf, video, destfile); 407 megre_audio_video(audio, nf, video, destfile);
423 merged_files.push_back(destfile); 408 merged_files.push_back(destfile);
424 nf++; 409 nf++;
  410 + }
  411 + else {
425 412
426 sprintf(destfile, "%d_%s", nf, audio.name.c_str()); 413 sprintf(destfile, "%d_%s", nf, audio.name.c_str());
427 - split_audio(audio, video.end_time, audio.end_time - video.end_time, destfile);  
428 - tmp_files.push_back(destfile);  
429 414
430 - sprintf(destfile, "%d.ts", nf);  
431 - merge_audio_pic(audio, nf, blank_pic_file, destfile);  
432 - merged_files.push_back(destfile);  
433 - nf++; 415 + if (audio.end_time - video.end_time < 1.0) {
  416 + split_audio(audio, video.start_time, audio.end_time - video.start_time, destfile);
  417 + tmp_files.push_back(destfile);
  418 +
  419 + audio_start = video.end_time;
  420 +
  421 + sprintf(destfile, "%d.ts", nf);
  422 + megre_audio_video(audio, nf, video, destfile);
  423 + merged_files.push_back(destfile);
  424 + nf++;
  425 + }
  426 + else{
  427 + split_audio(audio, video.start_time, video.end_time - video.start_time, destfile);
  428 + tmp_files.push_back(destfile);
  429 +
  430 + audio_start = video.end_time;
  431 +
  432 + sprintf(destfile, "%d.ts", nf);
  433 + megre_audio_video(audio, nf, video, destfile);
  434 + merged_files.push_back(destfile);
  435 + nf++;
  436 +
  437 + sprintf(destfile, "%d_%s", nf, audio.name.c_str());
  438 + split_audio(audio, video.end_time, audio.end_time - video.end_time, destfile);
  439 + tmp_files.push_back(destfile);
  440 +
  441 + sprintf(destfile, "%d.ts", nf);
  442 + merge_audio_pic(audio, nf, blank_pic_file, destfile);
  443 + merged_files.push_back(destfile);
  444 + nf++;
  445 + }
434 } 446 }
435 } 447 }
436 } 448 }
437 } 449 }
  450 + else{//only video
  451 + if (filesvideo.size() == 1){
  452 + fileinfo video = filesvideo[0];
  453 + merge_video_silence(video, silence_aac_file, "dest.ts");
  454 + return 0;
  455 + }
  456 +
  457 + for (int i = 0; i < filesvideo.size(); i++){
  458 + fileinfo video = filesvideo[i];
  459 + sprintf(destfile, "%d.ts", nf);
  460 + merge_video_silence(video, silence_aac_file, destfile);
  461 + merged_files.push_back(destfile);
  462 + nf++;
  463 + }
  464 + }
438 } 465 }
439 else {//only audio 466 else {//only audio
440 467
@@ -526,7 +553,7 @@ void load_codec_param() @@ -526,7 +553,7 @@ void load_codec_param()
526 int main(int argc, char * argv[]) 553 int main(int argc, char * argv[])
527 { 554 {
528 if (argc < 2) { 555 if (argc < 2) {
529 - printf(" merge_av 1.0.3\n"); 556 + printf(" merge_av 1.0.4\n");
530 printf(" run ffmpeg to merge audio and video files according to the record info file,\nusage:"); 557 printf(" run ffmpeg to merge audio and video files according to the record info file,\nusage:");
531 printf("\n %s record_info_filename [-p] [-k]", argv[0]); 558 printf("\n %s record_info_filename [-p] [-k]", argv[0]);
532 printf("\n -p :only print the command,don't run ffmpeg"); 559 printf("\n -p :only print the command,don't run ffmpeg");
  1 +0.000 750351447_20171221092557104.webm create
  2 +0.001 750351447_20171221092557104.webm info width=240 height=180 rotation=0
  3 +752.813 750351447_20171221092557104.webm close