胡斌

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
run_shell_cmd(buf);
}
void merge_video_silence(fileinfo video, const char * aacfile, const char * destfile)
{
char buf[2048];
sprintf(buf, "ffmpeg -y -i %s -i %s -shortest %s %s %s", aacfile, video.name.c_str(), acodec_param, vcodec_param, destfile);
run_shell_cmd(buf);
}
void megre_audio_video(fileinfo audio, int nf, fileinfo video, const char * destfile)
{
char buf[2048];
... ... @@ -332,109 +339,129 @@ int process_files(const char * output_dest_file)
int nf = 0;
char destfile[1024];
char blank_pic_file[1024];
char silence_aac_file[1024];
strcpy(blank_pic_file, cfg_path);
strcat(blank_pic_file, "blank.jpg");
strcpy(silence_aac_file, cfg_path);
strcat(silence_aac_file, "silence.aac");
get_duration_from_video_file();
if (filesvideo.size()) {//has video files
if (filesaudio.size()){
for (int i = 0; i < filesaudio.size(); i++){ //
fileinfo audio = filesaudio[i];
float audio_start = audio.start_time;
for (int j = i; j < filesaudio.size(); j++){
filesaudio[j].start_time -= audio_start;
filesaudio[j].end_time -= audio_start;
}
for (int i = 0; i < filesaudio.size(); i++){ //
fileinfo audio = filesaudio[i];
float audio_start = audio.start_time;
for (int j = i; j < filesaudio.size(); j++){
filesaudio[j].start_time -= audio_start;
filesaudio[j].end_time -= audio_start;
}
for (int j = nv; j < filesvideo.size(); j++) {
filesvideo[j].start_time -= audio_start;
filesvideo[j].end_time -= audio_start;
}
for (int j = nv; j < filesvideo.size(); j++) {
filesvideo[j].start_time -= audio_start;
filesvideo[j].end_time -= audio_start;
}
audio = filesaudio[i];
audio = filesaudio[i];
audio_start = 0;
audio_start = 0;
for (; nv < filesvideo.size(); nv++) {
fileinfo video = filesvideo[nv];
for (; nv < filesvideo.size(); nv++) {
fileinfo video = filesvideo[nv];
if (video.start_time - audio_start > 0.100) {
sprintf(destfile, "%d_%s", nf, audio.name.c_str());
if (video.start_time > audio.end_time){
split_audio(audio, audio_start, audio.end_time - audio_start, destfile);
}
else{
split_audio(audio, audio_start, video.start_time - audio_start, destfile);
audio_start = video.start_time;
}
tmp_files.push_back(destfile);
sprintf(destfile, "%s.jpg", video.name.c_str());
get_video_first_frame_jpeg(video, destfile);
tmp_files.push_back(destfile);
if (video.start_time - audio_start > 0.100) {
sprintf(destfile, "%d_%s", nf, audio.name.c_str());
if (video.start_time > audio.end_time){
split_audio(audio, audio_start, audio.end_time - audio_start, destfile);
}
else{
split_audio(audio, audio_start, video.start_time - audio_start, destfile);
audio_start = video.start_time;
}
tmp_files.push_back(destfile);
sprintf(destfile, "%d.ts", nf);
merge_audio_pic(audio, nf, video, destfile);
merged_files.push_back(destfile);
nf++;
if (video.start_time > audio.end_time){//to next audio
break;
}
}
if (nv != filesvideo.size() - 1) {// not the last one
sprintf(destfile, "%d_%s", nf, audio.name.c_str());
split_audio(audio, video.start_time, video.end_time - video.start_time, destfile);
tmp_files.push_back(destfile);
audio_start = video.end_time;
sprintf(destfile, "%d.ts", nf);
megre_audio_video(audio, nf, video, destfile);
merged_files.push_back(destfile);
nf++;
}
else {
sprintf(destfile, "%d_%s", nf, audio.name.c_str());
if (audio.end_time - video.end_time < 1.0) {
split_audio(audio, video.start_time, audio.end_time - video.start_time, destfile);
sprintf(destfile, "%s.jpg", video.name.c_str());
get_video_first_frame_jpeg(video, destfile);
tmp_files.push_back(destfile);
audio_start = video.end_time;
sprintf(destfile, "%d.ts", nf);
megre_audio_video(audio, nf, video, destfile);
merge_audio_pic(audio, nf, video, destfile);
merged_files.push_back(destfile);
nf++;
if (video.start_time > audio.end_time){//to next audio
break;
}
}
else{
if (nv != filesvideo.size() - 1) {// not the last one
sprintf(destfile, "%d_%s", nf, audio.name.c_str());
split_audio(audio, video.start_time, video.end_time - video.start_time, destfile);
tmp_files.push_back(destfile);
audio_start = video.end_time;
sprintf(destfile, "%d.ts", nf);
megre_audio_video(audio, nf, video, destfile);
merged_files.push_back(destfile);
nf++;
}
else {
sprintf(destfile, "%d_%s", nf, audio.name.c_str());
split_audio(audio, video.end_time, audio.end_time - video.end_time, destfile);
tmp_files.push_back(destfile);
sprintf(destfile, "%d.ts", nf);
merge_audio_pic(audio, nf, blank_pic_file, destfile);
merged_files.push_back(destfile);
nf++;
if (audio.end_time - video.end_time < 1.0) {
split_audio(audio, video.start_time, audio.end_time - video.start_time, destfile);
tmp_files.push_back(destfile);
audio_start = video.end_time;
sprintf(destfile, "%d.ts", nf);
megre_audio_video(audio, nf, video, destfile);
merged_files.push_back(destfile);
nf++;
}
else{
split_audio(audio, video.start_time, video.end_time - video.start_time, destfile);
tmp_files.push_back(destfile);
audio_start = video.end_time;
sprintf(destfile, "%d.ts", nf);
megre_audio_video(audio, nf, video, destfile);
merged_files.push_back(destfile);
nf++;
sprintf(destfile, "%d_%s", nf, audio.name.c_str());
split_audio(audio, video.end_time, audio.end_time - video.end_time, destfile);
tmp_files.push_back(destfile);
sprintf(destfile, "%d.ts", nf);
merge_audio_pic(audio, nf, blank_pic_file, destfile);
merged_files.push_back(destfile);
nf++;
}
}
}
}
}
else{//only video
if (filesvideo.size() == 1){
fileinfo video = filesvideo[0];
merge_video_silence(video, silence_aac_file, "dest.ts");
return 0;
}
for (int i = 0; i < filesvideo.size(); i++){
fileinfo video = filesvideo[i];
sprintf(destfile, "%d.ts", nf);
merge_video_silence(video, silence_aac_file, destfile);
merged_files.push_back(destfile);
nf++;
}
}
}
else {//only audio
... ... @@ -526,7 +553,7 @@ void load_codec_param()
int main(int argc, char * argv[])
{
if (argc < 2) {
printf(" merge_av 1.0.3\n");
printf(" merge_av 1.0.4\n");
printf(" run ffmpeg to merge audio and video files according to the record info file,\nusage:");
printf("\n %s record_info_filename [-p] [-k]", argv[0]);
printf("\n -p :only print the command,don't run ffmpeg");
... ...
0.000 750351447_20171221092557104.webm create
0.001 750351447_20171221092557104.webm info width=240 height=180 rotation=0
752.813 750351447_20171221092557104.webm close
... ...