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
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
171 additions
and
86 deletions
+171
-86
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
+0
-0
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
(
time_stamps
[
i
][
0
]
+
pre_time
)
*
normal_speed
)
print
(
"插入旁白,推荐字数为
%
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),
# text, ''])
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,
os
.
remove
(
book_path
)
book_name_xlsx
=
book_path
sheet_name_xlsx
=
"旁白插入位置建议"
table_head
=
[[
"起始时间"
,
"终止时间"
,
"字幕"
,
'建议'
,
'解说脚本'
]]
table_head
=
[[
"起始时间"
,
"终止时间"
,
"字幕"
,
'建议
旁白字数
'
,
'解说脚本'
]]
create_sheet
(
book_name_xlsx
,
sheet_name_xlsx
,
table_head
)
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
pre_txt
=
None
video
.
set
(
cv2
.
CAP_PROP_POS_FRAMES
,
start
)
# height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT) * 0.6)
print
(
">>>>>>>>>>>>video height"
)
print
(
cv2
.
CAP_PROP_FRAME_HEIGHT
)
print
(
video
.
get
(
cv2
.
CAP_PROP_FRAME_HEIGHT
))
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]:
img
=
img
[
int
(
up_b
-
height
*
0.7
):
int
(
down_b
+
height
*
0.7
)]
# 针对低帧率的视频做图像放大处理
print
(
">>>>>>>>>>>>>>>>>>>>>img shape"
)
print
(
height
)
print
(
up_b
)
print
(
down_b
)
...
...
@@ -315,7 +313,8 @@ def process_video(video_path: str, begin: float, end: float, book_path: str, she
print
(
'--------------------------------------------------'
)
recommend_lens
=
int
((
cur_time
-
end_time
)
*
normal_speed
)
# 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
:
...
...
@@ -333,24 +332,18 @@ def process_video(video_path: str, begin: float, end: float, book_path: str, she
mainWindow
.
projectContext
.
last_time
=
cur_time
subTitle
,
conf
=
detect_subtitle
(
frame
)
print
(
">>>>>>>>>>>>111111111"
)
if
subTitle
is
not
None
:
print
(
">>>>>>>>>>>>111111111 2222222"
)
subTitle
=
normalize
(
subTitle
)
if
len
(
subTitle
)
==
0
:
print
(
">>>>>>>>>>>>111111111 3333333"
)
subTitle
=
None
print
(
">>>>>>>>>>>>222222222"
)
# 第一次找到字幕
if
lastSubTitle
is
None
and
subTitle
is
not
None
:
start_time
=
cur_time
print
(
">>>>>>>>>>>>333333333"
)
# 字幕消失
elif
lastSubTitle
is
not
None
and
subTitle
is
None
:
print
(
">>>>>>>>>>>>4444444444"
)
end_time
=
cur_time
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
:
...
...
@@ -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
(
(
res
[
-
1
][
0
]
-
res
[
-
2
][
1
])
*
normal_speed
)
# 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
)
# 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
,
''
])
elif
lastSubTitle
is
not
None
and
subTitle
is
not
None
:
print
(
">>>>>>>>>>>>5555555555"
)
# 两句话连在一起,但是两句话不一样
if
string_similar
(
lastSubTitle
,
subTitle
)
<
0.7
:
print
(
">>>>>>>>>>>66666666666"
)
if
string_similar
(
lastSubTitle
,
subTitle
)
<
0.6
:
end_time
=
cur_time
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
:
...
...
@@ -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
(
(
res
[
-
1
][
0
]
-
res
[
-
2
][
1
])
*
normal_speed
)
# 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
)
# 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
,
''
])
start_time
=
end_time
else
:
print
(
">>>>>>>>>>>>777777777"
)
lastSubTitle
=
subTitle
if
conf
>
lastConf
else
lastSubTitle
continue
# 当前字幕与上一段字幕不一样
...
...
@@ -411,7 +403,6 @@ def add_to_list(mainWindow: MainWindow, element_type: str, li: list):
# 因为暂时没有用到ed_time_sec,所以直接赋值空吧
ed_time_sec
=
""
print
(
">>>>>>>>>>>>>>>>>append aside"
)
new_element
=
Element
(
st_time_sec
,
ed_time_sec
,
subtitle
,
suggest
,
aside
,
speed
)
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
!=
""
:
...
...
excel_utils.py
View file @
60f70e01
...
...
@@ -4,6 +4,8 @@ import openpyxl
from
management
import
Element
from
utils
import
reverse_time_to_seconds
def
read_xls
(
file_path
):
print
(
"read_xls"
)
elements
=
[]
...
...
@@ -26,20 +28,20 @@ def read_xls(file_path):
cell_value
=
str
(
cell_value
)
if
cell_value
!=
None
else
""
# print(cell_value)
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
:
end_time
=
cell_value
if
cell_value
!=
None
else
""
if
col_index
==
4
:
subtitle
=
cell_value
if
cell_value
!=
None
else
""
if
col_index
==
5
:
if
col_index
==
3
:
if
cell_value
==
None
or
cell_value
==
""
:
break
suggest
=
cell_value
if
cell_value
!=
None
else
""
if
col_index
==
6
:
if
col_index
==
4
:
if
cell_value
==
None
or
cell_value
==
""
:
break
aside
=
cell_value
if
cell_value
!=
None
else
""
if
col_index
==
7
:
if
col_index
==
5
:
speed
=
cell_value
if
cell_value
!=
None
else
""
col_index
=
col_index
+
1
if
suggest
!=
""
and
aside
!=
""
:
...
...
@@ -71,32 +73,36 @@ def read_xlsx(file_path):
cell_value
=
str
(
cell_value
)
if
cell_value
!=
None
else
""
# print(cell_value)
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
:
end_time
=
cell_value
if
cell_value
!=
None
else
""
if
col_index
==
4
:
subtitle
=
cell_value
if
cell_value
!=
None
else
""
if
col_index
==
5
:
if
col_index
==
3
:
if
cell_value
==
None
or
cell_value
==
""
:
break
suggest
=
cell_value
if
cell_value
!=
None
else
""
if
col_index
==
6
:
if
col_index
==
4
:
if
cell_value
==
None
or
cell_value
==
""
:
break
aside
=
cell_value
if
cell_value
!=
None
else
""
if
col_index
==
7
:
if
col_index
==
5
:
speed
=
cell_value
if
cell_value
!=
None
else
""
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.print_self()
new_element
.
print_self
()
elements
.
append
(
new_element
)
checkLength
(
elements
)
# checkLength(elements)
print
(
"element size:"
)
print
(
len
(
elements
))
return
elements
def
checkLength
(
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
(
"旁白字数没有按照推荐要求"
)
# 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):
"-y"
,
# 覆盖输出文件,加上此选项
temp_path
# 输出文件与输入文件相同
]
print
(
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>cg audio"
+
input_file
+
str
(
volume_adjustment
))
subprocess
.
run
(
command
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
)
os
.
remove
(
input_file
)
# os.rename(temp_path, input_file)
...
...
@@ -53,7 +52,6 @@ def adjust_audio_volume(input_file, volume_adjustment):
def
cg_wav
(
first_file_path
,
second_file_path
,
rate
):
try
:
print
(
">>>>>>>>>>>>>>>cg_wav"
)
print
(
first_file_path
,
second_file_path
,
str
(
rate
))
# 计算第一个文件的音量
first_file_volume
=
calculate_audio_volume
(
first_file_path
)
...
...
@@ -78,7 +76,7 @@ def cg_wav(first_file_path, second_file_path, rate):
else
:
print
(
"无法计算第一个文件的音量"
)
except
Exception
as
e
:
print
(
"
>>>>>>>>>>>>>>
cg_wav err"
)
print
(
"cg_wav err"
)
print
(
e
)
...
...
main_window.py
View file @
60f70e01
This diff is collapsed.
Click to expand it.
main_window_ui.py
View file @
60f70e01
...
...
@@ -11,28 +11,60 @@ from PyQt5.QtWidgets import QMainWindow, QFileDialog, QTableWidget, QTableWidget
from
PyQt5.QtCore
import
QUrl
,
Qt
,
QTimer
,
QRect
,
pyqtSignal
,
QPersistentModelIndex
from
PyQt5.QtMultimedia
import
*
from
PyQt5.QtGui
import
QIcon
,
QPainter
,
QColor
,
QPen
import
threading
lock
=
threading
.
Lock
()
class
MyWidget
(
QWidget
):
# def __init__(self, parent=None):
# super(QWidget, self).__init__(parent)
# self.painter_flag = True
def
paintEvent
(
self
,
event
):
print
(
">>>>>>>>>>>>>>>into paint"
)
# print(">>>>>>>>into paint")
# print(self.painter_flag)
# if self.painter_flag:
lock
.
acquire
()
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
.
red
,
2
,
Qt
.
SolidLine
))
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
):
print
(
">>>>>>>>>>>up"
+
str
(
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
()
def
down
(
self
,
mov_len
):
print
(
">>>>>>>>>>>down"
+
str
(
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
()
class
Ui_MainWindow
(
object
):
...
...
management.py
View file @
60f70e01
...
...
@@ -9,7 +9,7 @@ import openpyxl
import
constant
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
class
RunThread
(
threading
.
Thread
):
"""复写线程类,用于解决主线程无法捕捉子线程中异常的问题
...
...
@@ -125,8 +125,9 @@ class ProjectContext:
self
.
speaker_speed
=
None
self
.
duration
=
0
# 一些常量
self
.
header
=
[
"起始时间"
,
"终止时间"
,
"字幕"
,
'建议'
,
'解说脚本'
,
"语速"
]
self
.
write_header
=
[
"起始时间"
,
"起始时间(转换后)"
,
"终止时间"
,
"终止时间(转换后)"
,
"字幕"
,
'建议'
,
'解说脚本'
,
"语速"
]
self
.
header
=
[
"起始时间"
,
"终止时间"
,
"字幕"
,
'建议旁白字数'
,
'解说脚本'
,
"语速"
]
# self.write_header = ["起始时间", "起始时间(转换后)", "终止时间", "终止时间(转换后)", "字幕", '建议', '解说脚本', "语速"]
self
.
write_header
=
[
"起始时间"
,
"终止时间"
,
"字幕"
,
'建议旁白字数'
,
'解说脚本'
,
"语速"
]
self
.
aside_header
=
[
'起始时间'
,
'推荐字数'
,
'解说脚本'
,
"语速"
,
"预览音频"
]
self
.
subtitle_header
=
[
"起始时间"
,
"终止时间"
,
"字幕"
]
...
...
@@ -279,8 +280,11 @@ class ProjectContext:
# todo:现在是只用None判断是否是字幕,后续是否也需要用""来?
for
i
in
range
(
len
(
d
[
"字幕"
])):
st_time_sec
,
ed_time_sec
,
subtitle
,
suggest
,
aside
,
speed
=
[
d
[
x
][
i
]
for
x
in
self
.
header
]
# 当前条目是字幕
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
.
all_elements
.
append
(
self
.
subtitle_list
[
-
1
])
else
:
...
...
@@ -304,7 +308,8 @@ class ProjectContext:
ed_time_sec
=
"
%.2
f"
%
(
float
(
d
[
"起始时间"
][
i
+
1
])
-
0.01
)
else
:
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
.
all_elements
.
append
(
self
.
aside_list
[
-
1
])
# print("[load_excel_from_path] ", end='')
...
...
@@ -450,17 +455,20 @@ def write_to_sheet(path: str, sheet_name: str, valuelist: list):
value
=
value_element
.
to_list
()
# 把None换成空串
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
(
3
,
transfer_second_to_time
(
value
[
2
]))
if
value
[
2
]
!=
""
else
value
.
insert
(
3
,
""
)
# 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
[
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
)
cur_row
=
sheet
.
max_row
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
]):
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
:
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
)
...
...
operation_dialog.py
View file @
60f70e01
...
...
@@ -260,9 +260,12 @@ class Operation_Dialog(QDialog, Ui_Dialog):
else
:
# 如果是旁白
end_time
=
""
subtitle
=
""
suggest
=
"插入旁白,推荐字数为"
+
suggest
# suggest = "插入旁白,推荐字数为" + suggest
# if self.comboBox_2.currentText() == "增加一行":
# suggest = "插入旁白,推荐字数为0"
suggest
=
suggest
if
self
.
comboBox_2
.
currentText
()
==
"增加一行"
:
suggest
=
"
插入旁白,推荐字数为
0"
suggest
=
"0"
# 别忘复原
self
.
buttonBox
.
setEnabled
(
False
)
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
# 将生成的旁白音频放入空白音频中,并将原音频的对应位置音量降低为原来的30%
files
=
os
.
listdir
(
output_dir
)
audio_path
=
os
.
path
.
join
(
output_dir
,
os
.
path
.
basename
(
video_path
)
.
split
(
'.'
)[
0
]
+
".wav"
)
for
i
,
f
in
enumerate
(
files
):
fname
=
'.'
.
join
(
f
.
split
(
'.'
)[:
-
1
])
try
:
if
fname
.
find
(
"."
)
!=
-
1
:
cg_wav
(
audio_path
,
os
.
path
.
join
(
output_dir
,
f
),
pb_cg_rate
)
except
Exception
as
e
:
print
(
e
)
continue
if
pb_cg_rate
!=
1.00
:
audio_path
=
os
.
path
.
join
(
output_dir
,
os
.
path
.
basename
(
video_path
)
.
split
(
'.'
)[
0
]
+
".wav"
)
for
i
,
f
in
enumerate
(
files
):
fname
=
'.'
.
join
(
f
.
split
(
'.'
)[:
-
1
])
try
:
if
fname
.
find
(
"."
)
!=
-
1
:
cg_wav
(
audio_path
,
os
.
path
.
join
(
output_dir
,
f
),
pb_cg_rate
)
except
Exception
as
e
:
print
(
e
)
continue
for
i
,
f
in
enumerate
(
files
):
fname
=
'.'
.
join
(
f
.
split
(
'.'
)[:
-
1
])
...
...
speech_synthesis.py
View file @
60f70e01
...
...
@@ -28,6 +28,7 @@ from azure.cognitiveservices.speech.audio import AudioOutputConfig
import
openpyxl
import
shutil
from
vits_chinese
import
tts
from
utils
import
reverse_time_to_seconds
tmp_file
=
'tmp.wav'
adjusted_wav_path
=
"adjusted.wav"
...
...
@@ -205,7 +206,7 @@ def get_narratage_text(sheet_content: dict) -> Tuple[list, list, list]:
for
i
,
text
in
enumerate
(
narratage
):
# 这里的speed是x.x倍速
speed
=
float
(
speeds
[
i
]
.
split
(
'('
)[
0
])
if
text
is
not
None
:
if
text
is
not
None
and
text
!=
""
:
if
text
==
'翻译'
:
narratage_text
.
append
(
subtitle
[
i
])
else
:
...
...
@@ -236,8 +237,10 @@ def get_narratage_text(sheet_content: dict) -> Tuple[list, list, list]:
# narratage_start_time.append(cur_start)
# narratage_end_time.append(cur_end)
# cur_start = cur_start + (len(x) / normal_speed + normal_interval) / speed
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_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_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
)
return
narratage_text
,
narratage_start_time
,
narratage_end_time
,
narratage_speed
...
...
@@ -251,13 +254,16 @@ def second_to_str(seconds: float) -> str:
Returns:
str: “时:分:秒”格式的时间字符串
"""
seconds
=
float
(
seconds
)
hour
=
int
(
seconds
/
3600
)
minute
=
int
((
seconds
-
hour
*
3600
)
/
60
)
second
=
int
(
seconds
-
hour
*
3600
-
minute
*
60
)
ms
=
int
((
seconds
-
second
-
minute
*
60
-
hour
*
3600
)
*
1000
)
time_str
=
"
%02
d:
%02
d:
%02
d,
%03
d"
%
(
hour
,
minute
,
second
,
ms
)
return
time_str
try
:
seconds
=
float
(
seconds
)
hour
=
int
(
seconds
/
3600
)
minute
=
int
((
seconds
-
hour
*
3600
)
/
60
)
second
=
int
(
seconds
-
hour
*
3600
-
minute
*
60
)
ms
=
int
((
seconds
-
second
-
minute
*
60
-
hour
*
3600
)
*
1000
)
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
):
...
...
start.spec
View file @
60f70e01
...
...
@@ -3,7 +3,7 @@
block_cipher
=
None
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
):
pkgs
=
[]
...
...
@@ -20,12 +20,12 @@ a = Analysis(
[
'start.py'
],
pathex
=
[],
binaries
=
[],
datas
=
[(
'vits_chinese'
,
'vits_chinese'
)]
+
[(
'res'
,
'res'
)]
+
pkgPaths
,
hiddenimports
=
[],
datas
=
[(
'vits_chinese'
,
'vits_chinese'
)]
+
[(
'res'
,
'res'
)
,(
'./deploy.bat'
,
'.'
),(
'LAVFilters64'
,
'LAVFilters64'
),(
'LAVFilters32'
,
'LAVFilters32'
)
]
+
pkgPaths
,
hiddenimports
=
[
'filecmp'
],
hookspath
=
[],
hooksconfig
=
{},
runtime_hooks
=
[],
excludes
=
[
'vits_chinese'
,
'transformers'
,
'torch'
],
excludes
=
[],
win_no_prefer_redirects
=
False
,
win_private_assemblies
=
False
,
cipher
=
block_cipher
,
...
...
@@ -59,5 +59,5 @@ coll = COLLECT(
strip
=
False
,
upx
=
True
,
upx_exclude
=
[],
name
=
'
start
'
,
name
=
'
无障碍电影制作系统
'
,
)
utils.py
View file @
60f70e01
...
...
@@ -64,13 +64,52 @@ def transfer_second_to_time(sec: str) -> str:
Returns:
str: "hh:mm:ss.xxx"格式的时间字符串
"""
duration
=
int
(
float
(
sec
))
hour
=
int
(
duration
/
3600
)
minutes
=
int
((
duration
%
3600
)
/
60
)
seconds
=
int
(
duration
%
60
)
msec
=
round
((
float
(
sec
)
-
hour
*
3600
-
minutes
*
60
-
seconds
)
*
1000
)
time
=
"
%02
d:
%02
d:
%02
d.
%03
d"
%
(
hour
,
minutes
,
seconds
,
msec
)
return
time
try
:
duration
=
int
(
float
(
sec
))
hour
=
int
(
duration
/
3600
)
minutes
=
int
((
duration
%
3600
)
/
60
)
seconds
=
int
(
duration
%
60
)
msec
=
round
((
float
(
sec
)
-
hour
*
3600
-
minutes
*
60
-
seconds
)
*
1000
)
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
:
"""替换文件路径后缀
...
...
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