Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
accessibility_movie_2
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
赵心治
accessibility_movie_2
Commits
60f70e01
Commit
60f70e01
authored
Aug 18, 2023
by
cxy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bugfix 4 import excel and update excel fileds
parent
89e52096
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
338 additions
and
126 deletions
+338
-126
infer_path.py
PaddlePaddle_DeepSpeech2/infer_path.py
+2
-1
detect_with_asr.py
detect_with_asr.py
+1
-1
detect_with_ocr.py
detect_with_ocr.py
+7
-16
excel_utils.py
excel_utils.py
+22
-16
ffmpeg_util.py
ffmpeg_util.py
+1
-3
main_window.py
main_window.py
+167
-40
main_window_ui.py
main_window_ui.py
+39
-7
management.py
management.py
+17
-9
operation_dialog.py
operation_dialog.py
+5
-2
render.py
render.py
+10
-9
speech_synthesis.py
speech_synthesis.py
+16
-10
start.spec
start.spec
+5
-5
utils.py
utils.py
+46
-7
No files found.
PaddlePaddle_DeepSpeech2/infer_path.py
View file @
60f70e01
...
@@ -78,7 +78,8 @@ def predict_long_audio_with_paddle(wav_path, pre_time, book_name, sheet_name, st
...
@@ -78,7 +78,8 @@ def predict_long_audio_with_paddle(wav_path, pre_time, book_name, sheet_name, st
(
time_stamps
[
i
][
0
]
+
pre_time
)
*
normal_speed
)
(
time_stamps
[
i
][
0
]
+
pre_time
)
*
normal_speed
)
print
(
"插入旁白,推荐字数为
%
d"
%
recommend_lens
)
print
(
"插入旁白,推荐字数为
%
d"
%
recommend_lens
)
# narratages.append(["", "", "", "插入旁白,推荐字数为%d" % recommend_lens])
# narratages.append(["", "", "", "插入旁白,推荐字数为%d" % recommend_lens])
write_to_sheet
(
book_name
,
sheet_name
,
[
""
,
""
,
""
,
"插入旁白,推荐字数为
%
d"
%
recommend_lens
])
# write_to_sheet(book_name, sheet_name, ["", "", "", "插入旁白,推荐字数为%d" % recommend_lens])
write_to_sheet
(
book_name
,
sheet_name
,
[
""
,
""
,
""
,
"
%
d"
%
recommend_lens
])
# narratages.append([round(time_stamps[i][0] + pre_time, 2), round(time_stamps[i][1] + pre_time, 2),
# narratages.append([round(time_stamps[i][0] + pre_time, 2), round(time_stamps[i][1] + pre_time, 2),
# text, ''])
# text, ''])
write_to_sheet
(
book_name
,
sheet_name
,
write_to_sheet
(
book_name
,
sheet_name
,
...
...
detect_with_asr.py
View file @
60f70e01
...
@@ -98,7 +98,7 @@ def detect_with_asr(video_path: str, book_path: str, start_time=0, end_time=-1,
...
@@ -98,7 +98,7 @@ def detect_with_asr(video_path: str, book_path: str, start_time=0, end_time=-1,
os
.
remove
(
book_path
)
os
.
remove
(
book_path
)
book_name_xlsx
=
book_path
book_name_xlsx
=
book_path
sheet_name_xlsx
=
"旁白插入位置建议"
sheet_name_xlsx
=
"旁白插入位置建议"
table_head
=
[[
"起始时间"
,
"终止时间"
,
"字幕"
,
'建议'
,
'解说脚本'
]]
table_head
=
[[
"起始时间"
,
"终止时间"
,
"字幕"
,
'建议
旁白字数
'
,
'解说脚本'
]]
create_sheet
(
book_name_xlsx
,
sheet_name_xlsx
,
table_head
)
create_sheet
(
book_name_xlsx
,
sheet_name_xlsx
,
table_head
)
sys
.
path
.
append
(
"PaddlePaddle_DeepSpeech2"
)
sys
.
path
.
append
(
"PaddlePaddle_DeepSpeech2"
)
...
...
detect_with_ocr.py
View file @
60f70e01
...
@@ -66,7 +66,6 @@ def get_position(video_path: str, start_time: float, rate: float, rate_bottom: f
...
@@ -66,7 +66,6 @@ def get_position(video_path: str, start_time: float, rate: float, rate_bottom: f
pre_txt
=
None
pre_txt
=
None
video
.
set
(
cv2
.
CAP_PROP_POS_FRAMES
,
start
)
video
.
set
(
cv2
.
CAP_PROP_POS_FRAMES
,
start
)
# height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT) * 0.6)
# height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT) * 0.6)
print
(
">>>>>>>>>>>>video height"
)
print
(
cv2
.
CAP_PROP_FRAME_HEIGHT
)
print
(
cv2
.
CAP_PROP_FRAME_HEIGHT
)
print
(
video
.
get
(
cv2
.
CAP_PROP_FRAME_HEIGHT
))
print
(
video
.
get
(
cv2
.
CAP_PROP_FRAME_HEIGHT
))
up
=
int
(
video
.
get
(
cv2
.
CAP_PROP_FRAME_HEIGHT
)
*
(
rate
))
up
=
int
(
video
.
get
(
cv2
.
CAP_PROP_FRAME_HEIGHT
)
*
(
rate
))
...
@@ -210,7 +209,6 @@ def detect_subtitle(img: np.ndarray) -> Tuple[Union[str, None], float]:
...
@@ -210,7 +209,6 @@ def detect_subtitle(img: np.ndarray) -> Tuple[Union[str, None], float]:
img
=
img
[
int
(
up_b
-
height
*
0.7
):
int
(
down_b
+
height
*
0.7
)]
img
=
img
[
int
(
up_b
-
height
*
0.7
):
int
(
down_b
+
height
*
0.7
)]
# 针对低帧率的视频做图像放大处理
# 针对低帧率的视频做图像放大处理
print
(
">>>>>>>>>>>>>>>>>>>>>img shape"
)
print
(
height
)
print
(
height
)
print
(
up_b
)
print
(
up_b
)
print
(
down_b
)
print
(
down_b
)
...
@@ -315,7 +313,8 @@ def process_video(video_path: str, begin: float, end: float, book_path: str, she
...
@@ -315,7 +313,8 @@ def process_video(video_path: str, begin: float, end: float, book_path: str, she
print
(
'--------------------------------------------------'
)
print
(
'--------------------------------------------------'
)
recommend_lens
=
int
((
cur_time
-
end_time
)
*
normal_speed
)
recommend_lens
=
int
((
cur_time
-
end_time
)
*
normal_speed
)
# write_to_sheet(book_path, sheet_name, ['', '', '', '插入旁白,推荐字数为%d' % recommend_lens])
# write_to_sheet(book_path, sheet_name, ['', '', '', '插入旁白,推荐字数为%d' % recommend_lens])
add_to_list
(
mainWindow
,
"旁白"
,
[
''
,
''
,
''
,
'插入旁白,推荐字数为
%
d'
%
recommend_lens
])
# add_to_list(mainWindow, "旁白", ['', '', '', '插入旁白,推荐字数为%d' % recommend_lens])
add_to_list
(
mainWindow
,
"旁白"
,
[
''
,
''
,
''
,
'
%
d'
%
recommend_lens
])
# 判断当前是否有字幕需要被保存下来
# 判断当前是否有字幕需要被保存下来
if
end_time
<
start_time
:
if
end_time
<
start_time
:
...
@@ -333,24 +332,18 @@ def process_video(video_path: str, begin: float, end: float, book_path: str, she
...
@@ -333,24 +332,18 @@ def process_video(video_path: str, begin: float, end: float, book_path: str, she
mainWindow
.
projectContext
.
last_time
=
cur_time
mainWindow
.
projectContext
.
last_time
=
cur_time
subTitle
,
conf
=
detect_subtitle
(
frame
)
subTitle
,
conf
=
detect_subtitle
(
frame
)
print
(
">>>>>>>>>>>>111111111"
)
if
subTitle
is
not
None
:
if
subTitle
is
not
None
:
print
(
">>>>>>>>>>>>111111111 2222222"
)
subTitle
=
normalize
(
subTitle
)
subTitle
=
normalize
(
subTitle
)
if
len
(
subTitle
)
==
0
:
if
len
(
subTitle
)
==
0
:
print
(
">>>>>>>>>>>>111111111 3333333"
)
subTitle
=
None
subTitle
=
None
print
(
">>>>>>>>>>>>222222222"
)
# 第一次找到字幕
# 第一次找到字幕
if
lastSubTitle
is
None
and
subTitle
is
not
None
:
if
lastSubTitle
is
None
and
subTitle
is
not
None
:
start_time
=
cur_time
start_time
=
cur_time
print
(
">>>>>>>>>>>>333333333"
)
# 字幕消失
# 字幕消失
elif
lastSubTitle
is
not
None
and
subTitle
is
None
:
elif
lastSubTitle
is
not
None
and
subTitle
is
None
:
print
(
">>>>>>>>>>>>4444444444"
)
end_time
=
cur_time
end_time
=
cur_time
res
.
append
([
start_time
,
end_time
,
lastSubTitle
])
res
.
append
([
start_time
,
end_time
,
lastSubTitle
])
if
(
len
(
res
)
==
1
and
res
[
-
1
][
0
]
-
last_time
>=
1
)
or
(
len
(
res
)
>
1
and
res
[
-
1
][
0
]
-
res
[
-
2
][
1
])
>=
1
:
if
(
len
(
res
)
==
1
and
res
[
-
1
][
0
]
-
last_time
>=
1
)
or
(
len
(
res
)
>
1
and
res
[
-
1
][
0
]
-
res
[
-
2
][
1
])
>=
1
:
...
@@ -358,16 +351,15 @@ def process_video(video_path: str, begin: float, end: float, book_path: str, she
...
@@ -358,16 +351,15 @@ def process_video(video_path: str, begin: float, end: float, book_path: str, she
recommend_lens
=
int
((
res
[
-
1
][
0
]
-
last_time
)
*
normal_speed
)
if
len
(
res
)
==
1
else
int
(
recommend_lens
=
int
((
res
[
-
1
][
0
]
-
last_time
)
*
normal_speed
)
if
len
(
res
)
==
1
else
int
(
(
res
[
-
1
][
0
]
-
res
[
-
2
][
1
])
*
normal_speed
)
(
res
[
-
1
][
0
]
-
res
[
-
2
][
1
])
*
normal_speed
)
# write_to_sheet(book_path, sheet_name, ['', '', '', '插入旁白,推荐字数为%d' % recommend_lens])
# write_to_sheet(book_path, sheet_name, ['', '', '', '插入旁白,推荐字数为%d' % recommend_lens])
add_to_list
(
mainWindow
,
"旁白"
,
[
''
,
''
,
''
,
'插入旁白,推荐字数为
%
d'
%
recommend_lens
])
# add_to_list(mainWindow, "旁白", ['', '', '', '插入旁白,推荐字数为%d' % recommend_lens])
add_to_list
(
mainWindow
,
"旁白"
,
[
''
,
''
,
''
,
'
%
d'
%
recommend_lens
])
print
(
start_time
,
end_time
,
lastSubTitle
)
print
(
start_time
,
end_time
,
lastSubTitle
)
# write_to_sheet(book_path, sheet_name, [round(start_time, 2), round(end_time, 2), lastSubTitle, ''])
# write_to_sheet(book_path, sheet_name, [round(start_time, 2), round(end_time, 2), lastSubTitle, ''])
add_to_list
(
mainWindow
,
"字幕"
,
[
round
(
start_time
,
3
),
round
(
end_time
,
3
),
lastSubTitle
,
''
])
add_to_list
(
mainWindow
,
"字幕"
,
[
round
(
start_time
,
3
),
round
(
end_time
,
3
),
lastSubTitle
,
''
])
elif
lastSubTitle
is
not
None
and
subTitle
is
not
None
:
elif
lastSubTitle
is
not
None
and
subTitle
is
not
None
:
print
(
">>>>>>>>>>>>5555555555"
)
# 两句话连在一起,但是两句话不一样
# 两句话连在一起,但是两句话不一样
if
string_similar
(
lastSubTitle
,
subTitle
)
<
0.7
:
if
string_similar
(
lastSubTitle
,
subTitle
)
<
0.6
:
print
(
">>>>>>>>>>>66666666666"
)
end_time
=
cur_time
end_time
=
cur_time
res
.
append
([
start_time
,
end_time
,
lastSubTitle
])
res
.
append
([
start_time
,
end_time
,
lastSubTitle
])
if
(
len
(
res
)
==
1
and
res
[
-
1
][
0
]
-
last_time
>=
1
)
or
(
len
(
res
)
>
1
and
res
[
-
1
][
0
]
-
res
[
-
2
][
1
])
>=
1
:
if
(
len
(
res
)
==
1
and
res
[
-
1
][
0
]
-
last_time
>=
1
)
or
(
len
(
res
)
>
1
and
res
[
-
1
][
0
]
-
res
[
-
2
][
1
])
>=
1
:
...
@@ -375,13 +367,13 @@ def process_video(video_path: str, begin: float, end: float, book_path: str, she
...
@@ -375,13 +367,13 @@ def process_video(video_path: str, begin: float, end: float, book_path: str, she
recommend_lens
=
int
((
res
[
-
1
][
0
]
-
last_time
)
*
normal_speed
)
if
len
(
res
)
==
1
else
int
(
recommend_lens
=
int
((
res
[
-
1
][
0
]
-
last_time
)
*
normal_speed
)
if
len
(
res
)
==
1
else
int
(
(
res
[
-
1
][
0
]
-
res
[
-
2
][
1
])
*
normal_speed
)
(
res
[
-
1
][
0
]
-
res
[
-
2
][
1
])
*
normal_speed
)
# write_to_sheet(book_path, sheet_name, ['', '', '', '插入旁白,推荐字数为%d' % recommend_lens])
# write_to_sheet(book_path, sheet_name, ['', '', '', '插入旁白,推荐字数为%d' % recommend_lens])
add_to_list
(
mainWindow
,
"旁白"
,
[
''
,
''
,
''
,
'插入旁白,推荐字数为
%
d'
%
recommend_lens
])
# add_to_list(mainWindow, "旁白", ['', '', '', '插入旁白,推荐字数为%d' % recommend_lens])
add_to_list
(
mainWindow
,
"旁白"
,
[
''
,
''
,
''
,
'
%
d'
%
recommend_lens
])
print
(
start_time
,
end_time
,
lastSubTitle
)
print
(
start_time
,
end_time
,
lastSubTitle
)
# write_to_sheet(book_path, sheet_name, [round(start_time, 2), round(end_time, 2), lastSubTitle, ''])
# write_to_sheet(book_path, sheet_name, [round(start_time, 2), round(end_time, 2), lastSubTitle, ''])
add_to_list
(
mainWindow
,
"字幕"
,
[
round
(
start_time
,
3
),
round
(
end_time
,
3
),
lastSubTitle
,
''
])
add_to_list
(
mainWindow
,
"字幕"
,
[
round
(
start_time
,
3
),
round
(
end_time
,
3
),
lastSubTitle
,
''
])
start_time
=
end_time
start_time
=
end_time
else
:
else
:
print
(
">>>>>>>>>>>>777777777"
)
lastSubTitle
=
subTitle
if
conf
>
lastConf
else
lastSubTitle
lastSubTitle
=
subTitle
if
conf
>
lastConf
else
lastSubTitle
continue
continue
# 当前字幕与上一段字幕不一样
# 当前字幕与上一段字幕不一样
...
@@ -411,7 +403,6 @@ def add_to_list(mainWindow: MainWindow, element_type: str, li: list):
...
@@ -411,7 +403,6 @@ def add_to_list(mainWindow: MainWindow, element_type: str, li: list):
# 因为暂时没有用到ed_time_sec,所以直接赋值空吧
# 因为暂时没有用到ed_time_sec,所以直接赋值空吧
ed_time_sec
=
""
ed_time_sec
=
""
print
(
">>>>>>>>>>>>>>>>>append aside"
)
new_element
=
Element
(
st_time_sec
,
ed_time_sec
,
subtitle
,
suggest
,
aside
,
speed
)
new_element
=
Element
(
st_time_sec
,
ed_time_sec
,
subtitle
,
suggest
,
aside
,
speed
)
new_element
.
print_self
()
new_element
.
print_self
()
if
mainWindow
.
last_aside_index
!=
None
and
mainWindow
.
projectContext
.
all_elements
[
mainWindow
.
last_aside_index
]
.
ed_time_sec
==
""
and
new_element
.
ed_time_sec
!=
""
:
if
mainWindow
.
last_aside_index
!=
None
and
mainWindow
.
projectContext
.
all_elements
[
mainWindow
.
last_aside_index
]
.
ed_time_sec
==
""
and
new_element
.
ed_time_sec
!=
""
:
...
...
excel_utils.py
View file @
60f70e01
...
@@ -4,6 +4,8 @@ import openpyxl
...
@@ -4,6 +4,8 @@ import openpyxl
from
management
import
Element
from
management
import
Element
from
utils
import
reverse_time_to_seconds
def
read_xls
(
file_path
):
def
read_xls
(
file_path
):
print
(
"read_xls"
)
print
(
"read_xls"
)
elements
=
[]
elements
=
[]
...
@@ -26,20 +28,20 @@ def read_xls(file_path):
...
@@ -26,20 +28,20 @@ def read_xls(file_path):
cell_value
=
str
(
cell_value
)
if
cell_value
!=
None
else
""
cell_value
=
str
(
cell_value
)
if
cell_value
!=
None
else
""
# print(cell_value)
# print(cell_value)
if
col_index
==
0
:
if
col_index
==
0
:
start_time
=
cell_value
if
cell_value
!=
None
else
""
start_time
=
reverse_time_to_seconds
(
cell_value
)
if
cell_value
!=
None
else
""
if
col_index
==
1
:
end_time
=
reverse_time_to_seconds
(
cell_value
)
if
cell_value
!=
None
else
""
if
col_index
==
2
:
if
col_index
==
2
:
end_time
=
cell_value
if
cell_value
!=
None
else
""
if
col_index
==
4
:
subtitle
=
cell_value
if
cell_value
!=
None
else
""
subtitle
=
cell_value
if
cell_value
!=
None
else
""
if
col_index
==
5
:
if
col_index
==
3
:
if
cell_value
==
None
or
cell_value
==
""
:
if
cell_value
==
None
or
cell_value
==
""
:
break
break
suggest
=
cell_value
if
cell_value
!=
None
else
""
suggest
=
cell_value
if
cell_value
!=
None
else
""
if
col_index
==
6
:
if
col_index
==
4
:
if
cell_value
==
None
or
cell_value
==
""
:
if
cell_value
==
None
or
cell_value
==
""
:
break
break
aside
=
cell_value
if
cell_value
!=
None
else
""
aside
=
cell_value
if
cell_value
!=
None
else
""
if
col_index
==
7
:
if
col_index
==
5
:
speed
=
cell_value
if
cell_value
!=
None
else
""
speed
=
cell_value
if
cell_value
!=
None
else
""
col_index
=
col_index
+
1
col_index
=
col_index
+
1
if
suggest
!=
""
and
aside
!=
""
:
if
suggest
!=
""
and
aside
!=
""
:
...
@@ -71,32 +73,36 @@ def read_xlsx(file_path):
...
@@ -71,32 +73,36 @@ def read_xlsx(file_path):
cell_value
=
str
(
cell_value
)
if
cell_value
!=
None
else
""
cell_value
=
str
(
cell_value
)
if
cell_value
!=
None
else
""
# print(cell_value)
# print(cell_value)
if
col_index
==
0
:
if
col_index
==
0
:
start_time
=
cell_value
if
cell_value
!=
None
else
""
start_time
=
reverse_time_to_seconds
(
cell_value
)
if
cell_value
!=
None
else
""
if
col_index
==
1
:
end_time
=
reverse_time_to_seconds
(
cell_value
)
if
cell_value
!=
None
else
""
if
col_index
==
2
:
if
col_index
==
2
:
end_time
=
cell_value
if
cell_value
!=
None
else
""
if
col_index
==
4
:
subtitle
=
cell_value
if
cell_value
!=
None
else
""
subtitle
=
cell_value
if
cell_value
!=
None
else
""
if
col_index
==
5
:
if
col_index
==
3
:
if
cell_value
==
None
or
cell_value
==
""
:
if
cell_value
==
None
or
cell_value
==
""
:
break
break
suggest
=
cell_value
if
cell_value
!=
None
else
""
suggest
=
cell_value
if
cell_value
!=
None
else
""
if
col_index
==
6
:
if
col_index
==
4
:
if
cell_value
==
None
or
cell_value
==
""
:
if
cell_value
==
None
or
cell_value
==
""
:
break
break
aside
=
cell_value
if
cell_value
!=
None
else
""
aside
=
cell_value
if
cell_value
!=
None
else
""
if
col_index
==
7
:
if
col_index
==
5
:
speed
=
cell_value
if
cell_value
!=
None
else
""
speed
=
cell_value
if
cell_value
!=
None
else
""
col_index
=
col_index
+
1
col_index
=
col_index
+
1
if
suggest
!=
""
and
aside
!=
""
:
if
suggest
!=
None
and
suggest
!=
""
and
aside
!=
None
and
aside
!=
""
:
new_element
=
Element
(
start_time
,
end_time
,
subtitle
,
suggest
,
aside
,
speed
)
new_element
=
Element
(
start_time
,
end_time
,
subtitle
,
suggest
,
aside
,
speed
)
#
new_element.print_self()
new_element
.
print_self
()
elements
.
append
(
new_element
)
elements
.
append
(
new_element
)
checkLength
(
elements
)
# checkLength(elements)
print
(
"element size:"
)
print
(
len
(
elements
))
return
elements
return
elements
def
checkLength
(
elements
):
def
checkLength
(
elements
):
for
element
in
elements
:
for
element
in
elements
:
if
int
(
""
.
join
(
filter
(
str
.
isdigit
,
element
.
suggest
)))
<
len
(
element
.
aside
):
# if int("".join(filter(str.isdigit, element.suggest))) < len(element.aside):
# raise Exception("旁白字数没有按照推荐要求")
if
int
(
element
.
suggest
)
<
len
(
element
.
aside
):
raise
Exception
(
"旁白字数没有按照推荐要求"
)
raise
Exception
(
"旁白字数没有按照推荐要求"
)
# elements = read_xlsx("C:/Users/AIA/Desktop/1/121/1.xlsx")
# elements = read_xlsx("C:/Users/AIA/Desktop/1/121/1.xlsx")
...
...
ffmpeg_util.py
View file @
60f70e01
...
@@ -44,7 +44,6 @@ def adjust_audio_volume(input_file, volume_adjustment):
...
@@ -44,7 +44,6 @@ def adjust_audio_volume(input_file, volume_adjustment):
"-y"
,
# 覆盖输出文件,加上此选项
"-y"
,
# 覆盖输出文件,加上此选项
temp_path
# 输出文件与输入文件相同
temp_path
# 输出文件与输入文件相同
]
]
print
(
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>cg audio"
+
input_file
+
str
(
volume_adjustment
))
subprocess
.
run
(
command
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
)
subprocess
.
run
(
command
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
)
os
.
remove
(
input_file
)
os
.
remove
(
input_file
)
# os.rename(temp_path, input_file)
# os.rename(temp_path, input_file)
...
@@ -53,7 +52,6 @@ def adjust_audio_volume(input_file, volume_adjustment):
...
@@ -53,7 +52,6 @@ def adjust_audio_volume(input_file, volume_adjustment):
def
cg_wav
(
first_file_path
,
second_file_path
,
rate
):
def
cg_wav
(
first_file_path
,
second_file_path
,
rate
):
try
:
try
:
print
(
">>>>>>>>>>>>>>>cg_wav"
)
print
(
first_file_path
,
second_file_path
,
str
(
rate
))
print
(
first_file_path
,
second_file_path
,
str
(
rate
))
# 计算第一个文件的音量
# 计算第一个文件的音量
first_file_volume
=
calculate_audio_volume
(
first_file_path
)
first_file_volume
=
calculate_audio_volume
(
first_file_path
)
...
@@ -78,7 +76,7 @@ def cg_wav(first_file_path, second_file_path, rate):
...
@@ -78,7 +76,7 @@ def cg_wav(first_file_path, second_file_path, rate):
else
:
else
:
print
(
"无法计算第一个文件的音量"
)
print
(
"无法计算第一个文件的音量"
)
except
Exception
as
e
:
except
Exception
as
e
:
print
(
"
>>>>>>>>>>>>>>
cg_wav err"
)
print
(
"cg_wav err"
)
print
(
e
)
print
(
e
)
...
...
main_window.py
View file @
60f70e01
...
@@ -42,10 +42,47 @@ from ding_utils import notify
...
@@ -42,10 +42,47 @@ from ding_utils import notify
from
excel_utils
import
read_xls
,
read_xlsx
from
excel_utils
import
read_xls
,
read_xlsx
from
ffmpeg_util
import
adjust_audio_volume
from
ffmpeg_util
import
adjust_audio_volume
from
PyQt5.QtCore
import
QThread
;
# from emit_import_event import emit_import_event
class
WorkerThread
(
QThread
):
def
__init__
(
self
,
main_window
,
elements
):
super
()
.
__init__
()
self
.
main_window
=
main_window
self
.
elements
=
elements
def
run
(
self
):
# 在后台执行耗时操作
state
=
[
None
]
self
.
main_window
.
state
=
state
self
.
main_window
.
threads
=
[]
t
=
RunThread
(
funcName
=
self
.
main_window
.
batch_add_line_operation_slot
,
args
=
(
self
.
elements
,
state
,
self
),
name
=
"batch_add_line_operation_slot"
)
t
.
setDaemon
(
True
)
self
.
main_window
.
threads
.
append
(
t
)
self
.
main_window
.
all_threads
.
append
(
t
)
for
t
in
self
.
main_window
.
threads
:
t
.
start
()
def
refresh
(
self
):
self
.
main_window
.
import_process_sign
.
emit
(
self
.
elements
)
class
MainWindow
(
QMainWindow
,
Ui_MainWindow
):
class
MainWindow
(
QMainWindow
,
Ui_MainWindow
):
EXIT_CODE_REBOOT
=
-
12345678
EXIT_CODE_REBOOT
=
-
12345678
renew_signal
=
pyqtSignal
(
str
)
renew_signal
=
pyqtSignal
(
str
)
import_process_sign
=
pyqtSignal
(
list
)
refresh_sign
=
pyqtSignal
()
def
__init__
(
self
,
project_path
):
def
__init__
(
self
,
project_path
):
super
(
MainWindow
,
self
)
.
__init__
()
super
(
MainWindow
,
self
)
.
__init__
()
...
@@ -88,6 +125,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -88,6 +125,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self
.
continue_detect_prompt_dialog
=
Prompt_Dialog
(
self
.
continue_detect_prompt_dialog
=
Prompt_Dialog
(
self
.
continue_detect
)
self
.
continue_detect
)
# 导入旁白提示框
self
.
import_excel_dialog
=
Prompt_Dialog
()
# 操作框
# 操作框
self
.
operation_dialog
=
Operation_Dialog
(
self
)
self
.
operation_dialog
=
Operation_Dialog
(
self
)
self
.
operation_dialog
.
start_add_signal
.
connect
(
self
.
operation_dialog
.
start_add_signal
.
connect
(
...
@@ -99,6 +139,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -99,6 +139,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self
.
del_line_operation_slot
)
self
.
del_line_operation_slot
)
# 所有QTimer集中管理
# 所有QTimer集中管理
self
.
import_excel_timer
=
QTimer
()
self
.
import_excel_timer
.
timeout
.
connect
(
self
.
check_if_import_excel_over
)
self
.
detect_timer
=
QTimer
()
self
.
detect_timer
=
QTimer
()
self
.
detect_timer
.
timeout
.
connect
(
self
.
check_if_detect_over_slot
)
self
.
detect_timer
.
timeout
.
connect
(
self
.
check_if_detect_over_slot
)
self
.
synthesis_timer
=
QTimer
()
self
.
synthesis_timer
=
QTimer
()
...
@@ -478,15 +520,18 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -478,15 +520,18 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# self.start_detect_direct()
# self.start_detect_direct()
def
up_ocr
(
self
):
def
up_ocr
(
self
):
self
.
widget
.
change_painter_flag
(
True
)
h
=
self
.
widget
.
up
(
3
)
h
=
self
.
widget
.
up
(
3
)
video_h
=
self
.
wgt_video
.
height
()
video_h
=
self
.
wgt_video
.
height
()
self
.
rate
=
float
(
h
-
10
)
/
float
(
video_h
)
self
.
rate
=
float
(
h
-
10
)
/
float
(
video_h
)
print
(
">>>>>video_h: "
+
str
(
video_h
))
print
(
">>>>>up h:"
+
str
(
h
))
print
(
">>>>>up h:"
+
str
(
h
))
print
(
self
.
wgt_video
.
height
())
print
(
self
.
wgt_video
.
height
())
print
(
">>>>>>>>>rate"
+
str
(
self
.
rate
))
print
(
">>>>>>>>>rate"
+
str
(
self
.
rate
))
def
down_ocr
(
self
):
def
down_ocr
(
self
):
self
.
widget
.
change_painter_flag
(
True
)
h
=
self
.
widget
.
down
(
3
)
h
=
self
.
widget
.
down
(
3
)
video_h
=
self
.
wgt_video
.
height
()
video_h
=
self
.
wgt_video
.
height
()
self
.
rate
=
float
(
h
-
10
)
/
float
(
video_h
)
self
.
rate
=
float
(
h
-
10
)
/
float
(
video_h
)
...
@@ -495,44 +540,62 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -495,44 +540,62 @@ class MainWindow(QMainWindow, Ui_MainWindow):
print
(
">>>>>>>>>rate"
+
str
(
self
.
rate
))
print
(
">>>>>>>>>rate"
+
str
(
self
.
rate
))
def
up_ocr_bottom
(
self
):
def
up_ocr_bottom
(
self
):
self
.
widget_bottom
.
change_painter_flag
(
True
)
h
=
self
.
widget_bottom
.
up
(
3
)
h
=
self
.
widget_bottom
.
up
(
3
)
video_h
=
self
.
wgt_video
.
height
()
video_h
=
self
.
wgt_video
.
height
()
self
.
rate_bottom
=
float
(
h
-
6
)
/
float
(
video_h
)
self
.
rate_bottom
=
float
(
h
-
6
)
/
float
(
video_h
)
def
down_ocr_bottom
(
self
):
def
down_ocr_bottom
(
self
):
self
.
widget_bottom
.
change_painter_flag
(
True
)
h
=
self
.
widget_bottom
.
down
(
3
)
h
=
self
.
widget_bottom
.
down
(
3
)
video_h
=
self
.
wgt_video
.
height
()
video_h
=
self
.
wgt_video
.
height
()
self
.
rate_bottom
=
float
(
h
-
6
)
/
float
(
video_h
)
self
.
rate_bottom
=
float
(
h
-
6
)
/
float
(
video_h
)
def
refresh_on_import
(
self
):
print
(
">>>>>>>refresh in"
)
self
.
refresh_tab_slot
()
#导入旁白excel
#导入旁白excel
def
import_excel
(
self
):
def
import_excel
(
self
):
# excel_path = self.openExcelFile()
# print(excel_path)
# elements = None
# if excel_path.endswith("xls"):
# elements = read_xls(excel_path)
# else:
# elements = read_xlsx(excel_path)
# if elements != None and len(elements) > 0:
# self.batch_add_line_operation_slot(elements)
try
:
try
:
excel_path
=
self
.
openExcelFile
()
excel_path
=
self
.
openExcelFile
()
print
(
excel_path
)
print
(
excel_path
)
elements
=
None
elements
=
None
if
excel_path
.
endswith
(
"xls"
):
if
excel_path
.
endswith
(
"xls"
):
elements
=
read_xls
(
excel_path
)
elements
=
read_xls
(
excel_path
)
el
se
:
el
if
excel_path
.
endswith
(
"xlsx"
)
:
elements
=
read_xlsx
(
excel_path
)
elements
=
read_xlsx
(
excel_path
)
else
:
self
.
import_excel_dialog
.
show_with_msg
(
"请选择正确的excel文件"
)
return
if
elements
!=
None
and
len
(
elements
)
>
0
:
if
elements
!=
None
and
len
(
elements
)
>
0
:
self
.
batch_add_line_operation_slot
(
elements
)
# self.widget.change_painter_flag(False)
# self.widget_bottom.change_painter_flag(False)
self
.
statusbarLabel
.
setText
(
"准备导入:"
)
self
.
progressBar
.
setValue
(
0
)
self
.
worker_thread
=
WorkerThread
(
self
,
elements
)
self
.
import_excel_timer
.
start
(
5000
)
self
.
import_process_sign
.
connect
(
self
.
import_process
)
self
.
refresh_sign
.
connect
(
self
.
refresh_on_import
)
self
.
worker_thread
.
start
()
# self.import_excel_dialog.show_with_msg("请等待导入进度完成")
else
:
self
.
import_excel_dialog
.
show_with_msg
(
"没有要更新的旁白内容"
)
except
Exception
as
e
:
except
Exception
as
e
:
print
(
"import excel err"
)
print
(
"import excel err"
)
print
(
e
)
print
(
e
)
notify
(
e
)
notify
(
e
)
self
.
prompt_dialog
.
show_with_msg
(
"导入旁白失败,请检查模板及内容: "
+
e
.
args
[
0
])
self
.
import_excel_dialog
.
show_with_msg
(
"导入旁白失败,请检查模板及内容: "
+
e
.
args
[
0
])
def
import_process
(
self
,
elements
):
print
(
">>>>>>>>>>>into import process"
)
print
(
len
(
elements
))
self
.
refresh_all_tab_slot
()
# self.widget.change_painter_flag(True)
# self.widget_bottom.change_painter_flag(True)
"""导入视频,并对主界面中的相关控件进行对应更新
"""导入视频,并对主界面中的相关控件进行对应更新
"""
"""
...
@@ -721,6 +784,12 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -721,6 +784,12 @@ class MainWindow(QMainWindow, Ui_MainWindow):
"""
"""
self
.
check_if_over
(
"导出"
)
self
.
check_if_over
(
"导出"
)
def
check_if_import_excel_over
(
self
):
"""确认自动渲染导出任务是否完成
"""
self
.
check_if_over
(
"旁白导入"
)
# type = 检测 或 合成 或 导出
# type = 检测 或 合成 或 导出
def
check_if_over
(
self
,
type
:
str
):
def
check_if_over
(
self
,
type
:
str
):
"""确认传入的待检测任务是否完成
"""确认传入的待检测任务是否完成
...
@@ -748,6 +817,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -748,6 +817,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
elif
type
==
"检测"
:
elif
type
==
"检测"
:
self
.
detect_timer
.
stop
()
self
.
detect_timer
.
stop
()
self
.
refresh_tab_timer
.
stop
()
self
.
refresh_tab_timer
.
stop
()
elif
type
==
"旁白导入"
:
self
.
import_excel_timer
.
stop
()
# self.refresh_tab_timer.stop()
else
:
else
:
self
.
export_timer
.
stop
()
self
.
export_timer
.
stop
()
...
@@ -960,12 +1032,26 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -960,12 +1032,26 @@ class MainWindow(QMainWindow, Ui_MainWindow):
return
path
return
path
def
openExcelFile
(
self
):
def
openExcelFile
(
self
):
path
=
QFileDialog
.
getOpenFileUrl
(
self
,
"选择待导入Excel"
,
QUrl
(
# path = QFileDialog.getOpenFileUrl(self, "选择待导入Excel", QUrl(
os
.
getcwd
()),
"Excel Files(*.xls *xlsx *.);; 所有文件(*.*)"
)[
0
]
# os.getcwd()), "Excel Files(*.xls *xlsx *.);; 所有文件(*.*)")[0]
# # print(path.url()[8:])
# print(path)
# print(path.url()[8:])
# print(path.url()[8:])
print
(
path
)
# return path.url()[8:]
print
(
path
.
url
()[
8
:])
options
=
QFileDialog
.
Options
()
return
path
.
url
()[
8
:]
options
|=
QFileDialog
.
ReadOnly
options
|=
QFileDialog
.
DontUseNativeDialog
file_dialog
=
QFileDialog
()
file_dialog
.
setOptions
(
options
)
file_dialog
.
setFileMode
(
QFileDialog
.
ExistingFile
)
file_dialog
.
setNameFilter
(
"Excel Files (*.xls *.xlsx)"
)
if
file_dialog
.
exec_
()
==
QFileDialog
.
Accepted
:
selected_files
=
file_dialog
.
selectedFiles
()
if
selected_files
:
return
selected_files
[
0
]
return
""
# 在初始化工程时
# 在初始化工程时
def
init_ProjectContext_VideoPath
(
self
,
path
:
str
):
def
init_ProjectContext_VideoPath
(
self
,
path
:
str
):
...
@@ -1046,11 +1132,14 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -1046,11 +1132,14 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# self.all_tableWidget.clear()
# self.all_tableWidget.clear()
self
.
all_tableWidget
.
setRowCount
(
len
(
all_elements
))
self
.
all_tableWidget
.
setRowCount
(
len
(
all_elements
))
if
need_refresh_all
:
self
.
all_tableWidget
.
clearContents
()
st_idx
=
0
if
need_refresh_all
else
self
.
all_tableWidget_idx
st_idx
=
0
if
need_refresh_all
else
self
.
all_tableWidget_idx
for
i
in
range
(
st_idx
,
len
(
all_elements
)):
for
i
in
range
(
st_idx
,
len
(
all_elements
)):
self
.
setElememtToTable
(
self
.
all_tableWidget
,
all_elements
[
i
],
i
)
self
.
setElememtToTable
(
self
.
all_tableWidget
,
all_elements
[
i
],
i
)
self
.
all_tableWidget_idx
=
self
.
all_tableWidget_idx
+
1
self
.
all_tableWidget_idx
=
len
(
all_elements
)
#
self.all_tableWidget_idx = len(all_elements)
self
.
pb_tableWidget_idx
=
len
(
aside_list
)
self
.
pb_tableWidget_idx
=
len
(
aside_list
)
self
.
zm_tableWidget_idx
=
len
(
subtitle_list
)
self
.
zm_tableWidget_idx
=
len
(
subtitle_list
)
# self.all_tableWidget.resizeRowsToContents()
# self.all_tableWidget.resizeRowsToContents()
...
@@ -1725,6 +1814,15 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -1725,6 +1814,15 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self
.
set_table_to_window
(
need_refresh_all
=
False
)
self
.
set_table_to_window
(
need_refresh_all
=
False
)
self
.
projectContext
.
save_project
(
False
)
self
.
projectContext
.
save_project
(
False
)
def
refresh_all_tab_slot
(
self
):
"""刷新整个表格
将表格内容更新至界面中,并保存当前工程内容
"""
self
.
set_table_to_window
(
need_refresh_all
=
True
)
self
.
projectContext
.
save_project
(
False
)
def
export_all
(
self
):
def
export_all
(
self
):
"""导出无障碍电影视频
"""导出无障碍电影视频
...
@@ -1759,10 +1857,15 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -1759,10 +1857,15 @@ class MainWindow(QMainWindow, Ui_MainWindow):
print
(
"[insert_aside_from_now_slot] idx="
,
idx
)
print
(
"[insert_aside_from_now_slot] idx="
,
idx
)
# 其实end_time目前是没啥用的,可以删掉了
# 其实end_time目前是没啥用的,可以删掉了
print
(
"cur_lens"
,
len
(
self
.
projectContext
.
all_elements
))
print
(
"cur_lens"
,
len
(
self
.
projectContext
.
all_elements
))
# if idx < len(self.projectContext.all_elements) - 1:
# self.add_line_operation_slot(idx, str(cur_time), self.projectContext.all_elements[idx+1].st_time_sec, "", "插入旁白,推荐字数为0", "", self.projectContext.speaker_speed)
# else:
# self.add_line_operation_slot(idx, str(cur_time), str(cur_time+1), "", "插入旁白,推荐字数为0", "", self.projectContext.speaker_speed)
if
idx
<
len
(
self
.
projectContext
.
all_elements
)
-
1
:
if
idx
<
len
(
self
.
projectContext
.
all_elements
)
-
1
:
self
.
add_line_operation_slot
(
idx
,
str
(
cur_time
),
self
.
projectContext
.
all_elements
[
idx
+
1
]
.
st_time_sec
,
""
,
"
插入旁白,推荐字数为
0"
,
""
,
self
.
projectContext
.
speaker_speed
)
self
.
add_line_operation_slot
(
idx
,
str
(
cur_time
),
self
.
projectContext
.
all_elements
[
idx
+
1
]
.
st_time_sec
,
""
,
"0"
,
""
,
self
.
projectContext
.
speaker_speed
)
else
:
else
:
self
.
add_line_operation_slot
(
idx
,
str
(
cur_time
),
str
(
cur_time
+
1
),
""
,
"插入旁白,推荐字数为0"
,
""
,
self
.
projectContext
.
speaker_speed
)
self
.
add_line_operation_slot
(
idx
,
str
(
cur_time
),
str
(
cur_time
+
1
),
""
,
"0"
,
""
,
self
.
projectContext
.
speaker_speed
)
def
insert_aside_from_cur_time
(
self
,
cur_time
:
float
):
def
insert_aside_from_cur_time
(
self
,
cur_time
:
float
):
"""在当前位置插入旁白
"""在当前位置插入旁白
...
@@ -1779,10 +1882,14 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -1779,10 +1882,14 @@ class MainWindow(QMainWindow, Ui_MainWindow):
print
(
"[insert_aside_from_now_slot] idx="
,
idx
)
print
(
"[insert_aside_from_now_slot] idx="
,
idx
)
# 其实end_time目前是没啥用的,可以删掉了
# 其实end_time目前是没啥用的,可以删掉了
print
(
"cur_lens"
,
len
(
self
.
projectContext
.
all_elements
))
print
(
"cur_lens"
,
len
(
self
.
projectContext
.
all_elements
))
# if idx < len(self.projectContext.all_elements) - 1:
# self.add_line_operation_slot(idx, str(cur_time), self.projectContext.all_elements[idx+1].st_time_sec, "", "插入旁白,推荐字数为0", "", self.projectContext.speaker_speed)
# else:
# self.add_line_operation_slot(idx, str(cur_time), str(cur_time+1), "", "插入旁白,推荐字数为0", "", self.projectContext.speaker_speed)
if
idx
<
len
(
self
.
projectContext
.
all_elements
)
-
1
:
if
idx
<
len
(
self
.
projectContext
.
all_elements
)
-
1
:
self
.
add_line_operation_slot
(
idx
,
str
(
cur_time
),
self
.
projectContext
.
all_elements
[
idx
+
1
]
.
st_time_sec
,
""
,
"
插入旁白,推荐字数为
0"
,
""
,
self
.
projectContext
.
speaker_speed
)
self
.
add_line_operation_slot
(
idx
,
str
(
cur_time
),
self
.
projectContext
.
all_elements
[
idx
+
1
]
.
st_time_sec
,
""
,
"0"
,
""
,
self
.
projectContext
.
speaker_speed
)
else
:
else
:
self
.
add_line_operation_slot
(
idx
,
str
(
cur_time
),
str
(
cur_time
+
1
),
""
,
"
插入旁白,推荐字数为
0"
,
""
,
self
.
projectContext
.
speaker_speed
)
self
.
add_line_operation_slot
(
idx
,
str
(
cur_time
),
str
(
cur_time
+
1
),
""
,
"0"
,
""
,
self
.
projectContext
.
speaker_speed
)
def
calculate_element_row
(
self
,
cur_time
:
float
):
def
calculate_element_row
(
self
,
cur_time
:
float
):
"""确认表格中适合cur_time的插入位置
"""确认表格中适合cur_time的插入位置
...
@@ -1847,7 +1954,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -1847,7 +1954,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
new_element
.
print_self
()
new_element
.
print_self
()
self
.
projectContext
.
all_elements
.
insert
(
int
(
row
),
new_element
)
self
.
projectContext
.
all_elements
.
insert
(
int
(
row
),
new_element
)
self
.
all_tableWidget_idx
=
int
(
row
)
self
.
all_tableWidget_idx
=
int
(
row
)
if
suggest
is
not
None
and
"插入旁白,推荐字数为"
in
suggest
:
# if suggest is not None and "插入旁白,推荐字数为" in suggest:
if
suggest
is
not
None
and
suggest
!=
""
:
idx
=
0
idx
=
0
while
idx
<
len
(
self
.
projectContext
.
aside_list
):
while
idx
<
len
(
self
.
projectContext
.
aside_list
):
if
float
(
start_time
)
<
float
(
self
.
projectContext
.
aside_list
[
idx
]
.
st_time_sec
):
if
float
(
start_time
)
<
float
(
self
.
projectContext
.
aside_list
[
idx
]
.
st_time_sec
):
...
@@ -1867,7 +1975,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -1867,7 +1975,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self
.
refresh_tab_slot
()
self
.
refresh_tab_slot
()
self
.
prompt_dialog
.
show_with_msg
(
"操作成功!!请查看变化"
)
self
.
prompt_dialog
.
show_with_msg
(
"操作成功!!请查看变化"
)
def
batch_add_line_operation_slot
(
self
,
elements
):
def
batch_add_line_operation_slot
(
self
,
elements
,
state
,
workerThread
):
"""添加一行信息
"""添加一行信息
Args:
Args:
...
@@ -1881,21 +1989,31 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -1881,21 +1989,31 @@ class MainWindow(QMainWindow, Ui_MainWindow):
"""
"""
# 注意,这里需要用同一对象,不能生成多个Element
# 注意,这里需要用同一对象,不能生成多个Element
self
.
check_org_aside
(
elements
)
self
.
check_org_aside
(
elements
)
print
(
">>>>>>>elements size"
)
print
(
len
(
elements
))
total
=
len
(
elements
)
index
=
0
for
new_element
in
elements
:
for
new_element
in
elements
:
index
=
index
+
1
state
[
0
]
=
index
/
total
start_time
=
new_element
.
st_time_sec
start_time
=
new_element
.
st_time_sec
suggest
=
new_element
.
suggest
suggest
=
new_element
.
suggest
aside
=
new_element
.
aside
aside
=
new_element
.
aside
subtitle
=
new_element
.
subtitle
subtitle
=
new_element
.
subtitle
# insert_time = self.getSeconds(start_time)
print
(
">>>>>>aside: "
+
aside
)
# cur_time = round(insert_time/1000, 3)
insert_time
=
self
.
getSeconds
(
start_time
)
cur_time
=
round
(
insert_time
/
1000
,
3
)
row
,
same_flag
=
self
.
removeByCurTime
(
start_time
,
aside
)
row
,
same_flag
=
self
.
removeByCurTime
(
start_time
,
aside
)
#该旁白没有被改动
#
#
该旁白没有被改动
if
same_flag
:
if
same_flag
:
continue
continue
# row = self.calculate_element_row(cur_time)
print
(
start_time
)
row
=
self
.
calculate_element_row
(
float
(
start_time
))
print
(
int
(
row
))
self
.
projectContext
.
all_elements
.
insert
(
int
(
row
),
new_element
)
self
.
projectContext
.
all_elements
.
insert
(
int
(
row
),
new_element
)
self
.
all_tableWidget_idx
=
int
(
row
)
self
.
all_tableWidget_idx
=
int
(
row
)
if
suggest
is
not
None
and
"插入旁白,推荐字数为"
in
suggest
:
# if suggest is not None and "插入旁白,推荐字数为" in suggest:
if
suggest
is
not
None
and
suggest
!=
""
:
idx
=
0
idx
=
0
while
idx
<
len
(
self
.
projectContext
.
aside_list
):
while
idx
<
len
(
self
.
projectContext
.
aside_list
):
if
float
(
start_time
)
==
float
(
self
.
projectContext
.
aside_list
[
idx
]
.
st_time_sec
)
and
aside
!=
self
.
projectContext
.
aside_list
[
idx
]
.
aside
:
if
float
(
start_time
)
==
float
(
self
.
projectContext
.
aside_list
[
idx
]
.
st_time_sec
)
and
aside
!=
self
.
projectContext
.
aside_list
[
idx
]
.
aside
:
...
@@ -1906,7 +2024,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -1906,7 +2024,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
idx
+=
1
idx
+=
1
self
.
projectContext
.
aside_list
.
insert
(
idx
,
new_element
)
self
.
projectContext
.
aside_list
.
insert
(
idx
,
new_element
)
self
.
pb_tableWidget_idx
=
idx
self
.
pb_tableWidget_idx
=
idx
self
.
do_generate_audio_by_aside_row
(
idx
)
#
self.do_generate_audio_by_aside_row(idx)
else
:
else
:
idx
=
0
idx
=
0
while
idx
<
len
(
self
.
projectContext
.
subtitle_list
):
while
idx
<
len
(
self
.
projectContext
.
subtitle_list
):
...
@@ -1918,8 +2036,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -1918,8 +2036,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
idx
+=
1
idx
+=
1
self
.
projectContext
.
subtitle_list
.
insert
(
idx
,
new_element
)
self
.
projectContext
.
subtitle_list
.
insert
(
idx
,
new_element
)
self
.
zm_tableWidget_idx
=
idx
self
.
zm_tableWidget_idx
=
idx
self
.
refresh_tab_slot
()
# self.refresh_tab_slot()
self
.
prompt_dialog
.
show_with_msg
(
"操作成功!!请查看变化"
)
time
.
sleep
(
1
)
workerThread
.
refresh
()
def
check_org_aside
(
self
,
elements
):
def
check_org_aside
(
self
,
elements
):
start_time_map
=
{}
start_time_map
=
{}
...
@@ -1938,18 +2058,21 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -1938,18 +2058,21 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# self.projectContext.aside_list=new_list
# self.projectContext.aside_list=new_list
# self.refresh_tab_slot(True)
# self.refresh_tab_slot(True)
for
item
in
remove_list
:
for
item
in
remove_list
:
print
(
">>>>>remove"
)
item
.
print_self
()
item
.
print_self
()
idx
=
0
idx
=
0
del_row
=
0
del_row
=
0
while
idx
<
len
(
self
.
projectContext
.
aside_list
):
while
idx
<
len
(
self
.
projectContext
.
aside_list
):
if
item
.
st_time_sec
==
self
.
projectContext
.
aside_list
[
idx
]
.
st_time_sec
:
if
item
.
st_time_sec
==
self
.
projectContext
.
aside_list
[
idx
]
.
st_time_sec
:
self
.
projectContext
.
aside_list
.
pop
(
idx
)
self
.
projectContext
.
aside_list
.
pop
(
idx
)
print
(
">>>>>>>>>>>> item sec"
)
print
(
item
.
st_time_sec
)
del_row
,
_
=
self
.
removeByCurTime
(
item
.
st_time_sec
,
item
.
aside
,
False
)
del_row
,
_
=
self
.
removeByCurTime
(
item
.
st_time_sec
,
item
.
aside
,
False
)
break
break
idx
+=
1
idx
+=
1
self
.
pb_tableWidget_idx
=
idx
self
.
pb_tableWidget_idx
=
idx
self
.
refresh_tab_slot
()
#
self.refresh_tab_slot()
self
.
del_line_operation_slot
(
row
=
(
del_row
+
1
))
self
.
del_line_operation_slot
(
row
=
(
del_row
+
1
)
,
refresh_flag
=
False
)
# for aside in self.projectContext.aside_list:
# for aside in self.projectContext.aside_list:
# if item.st_time_sec == aside.st_time_sec:
# if item.st_time_sec == aside.st_time_sec:
...
@@ -1984,7 +2107,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -1984,7 +2107,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# 新的element
# 新的element
elem
=
Element
(
start_time
,
end_time
,
subtitle
,
suggest
,
aside
,
speed
)
elem
=
Element
(
start_time
,
end_time
,
subtitle
,
suggest
,
aside
,
speed
)
if
suggest
is
not
None
and
"插入旁白,推荐字数为"
in
suggest
:
# if suggest is not None and "插入旁白,推荐字数为" in suggest:
if
suggest
is
not
None
and
suggest
!=
""
:
for
i
in
range
(
len
(
self
.
projectContext
.
aside_list
)):
for
i
in
range
(
len
(
self
.
projectContext
.
aside_list
)):
if
to_be_modify_element
.
equalTo
(
self
.
projectContext
.
aside_list
[
i
]):
if
to_be_modify_element
.
equalTo
(
self
.
projectContext
.
aside_list
[
i
]):
print
(
i
)
print
(
i
)
...
@@ -2008,7 +2132,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -2008,7 +2132,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self
.
prompt_dialog
.
show_with_msg
(
"操作成功!!请查看变化"
)
self
.
prompt_dialog
.
show_with_msg
(
"操作成功!!请查看变化"
)
# 只有row起作用
# 只有row起作用
def
del_line_operation_slot
(
self
,
row
:
int
,
start_time
=
"0"
,
end_time
=
"0"
,
subtitle
=
""
,
suggest
=
""
,
aside
=
""
,
speed
=
""
):
def
del_line_operation_slot
(
self
,
row
:
int
,
start_time
=
"0"
,
end_time
=
"0"
,
subtitle
=
""
,
suggest
=
""
,
aside
=
""
,
speed
=
""
,
refresh_flag
=
True
):
"""删除一行
"""删除一行
Args:
Args:
...
@@ -2021,8 +2145,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -2021,8 +2145,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
speed (str, optional): 旁白语速. Defaults to "".
speed (str, optional): 旁白语速. Defaults to "".
"""
"""
to_be_delete_element
=
self
.
projectContext
.
all_elements
[
int
(
row
)
-
1
]
to_be_delete_element
=
self
.
projectContext
.
all_elements
[
int
(
row
)
-
1
]
# if self.projectContext.all_elements[int(row)-1].suggest is not None \
# and "插入旁白,推荐字数为" in self.projectContext.all_elements[int(row)-1].suggest:
if
self
.
projectContext
.
all_elements
[
int
(
row
)
-
1
]
.
suggest
is
not
None
\
if
self
.
projectContext
.
all_elements
[
int
(
row
)
-
1
]
.
suggest
is
not
None
\
and
"插入旁白,推荐字数为"
in
self
.
projectContext
.
all_elements
[
int
(
row
)
-
1
]
.
suggest
:
and
self
.
projectContext
.
all_elements
[
int
(
row
)
-
1
]
.
suggest
!=
""
:
for
i
in
range
(
len
(
self
.
projectContext
.
aside_list
)):
for
i
in
range
(
len
(
self
.
projectContext
.
aside_list
)):
if
to_be_delete_element
.
equalTo
(
self
.
projectContext
.
aside_list
[
i
]):
if
to_be_delete_element
.
equalTo
(
self
.
projectContext
.
aside_list
[
i
]):
self
.
pb_tableWidget_idx
=
i
self
.
pb_tableWidget_idx
=
i
...
@@ -2043,8 +2169,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
...
@@ -2043,8 +2169,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self
.
all_tableWidget_idx
=
int
(
row
)
-
1
self
.
all_tableWidget_idx
=
int
(
row
)
-
1
self
.
projectContext
.
all_elements
.
pop
(
int
(
row
)
-
1
)
self
.
projectContext
.
all_elements
.
pop
(
int
(
row
)
-
1
)
self
.
refresh_tab_slot
()
if
refresh_flag
:
self
.
prompt_dialog
.
show_with_msg
(
"操作成功!!请查看变化"
)
self
.
refresh_tab_slot
()
self
.
prompt_dialog
.
show_with_msg
(
"操作成功!!请查看变化"
)
def
pb_item_changed_by_double_clicked_slot
(
self
,
item
):
def
pb_item_changed_by_double_clicked_slot
(
self
,
item
):
"""双击后修改旁白文本
"""双击后修改旁白文本
...
...
main_window_ui.py
View file @
60f70e01
...
@@ -11,28 +11,60 @@ from PyQt5.QtWidgets import QMainWindow, QFileDialog, QTableWidget, QTableWidget
...
@@ -11,28 +11,60 @@ from PyQt5.QtWidgets import QMainWindow, QFileDialog, QTableWidget, QTableWidget
from
PyQt5.QtCore
import
QUrl
,
Qt
,
QTimer
,
QRect
,
pyqtSignal
,
QPersistentModelIndex
from
PyQt5.QtCore
import
QUrl
,
Qt
,
QTimer
,
QRect
,
pyqtSignal
,
QPersistentModelIndex
from
PyQt5.QtMultimedia
import
*
from
PyQt5.QtMultimedia
import
*
from
PyQt5.QtGui
import
QIcon
,
QPainter
,
QColor
,
QPen
from
PyQt5.QtGui
import
QIcon
,
QPainter
,
QColor
,
QPen
import
threading
lock
=
threading
.
Lock
()
class
MyWidget
(
QWidget
):
class
MyWidget
(
QWidget
):
# def __init__(self, parent=None):
# super(QWidget, self).__init__(parent)
# self.painter_flag = True
def
paintEvent
(
self
,
event
):
def
paintEvent
(
self
,
event
):
print
(
">>>>>>>>>>>>>>>into paint"
)
# print(">>>>>>>>into paint")
# print(self.painter_flag)
# if self.painter_flag:
lock
.
acquire
()
painter
=
QPainter
(
self
)
painter
=
QPainter
(
self
)
painter
.
setRenderHint
(
QPainter
.
Antialiasing
)
# Optional: Enable anti-aliasing
painter
.
setRenderHint
(
QPainter
.
Antialiasing
)
# Optional: Enable anti-aliasing
# painter.setCompositionMode(QPainter.CompositionMode_SourceOver) # Set composition mode
# # Draw existing content
# painter.fillRect(event.rect(), QColor(255, 255, 255)) # Fill with white color (you can adjust as needed)
# Draw a transparent horizontal line
painter
.
setPen
(
QPen
(
Qt
.
red
,
2
,
Qt
.
SolidLine
))
painter
.
setPen
(
QPen
(
Qt
.
red
,
2
,
Qt
.
SolidLine
))
painter
.
drawLine
(
0
,
1
,
800
,
1
)
painter
.
drawLine
(
0
,
1
,
800
,
1
)
painter
.
end
()
lock
.
release
()
# self.painter_flag = False
# painter = QPainter(self)
# painter.setRenderHint(QPainter.Antialiasing) # Optional: Enable anti-aliasing
# # painter.setCompositionMode(QPainter.CompositionMode_SourceOver) # Set composition mode
# # # Draw existing content
# # painter.fillRect(event.rect(), QColor(255, 255, 255)) # Fill with white color (you can adjust as needed)
# # Draw a transparent horizontal line
# painter.setPen(QPen(Qt.gray, 2, Qt.SolidLine))
# painter.drawLine(0, 1, 800, 1)
# painter.end()
def
change_painter_flag
(
self
,
state
):
print
(
">>>>>>>>>>>>>>>change state"
)
# print(state)
# self.painter_flag = state
def
up
(
self
,
mov_len
):
def
up
(
self
,
mov_len
):
print
(
">>>>>>>>>>>up"
+
str
(
mov_len
))
print
(
">>>>>>>>>>>up"
+
str
(
mov_len
))
self
.
move
(
0
,
self
.
y
()
-
mov_len
)
self
.
move
(
0
,
self
.
y
()
-
mov_len
)
# painter = QPainter(self)
# painter.setRenderHint(QPainter.Antialiasing) # Optional: Enable anti-aliasing
# painter.setPen(QPen(Qt.red, 2, Qt.SolidLine))
# painter.drawLine(0, 1, 800, 1)
# painter.end()
return
self
.
y
()
return
self
.
y
()
def
down
(
self
,
mov_len
):
def
down
(
self
,
mov_len
):
print
(
">>>>>>>>>>>down"
+
str
(
mov_len
))
print
(
">>>>>>>>>>>down"
+
str
(
mov_len
))
self
.
move
(
0
,
self
.
y
()
+
mov_len
)
self
.
move
(
0
,
self
.
y
()
+
mov_len
)
# painter = QPainter(self)
# painter.setRenderHint(QPainter.Antialiasing) # Optional: Enable anti-aliasing
# painter.setPen(QPen(Qt.red, 2, Qt.SolidLine))
# painter.drawLine(0, 1, 800, 1)
# painter.end()
return
self
.
y
()
return
self
.
y
()
class
Ui_MainWindow
(
object
):
class
Ui_MainWindow
(
object
):
...
...
management.py
View file @
60f70e01
...
@@ -9,7 +9,7 @@ import openpyxl
...
@@ -9,7 +9,7 @@ import openpyxl
import
constant
import
constant
from
openpyxl.styles
import
PatternFill
,
Alignment
from
openpyxl.styles
import
PatternFill
,
Alignment
from
utils
import
replace_path_suffix
,
transfer_second_to_time
from
utils
import
replace_path_suffix
,
transfer_second_to_time
,
reverse_time_to_seconds
from
speech_synthesis
import
Speaker
from
speech_synthesis
import
Speaker
class
RunThread
(
threading
.
Thread
):
class
RunThread
(
threading
.
Thread
):
"""复写线程类,用于解决主线程无法捕捉子线程中异常的问题
"""复写线程类,用于解决主线程无法捕捉子线程中异常的问题
...
@@ -125,8 +125,9 @@ class ProjectContext:
...
@@ -125,8 +125,9 @@ class ProjectContext:
self
.
speaker_speed
=
None
self
.
speaker_speed
=
None
self
.
duration
=
0
self
.
duration
=
0
# 一些常量
# 一些常量
self
.
header
=
[
"起始时间"
,
"终止时间"
,
"字幕"
,
'建议'
,
'解说脚本'
,
"语速"
]
self
.
header
=
[
"起始时间"
,
"终止时间"
,
"字幕"
,
'建议旁白字数'
,
'解说脚本'
,
"语速"
]
self
.
write_header
=
[
"起始时间"
,
"起始时间(转换后)"
,
"终止时间"
,
"终止时间(转换后)"
,
"字幕"
,
'建议'
,
'解说脚本'
,
"语速"
]
# self.write_header = ["起始时间", "起始时间(转换后)", "终止时间", "终止时间(转换后)", "字幕", '建议', '解说脚本', "语速"]
self
.
write_header
=
[
"起始时间"
,
"终止时间"
,
"字幕"
,
'建议旁白字数'
,
'解说脚本'
,
"语速"
]
self
.
aside_header
=
[
'起始时间'
,
'推荐字数'
,
'解说脚本'
,
"语速"
,
"预览音频"
]
self
.
aside_header
=
[
'起始时间'
,
'推荐字数'
,
'解说脚本'
,
"语速"
,
"预览音频"
]
self
.
subtitle_header
=
[
"起始时间"
,
"终止时间"
,
"字幕"
]
self
.
subtitle_header
=
[
"起始时间"
,
"终止时间"
,
"字幕"
]
...
@@ -279,8 +280,11 @@ class ProjectContext:
...
@@ -279,8 +280,11 @@ class ProjectContext:
# todo:现在是只用None判断是否是字幕,后续是否也需要用""来?
# todo:现在是只用None判断是否是字幕,后续是否也需要用""来?
for
i
in
range
(
len
(
d
[
"字幕"
])):
for
i
in
range
(
len
(
d
[
"字幕"
])):
st_time_sec
,
ed_time_sec
,
subtitle
,
suggest
,
aside
,
speed
=
[
d
[
x
][
i
]
for
x
in
self
.
header
]
st_time_sec
,
ed_time_sec
,
subtitle
,
suggest
,
aside
,
speed
=
[
d
[
x
][
i
]
for
x
in
self
.
header
]
# 当前条目是字幕
# 当前条目是字幕
if
d
[
"字幕"
][
i
]
!=
None
:
if
d
[
"字幕"
][
i
]
!=
None
:
st_time_sec
=
reverse_time_to_seconds
(
str
(
st_time_sec
))
ed_time_sec
=
reverse_time_to_seconds
(
str
(
ed_time_sec
))
self
.
subtitle_list
.
append
(
Element
(
st_time_sec
,
ed_time_sec
,
subtitle
,
suggest
,
aside
,
speed
))
self
.
subtitle_list
.
append
(
Element
(
st_time_sec
,
ed_time_sec
,
subtitle
,
suggest
,
aside
,
speed
))
self
.
all_elements
.
append
(
self
.
subtitle_list
[
-
1
])
self
.
all_elements
.
append
(
self
.
subtitle_list
[
-
1
])
else
:
else
:
...
@@ -304,7 +308,8 @@ class ProjectContext:
...
@@ -304,7 +308,8 @@ class ProjectContext:
ed_time_sec
=
"
%.2
f"
%
(
float
(
d
[
"起始时间"
][
i
+
1
])
-
0.01
)
ed_time_sec
=
"
%.2
f"
%
(
float
(
d
[
"起始时间"
][
i
+
1
])
-
0.01
)
else
:
else
:
ed_time_sec
=
d
[
"终止时间"
][
i
]
ed_time_sec
=
d
[
"终止时间"
][
i
]
st_time_sec
=
reverse_time_to_seconds
(
str
(
st_time_sec
))
ed_time_sec
=
reverse_time_to_seconds
(
str
(
ed_time_sec
))
self
.
aside_list
.
append
(
Element
(
st_time_sec
,
ed_time_sec
,
subtitle
,
suggest
,
aside
,
speed
))
self
.
aside_list
.
append
(
Element
(
st_time_sec
,
ed_time_sec
,
subtitle
,
suggest
,
aside
,
speed
))
self
.
all_elements
.
append
(
self
.
aside_list
[
-
1
])
self
.
all_elements
.
append
(
self
.
aside_list
[
-
1
])
# print("[load_excel_from_path] ", end='')
# print("[load_excel_from_path] ", end='')
...
@@ -450,17 +455,20 @@ def write_to_sheet(path: str, sheet_name: str, valuelist: list):
...
@@ -450,17 +455,20 @@ def write_to_sheet(path: str, sheet_name: str, valuelist: list):
value
=
value_element
.
to_list
()
value
=
value_element
.
to_list
()
# 把None换成空串
# 把None换成空串
value
=
[
""
if
x
==
None
else
x
for
x
in
value
]
value
=
[
""
if
x
==
None
else
x
for
x
in
value
]
value
.
insert
(
1
,
transfer_second_to_time
(
value
[
0
]))
if
value
[
0
]
!=
""
else
value
.
insert
(
1
,
""
)
# value.insert(1, transfer_second_to_time(value[0])) if value[0] != "" else value.insert(1, "")
value
.
insert
(
3
,
transfer_second_to_time
(
value
[
2
]))
if
value
[
2
]
!=
""
else
value
.
insert
(
3
,
""
)
# value.insert(3, transfer_second_to_time(value[2])) if value[2] != "" else value.insert(3, "")
value
[
0
]
=
transfer_second_to_time
(
value
[
0
])
if
value
[
0
]
!=
""
else
""
value
[
1
]
=
transfer_second_to_time
(
value
[
1
])
if
value
[
1
]
!=
""
else
""
index
=
len
(
value
)
index
=
len
(
value
)
cur_row
=
sheet
.
max_row
cur_row
=
sheet
.
max_row
for
j
in
range
(
0
,
index
):
for
j
in
range
(
0
,
index
):
sheet
.
cell
(
row
=
cur_row
+
1
,
column
=
j
+
1
,
value
=
str
(
value
[
j
]))
cell
=
sheet
.
cell
(
row
=
cur_row
+
1
,
column
=
j
+
1
,
value
=
str
(
value
[
j
]))
if
value
[
j
]
==
''
or
'插入旁白'
in
str
(
value
[
j
]):
if
value
[
j
]
==
''
or
'插入旁白'
in
str
(
value
[
j
]):
sheet
.
cell
(
row
=
cur_row
+
1
,
column
=
j
+
1
)
.
fill
=
PatternFill
(
fill_type
=
'solid'
,
fgColor
=
'ffff00'
)
cell
=
sheet
.
cell
(
row
=
cur_row
+
1
,
column
=
j
+
1
)
.
fill
=
PatternFill
(
fill_type
=
'solid'
,
fgColor
=
'ffff00'
)
if
j
==
4
:
if
j
==
4
:
sheet
.
cell
(
row
=
cur_row
+
1
,
column
=
j
+
1
)
.
alignment
=
Alignment
(
wrapText
=
True
)
cell
=
sheet
.
cell
(
row
=
cur_row
+
1
,
column
=
j
+
1
)
.
alignment
=
Alignment
(
wrapText
=
True
)
cell
.
number_format
=
'@'
workbook
.
save
(
path
)
workbook
.
save
(
path
)
...
...
operation_dialog.py
View file @
60f70e01
...
@@ -260,9 +260,12 @@ class Operation_Dialog(QDialog, Ui_Dialog):
...
@@ -260,9 +260,12 @@ class Operation_Dialog(QDialog, Ui_Dialog):
else
:
# 如果是旁白
else
:
# 如果是旁白
end_time
=
""
end_time
=
""
subtitle
=
""
subtitle
=
""
suggest
=
"插入旁白,推荐字数为"
+
suggest
# suggest = "插入旁白,推荐字数为" + suggest
# if self.comboBox_2.currentText() == "增加一行":
# suggest = "插入旁白,推荐字数为0"
suggest
=
suggest
if
self
.
comboBox_2
.
currentText
()
==
"增加一行"
:
if
self
.
comboBox_2
.
currentText
()
==
"增加一行"
:
suggest
=
"
插入旁白,推荐字数为
0"
suggest
=
"0"
# 别忘复原
# 别忘复原
self
.
buttonBox
.
setEnabled
(
False
)
self
.
buttonBox
.
setEnabled
(
False
)
self
.
zmpb_change_slot
()
self
.
zmpb_change_slot
()
...
...
render.py
View file @
60f70e01
...
@@ -58,15 +58,16 @@ def aggrevate_audios(video_path: str, output_dir: str, state=None,pb_cg_rate = 1
...
@@ -58,15 +58,16 @@ def aggrevate_audios(video_path: str, output_dir: str, state=None,pb_cg_rate = 1
# 将生成的旁白音频放入空白音频中,并将原音频的对应位置音量降低为原来的30%
# 将生成的旁白音频放入空白音频中,并将原音频的对应位置音量降低为原来的30%
files
=
os
.
listdir
(
output_dir
)
files
=
os
.
listdir
(
output_dir
)
audio_path
=
os
.
path
.
join
(
output_dir
,
os
.
path
.
basename
(
video_path
)
.
split
(
'.'
)[
0
]
+
".wav"
)
if
pb_cg_rate
!=
1.00
:
for
i
,
f
in
enumerate
(
files
):
audio_path
=
os
.
path
.
join
(
output_dir
,
os
.
path
.
basename
(
video_path
)
.
split
(
'.'
)[
0
]
+
".wav"
)
fname
=
'.'
.
join
(
f
.
split
(
'.'
)[:
-
1
])
for
i
,
f
in
enumerate
(
files
):
try
:
fname
=
'.'
.
join
(
f
.
split
(
'.'
)[:
-
1
])
if
fname
.
find
(
"."
)
!=
-
1
:
try
:
cg_wav
(
audio_path
,
os
.
path
.
join
(
output_dir
,
f
),
pb_cg_rate
)
if
fname
.
find
(
"."
)
!=
-
1
:
except
Exception
as
e
:
cg_wav
(
audio_path
,
os
.
path
.
join
(
output_dir
,
f
),
pb_cg_rate
)
print
(
e
)
except
Exception
as
e
:
continue
print
(
e
)
continue
for
i
,
f
in
enumerate
(
files
):
for
i
,
f
in
enumerate
(
files
):
fname
=
'.'
.
join
(
f
.
split
(
'.'
)[:
-
1
])
fname
=
'.'
.
join
(
f
.
split
(
'.'
)[:
-
1
])
...
...
speech_synthesis.py
View file @
60f70e01
...
@@ -28,6 +28,7 @@ from azure.cognitiveservices.speech.audio import AudioOutputConfig
...
@@ -28,6 +28,7 @@ from azure.cognitiveservices.speech.audio import AudioOutputConfig
import
openpyxl
import
openpyxl
import
shutil
import
shutil
from
vits_chinese
import
tts
from
vits_chinese
import
tts
from
utils
import
reverse_time_to_seconds
tmp_file
=
'tmp.wav'
tmp_file
=
'tmp.wav'
adjusted_wav_path
=
"adjusted.wav"
adjusted_wav_path
=
"adjusted.wav"
...
@@ -205,7 +206,7 @@ def get_narratage_text(sheet_content: dict) -> Tuple[list, list, list]:
...
@@ -205,7 +206,7 @@ def get_narratage_text(sheet_content: dict) -> Tuple[list, list, list]:
for
i
,
text
in
enumerate
(
narratage
):
for
i
,
text
in
enumerate
(
narratage
):
# 这里的speed是x.x倍速
# 这里的speed是x.x倍速
speed
=
float
(
speeds
[
i
]
.
split
(
'('
)[
0
])
speed
=
float
(
speeds
[
i
]
.
split
(
'('
)[
0
])
if
text
is
not
None
:
if
text
is
not
None
and
text
!=
""
:
if
text
==
'翻译'
:
if
text
==
'翻译'
:
narratage_text
.
append
(
subtitle
[
i
])
narratage_text
.
append
(
subtitle
[
i
])
else
:
else
:
...
@@ -236,8 +237,10 @@ def get_narratage_text(sheet_content: dict) -> Tuple[list, list, list]:
...
@@ -236,8 +237,10 @@ def get_narratage_text(sheet_content: dict) -> Tuple[list, list, list]:
# narratage_start_time.append(cur_start)
# narratage_start_time.append(cur_start)
# narratage_end_time.append(cur_end)
# narratage_end_time.append(cur_end)
# cur_start = cur_start + (len(x) / normal_speed + normal_interval) / speed
# cur_start = cur_start + (len(x) / normal_speed + normal_interval) / speed
narratage_start_time
.
append
(
float
(
start_time
[
i
]))
# narratage_start_time.append(float(start_time[i]))
narratage_end_time
.
append
(
float
(
end_time
[
i
]))
if
end_time
[
i
]
is
not
None
else
narratage_end_time
.
append
(
-
1
)
# narratage_end_time.append(float(end_time[i])) if end_time[i] is not None else narratage_end_time.append(-1)
narratage_start_time
.
append
(
float
(
reverse_time_to_seconds
(
start_time
[
i
])))
narratage_end_time
.
append
(
float
(
reverse_time_to_seconds
(
end_time
[
i
])))
if
end_time
[
i
]
is
not
None
and
end_time
[
i
]
!=
""
else
narratage_end_time
.
append
(
-
1
)
narratage_speed
.
append
(
speed
)
narratage_speed
.
append
(
speed
)
return
narratage_text
,
narratage_start_time
,
narratage_end_time
,
narratage_speed
return
narratage_text
,
narratage_start_time
,
narratage_end_time
,
narratage_speed
...
@@ -251,13 +254,16 @@ def second_to_str(seconds: float) -> str:
...
@@ -251,13 +254,16 @@ def second_to_str(seconds: float) -> str:
Returns:
Returns:
str: “时:分:秒”格式的时间字符串
str: “时:分:秒”格式的时间字符串
"""
"""
seconds
=
float
(
seconds
)
try
:
hour
=
int
(
seconds
/
3600
)
seconds
=
float
(
seconds
)
minute
=
int
((
seconds
-
hour
*
3600
)
/
60
)
hour
=
int
(
seconds
/
3600
)
second
=
int
(
seconds
-
hour
*
3600
-
minute
*
60
)
minute
=
int
((
seconds
-
hour
*
3600
)
/
60
)
ms
=
int
((
seconds
-
second
-
minute
*
60
-
hour
*
3600
)
*
1000
)
second
=
int
(
seconds
-
hour
*
3600
-
minute
*
60
)
time_str
=
"
%02
d:
%02
d:
%02
d,
%03
d"
%
(
hour
,
minute
,
second
,
ms
)
ms
=
int
((
seconds
-
second
-
minute
*
60
-
hour
*
3600
)
*
1000
)
return
time_str
time_str
=
"
%02
d:
%02
d:
%02
d,
%03
d"
%
(
hour
,
minute
,
second
,
ms
)
return
time_str
except
:
return
str
(
seconds
)
def
export_caption
(
sheet_content
:
dict
,
caption_file
:
str
):
def
export_caption
(
sheet_content
:
dict
,
caption_file
:
str
):
...
...
start.spec
View file @
60f70e01
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
block_cipher
=
None
block_cipher
=
None
env_dir
=
'C:/Users/AIA/.conda/envs/testmovie/Lib/site-packages/'
env_dir
=
'C:/Users/AIA/.conda/envs/testmovie/Lib/site-packages/'
missingPkgs
=
[
'Microsoft.CognitiveServices.Speech.core.dll'
,
'decorator.py'
,
'google'
,
'paddleocr'
,
'PIL'
,
'requests'
,
'urllib3'
,
'http'
,
'idna'
,
'certifi'
,
'setuptools'
,
'astor'
,
'charset_normalizer'
]
missingPkgs
=
[
'Microsoft.CognitiveServices.Speech.core.dll'
,
'decorator.py'
,
'google'
,
'paddle
'
,
'paddle
ocr'
,
'PIL'
,
'requests'
,
'urllib3'
,
'http'
,
'idna'
,
'certifi'
,
'setuptools'
,
'astor'
,
'charset_normalizer'
]
def
add_missing_packages
(
lst
):
def
add_missing_packages
(
lst
):
pkgs
=
[]
pkgs
=
[]
...
@@ -20,12 +20,12 @@ a = Analysis(
...
@@ -20,12 +20,12 @@ a = Analysis(
[
'start.py'
],
[
'start.py'
],
pathex
=
[],
pathex
=
[],
binaries
=
[],
binaries
=
[],
datas
=
[(
'vits_chinese'
,
'vits_chinese'
)]
+
[(
'res'
,
'res'
)]
+
pkgPaths
,
datas
=
[(
'vits_chinese'
,
'vits_chinese'
)]
+
[(
'res'
,
'res'
)
,(
'./deploy.bat'
,
'.'
),(
'LAVFilters64'
,
'LAVFilters64'
),(
'LAVFilters32'
,
'LAVFilters32'
)
]
+
pkgPaths
,
hiddenimports
=
[],
hiddenimports
=
[
'filecmp'
],
hookspath
=
[],
hookspath
=
[],
hooksconfig
=
{},
hooksconfig
=
{},
runtime_hooks
=
[],
runtime_hooks
=
[],
excludes
=
[
'vits_chinese'
,
'transformers'
,
'torch'
],
excludes
=
[],
win_no_prefer_redirects
=
False
,
win_no_prefer_redirects
=
False
,
win_private_assemblies
=
False
,
win_private_assemblies
=
False
,
cipher
=
block_cipher
,
cipher
=
block_cipher
,
...
@@ -59,5 +59,5 @@ coll = COLLECT(
...
@@ -59,5 +59,5 @@ coll = COLLECT(
strip
=
False
,
strip
=
False
,
upx
=
True
,
upx
=
True
,
upx_exclude
=
[],
upx_exclude
=
[],
name
=
'
start
'
,
name
=
'
无障碍电影制作系统
'
,
)
)
utils.py
View file @
60f70e01
...
@@ -64,13 +64,52 @@ def transfer_second_to_time(sec: str) -> str:
...
@@ -64,13 +64,52 @@ def transfer_second_to_time(sec: str) -> str:
Returns:
Returns:
str: "hh:mm:ss.xxx"格式的时间字符串
str: "hh:mm:ss.xxx"格式的时间字符串
"""
"""
duration
=
int
(
float
(
sec
))
try
:
hour
=
int
(
duration
/
3600
)
duration
=
int
(
float
(
sec
))
minutes
=
int
((
duration
%
3600
)
/
60
)
hour
=
int
(
duration
/
3600
)
seconds
=
int
(
duration
%
60
)
minutes
=
int
((
duration
%
3600
)
/
60
)
msec
=
round
((
float
(
sec
)
-
hour
*
3600
-
minutes
*
60
-
seconds
)
*
1000
)
seconds
=
int
(
duration
%
60
)
time
=
"
%02
d:
%02
d:
%02
d.
%03
d"
%
(
hour
,
minutes
,
seconds
,
msec
)
msec
=
round
((
float
(
sec
)
-
hour
*
3600
-
minutes
*
60
-
seconds
)
*
1000
)
return
time
time
=
"
%02
d:
%02
d:
%02
d.
%03
d"
%
(
hour
,
minutes
,
seconds
,
msec
)
return
time
except
Exception
as
e
:
print
(
e
)
return
sec
def
reverse_time_to_seconds
(
time_str
:
str
)
->
str
:
"""将"hh:mm:ss.xxx"格式的时间字符串转换为秒数
Args:
time_str (str): 时间字符串,格式为"hh:mm:ss.xxx"
Returns:
float: 对应的秒数
"""
try
:
# print(">>>>>>>>>>reverse time")
# print(time_str)
if
time_str
is
None
or
time_str
==
""
:
return
time_str
parts
=
time_str
.
split
(
":"
)
if
len
(
parts
)
!=
3
:
return
time_str
hour
=
int
(
parts
[
0
])
minutes
=
int
(
parts
[
1
])
seconds_parts
=
parts
[
2
]
.
split
(
"."
)
if
len
(
seconds_parts
)
!=
2
:
return
time_str
seconds
=
int
(
seconds_parts
[
0
])
milliseconds
=
int
(
seconds_parts
[
1
])
total_seconds
=
hour
*
3600
+
minutes
*
60
+
seconds
+
milliseconds
/
1000
print
(
str
(
total_seconds
))
return
str
(
total_seconds
)
except
Exception
as
e
:
print
(
">>>>>>>>>>reverse time err"
+
time_str
)
print
(
e
)
return
time_str
def
replace_path_suffix
(
path
:
str
,
new_suffix
:
str
)
->
str
:
def
replace_path_suffix
(
path
:
str
,
new_suffix
:
str
)
->
str
:
"""替换文件路径后缀
"""替换文件路径后缀
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment