add silence.aac to support for the recording file having video only
set version to 1.0.4
正在显示
5 个修改的文件
包含
99 行增加
和
69 行删除
Debug/blank.jpg
0 → 100644
1.8 KB
Debug/silence.aac
0 → 100644
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"); |
This file is too large to display.
-
请 注册 或 登录 后发表评论