Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
胡斌
/
merge_av
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
胡斌
2018-02-08 21:11:44 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
04bc3145dcafc8a61d719af331851c4a747ae6dd
04bc3145
1 parent
3127bdd5
first version
显示空白字符变更
内嵌
并排对比
正在显示
1 个修改的文件
包含
50 行增加
和
24 行删除
pip/pip.cpp
pip/pip.cpp
查看文件 @
04bc314
...
...
@@ -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
,
audi
o
.
name
.
c_str
());
strcpy
(
video_file
,
vide
o
.
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
-
audi
o_end
.
type_time
>
0.1
){
if
(
video
.
end_time
-
vide
o_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
(
audi
o_file
,
video
.
name
.
c_str
(),
destfile
);
merge_
video_pip
(
vide
o_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
){
...
...
请
注册
或
登录
后发表评论