胡斌

first version

正在显示 1 个修改的文件 包含 50 行增加24 行删除
... ... @@ -102,7 +102,7 @@ void get_config_path(){
const char * default_vcodec_param = "-vcodec libx264 -level 3.1 -preset veryfast -g 100 -r 20 -bf 0 -vsync cfr";
const char * default_acodec_param = "-acodec copy";
const char * default_av_codec_param = "-acodec aac -vcodec libx264 -level 3.1 -preset veryfast -g 100 -r 20 -bf 0 -vsync cfr";
const char * default_pip_param = "-filter_complex \"[1:v]scale = w = 80:h = 60 : force_original_aspect_ratio = decrease[b]; [0:v][b]overlay = x = 0:y = 0\" -filter_complex amix=inputs=2:duration=first:dropout_transition=2,volume=1";
const char * default_pip_param = "-filter_complex \"[1:v]scale=w=80:h=60:force_original_aspect_ratio=decrease[b];[0:v][b]overlay=x=0:y=0\" -filter_complex amix=inputs=2:duration=first:dropout_transition=2,volume=1";
char av_codec_param[1024];
... ... @@ -408,6 +408,23 @@ int merge_audio_file(vector<string> & files, const char * dest)
return 0;
}
int merge_av_file(vector<string> & files, const char * dest)
{
char tsfile[1024];
vector<string> tsfiles;
sprintf(tsfile, "m_%s.ts", dest);
concate_files(files, tsfile);
adjust_dest_timecode(tsfile, dest);
if (!keep_tmp_files){
tsfiles.push_back(tsfile);
removefiles(tsfiles);
}
return 0;
}
list <media_info> sorted_media;
deque<media_info> sorted_infos;
... ... @@ -552,6 +569,7 @@ int merge_audio_video(vector<media_info> & files)
int merge_video_pip(vector<media_info> & files)
{
char video_file[1024];
vector<string> merge_video_files;
int nsilence = 0;
... ... @@ -559,45 +577,52 @@ int merge_video_pip(vector<media_info> & files)
float start_time = video.start_time;
for (int i = 1; i < files.size() - 1; i += 2){
media_info audio = files[i];
media_info audio_end = files[i + 1];
if (audio.type_time - start_time > 0.1){
media_info video = files[i];
media_info video_end = files[i + 1];
if (video.type_time - start_time > 0.1){
sprintf(audio_file, "%d_%d_silence.aac", nf, nsilence++);//a duration of silence
split_audio(silence_aac_file, 0, audio.type_time - start_time, audio_file);
merge_video_files.push_back(audio_file);
tmp_files.push_back(audio_file);
}
split_audio(silence_aac_file, 0, video.type_time - start_time, audio_file);
sprintf(video_file, "%d_%d_blank.ts", nf, nsilence++);
merge_audio_pic(audio_file, blank_pic_file, video_file);
if (audio.type_time - audio.start_time > 0.10 || audio_end.end_time - audio_end.type_time > 0.10) {
sprintf(audio_file, "%d_%s", nf, audio.name.c_str());
split_audio(audio.name.c_str(), audio.type_time - audio.start_time, audio_end.type_time - audio.type_time, audio_file);
merge_video_files.push_back(video_file);
tmp_files.push_back(audio_file);
tmp_files.push_back(video_file);
}
if (video.type_time - video.start_time > 0.10 || video_end.end_time - video_end.type_time > 0.10) {
sprintf(video_file, "%d_%s", nf, video.name.c_str());
split_av(video.name.c_str(), video.type_time - video.start_time, video_end.type_time - video.type_time, video_file);
tmp_files.push_back(video_file);
}
else{
strcpy(audio_file, audio.name.c_str());
strcpy(video_file, video.name.c_str());
}
start_time = audio_end.type_time;
merge_video_files.push_back(audio_file);
start_time = video_end.type_time;
merge_video_files.push_back(video_file);
if (i == files.size() - 2){
if (video.end_time - audio_end.type_time > 0.1){
if (video.end_time - video_end.type_time > 0.1){
sprintf(audio_file, "%d_%d_silence.aac", nf, nsilence++);//a duration of silence
split_audio(silence_aac_file, 0, video.end_time - audio_end.type_time, audio_file);
merge_video_files.push_back(audio_file);
split_audio(silence_aac_file, 0, video.end_time - video_end.type_time, audio_file);
sprintf(video_file, "%d_%d_blank.ts", nf, nsilence++);
merge_audio_pic(audio_file, blank_pic_file, video_file);
merge_video_files.push_back(video_file);
tmp_files.push_back(audio_file);
tmp_files.push_back(video_file);
}
}
}
sprintf(audio_file, "%d_merged.aac", nf);
merge_audio_file(merge_video_files, audio_file);
tmp_files.push_back(audio_file);
sprintf(video_file, "%d_merged.ts", nf);
merge_av_file(merge_video_files, video_file);
tmp_files.push_back(video_file);
sprintf(destfile, "%d.ts", nf);
merge_audio_video(audio_file, video.name.c_str(), destfile);
merge_video_pip(video_file, video.name.c_str(), destfile);
merged_files.push_back(destfile);
nf++;
... ... @@ -827,7 +852,8 @@ void get_front_info(int index_to, vector<media_info> &cur_processing)
int concate_files_and_adjust_timecode(const char * output_dest_file){
if (merged_files.size() == 1){
printf("\n rename %s to %s", merged_files[0].c_str(), output_dest_file);
printf("rename %s to %s\n", merged_files[0].c_str(), output_dest_file);
remove(output_dest_file);
rename(merged_files[0].c_str(), output_dest_file);
}
else {
... ... @@ -860,7 +886,7 @@ int get_output_file_name(int i, const char * file_prefix, char * outputfile){
strcpy(prefix, file_prefix);
}
sprintf(outputfile, "%s.ts", prefix, i);
sprintf(outputfile, "pip_%s.ts", prefix, i);
return 0;
}
... ... @@ -918,7 +944,7 @@ int process_va_files()
else {
get_front_info(index, cur_processing);
}
merge_audio_video(cur_processing);
merge_video_pip(cur_processing);
}
//if the duration between the processed end and the start of not processed is large than 200 ms, reopen a new file
if (is_start){
... ...