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
af1d5209
Commit
af1d5209
authored
Sep 27, 2022
by
xuanweiace
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
upd 仅剩1、边检测边刷新tab,2、字幕和旁白增加增删行,这两个功能
parent
5520eebf
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
176 additions
and
123 deletions
+176
-123
assemble_dialog.ui
assemble_dialog.ui
+14
-8
assemble_dialog_ui.py
assemble_dialog_ui.py
+9
-7
constant.py
constant.py
+4
-1
detect_with_ocr.py
detect_with_ocr.py
+5
-1
main_window.py
main_window.py
+75
-67
main_window.ui
main_window.ui
+30
-11
main_window_ui.py
main_window_ui.py
+28
-26
management.py
management.py
+9
-1
speech_synthesis.py
speech_synthesis.py
+1
-0
synthesis.py
synthesis.py
+1
-1
test37second.xlsx
test37second.xlsx
+0
-0
No files found.
assemble_dialog.ui
View file @
af1d5209
...
...
@@ -6,8 +6,8 @@
<rect>
<x>
0
</x>
<y>
0
</y>
<width>
612
</width>
<height>
404
</height>
<width>
585
</width>
<height>
342
</height>
</rect>
</property>
<property
name=
"windowTitle"
>
...
...
@@ -56,7 +56,7 @@
<rect>
<x>
130
</x>
<y>
40
</y>
<width>
2
1
1
</width>
<width>
2
3
1
</width>
<height>
21
</height>
</rect>
</property>
...
...
@@ -64,7 +64,7 @@
<widget
class=
"QPushButton"
name=
"pushButton"
>
<property
name=
"geometry"
>
<rect>
<x>
3
6
0
</x>
<x>
3
9
0
</x>
<y>
40
</y>
<width>
101
</width>
<height>
31
</height>
...
...
@@ -92,7 +92,7 @@
<rect>
<x>
130
</x>
<y>
90
</y>
<width>
2
1
1
</width>
<width>
2
3
1
</width>
<height>
21
</height>
</rect>
</property>
...
...
@@ -100,7 +100,7 @@
<widget
class=
"QPushButton"
name=
"pushButton_2"
>
<property
name=
"geometry"
>
<rect>
<x>
3
6
0
</x>
<x>
3
9
0
</x>
<y>
90
</y>
<width>
101
</width>
<height>
31
</height>
...
...
@@ -137,21 +137,27 @@
</property>
</widget>
<widget
class=
"QLineEdit"
name=
"lineEdit_3"
>
<property
name=
"enabled"
>
<bool>
false
</bool>
</property>
<property
name=
"geometry"
>
<rect>
<x>
130
</x>
<y>
140
</y>
<width>
2
1
1
</width>
<width>
2
3
1
</width>
<height>
21
</height>
</rect>
</property>
</widget>
<widget
class=
"QLineEdit"
name=
"lineEdit_4"
>
<property
name=
"enabled"
>
<bool>
false
</bool>
</property>
<property
name=
"geometry"
>
<rect>
<x>
130
</x>
<y>
200
</y>
<width>
2
1
1
</width>
<width>
2
3
1
</width>
<height>
21
</height>
</rect>
</property>
...
...
assemble_dialog_ui.py
View file @
af1d5209
...
...
@@ -12,7 +12,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class
Ui_Dialog
(
object
):
def
setupUi
(
self
,
Dialog
):
Dialog
.
setObjectName
(
"Dialog"
)
Dialog
.
resize
(
612
,
404
)
Dialog
.
resize
(
585
,
342
)
self
.
buttonBox
=
QtWidgets
.
QDialogButtonBox
(
Dialog
)
self
.
buttonBox
.
setGeometry
(
QtCore
.
QRect
(
230
,
340
,
341
,
32
))
self
.
buttonBox
.
setToolTip
(
""
)
...
...
@@ -25,19 +25,19 @@ class Ui_Dialog(object):
self
.
label
.
setGeometry
(
QtCore
.
QRect
(
40
,
40
,
72
,
15
))
self
.
label
.
setObjectName
(
"label"
)
self
.
lineEdit
=
QtWidgets
.
QLineEdit
(
Dialog
)
self
.
lineEdit
.
setGeometry
(
QtCore
.
QRect
(
130
,
40
,
2
1
1
,
21
))
self
.
lineEdit
.
setGeometry
(
QtCore
.
QRect
(
130
,
40
,
2
3
1
,
21
))
self
.
lineEdit
.
setObjectName
(
"lineEdit"
)
self
.
pushButton
=
QtWidgets
.
QPushButton
(
Dialog
)
self
.
pushButton
.
setGeometry
(
QtCore
.
QRect
(
3
6
0
,
40
,
101
,
31
))
self
.
pushButton
.
setGeometry
(
QtCore
.
QRect
(
3
9
0
,
40
,
101
,
31
))
self
.
pushButton
.
setObjectName
(
"pushButton"
)
self
.
label_2
=
QtWidgets
.
QLabel
(
Dialog
)
self
.
label_2
.
setGeometry
(
QtCore
.
QRect
(
20
,
90
,
111
,
16
))
self
.
label_2
.
setObjectName
(
"label_2"
)
self
.
lineEdit_2
=
QtWidgets
.
QLineEdit
(
Dialog
)
self
.
lineEdit_2
.
setGeometry
(
QtCore
.
QRect
(
130
,
90
,
2
1
1
,
21
))
self
.
lineEdit_2
.
setGeometry
(
QtCore
.
QRect
(
130
,
90
,
2
3
1
,
21
))
self
.
lineEdit_2
.
setObjectName
(
"lineEdit_2"
)
self
.
pushButton_2
=
QtWidgets
.
QPushButton
(
Dialog
)
self
.
pushButton_2
.
setGeometry
(
QtCore
.
QRect
(
3
6
0
,
90
,
101
,
31
))
self
.
pushButton_2
.
setGeometry
(
QtCore
.
QRect
(
3
9
0
,
90
,
101
,
31
))
self
.
pushButton_2
.
setObjectName
(
"pushButton_2"
)
self
.
label_3
=
QtWidgets
.
QLabel
(
Dialog
)
self
.
label_3
.
setGeometry
(
QtCore
.
QRect
(
30
,
140
,
111
,
16
))
...
...
@@ -46,10 +46,12 @@ class Ui_Dialog(object):
self
.
label_4
.
setGeometry
(
QtCore
.
QRect
(
30
,
200
,
111
,
16
))
self
.
label_4
.
setObjectName
(
"label_4"
)
self
.
lineEdit_3
=
QtWidgets
.
QLineEdit
(
Dialog
)
self
.
lineEdit_3
.
setGeometry
(
QtCore
.
QRect
(
130
,
140
,
211
,
21
))
self
.
lineEdit_3
.
setEnabled
(
False
)
self
.
lineEdit_3
.
setGeometry
(
QtCore
.
QRect
(
130
,
140
,
231
,
21
))
self
.
lineEdit_3
.
setObjectName
(
"lineEdit_3"
)
self
.
lineEdit_4
=
QtWidgets
.
QLineEdit
(
Dialog
)
self
.
lineEdit_4
.
setGeometry
(
QtCore
.
QRect
(
130
,
200
,
211
,
21
))
self
.
lineEdit_4
.
setEnabled
(
False
)
self
.
lineEdit_4
.
setGeometry
(
QtCore
.
QRect
(
130
,
200
,
231
,
21
))
self
.
lineEdit_4
.
setObjectName
(
"lineEdit_4"
)
self
.
retranslateUi
(
Dialog
)
...
...
constant.py
View file @
af1d5209
...
...
@@ -7,9 +7,12 @@ class Content:
class
Aside
:
StartTimeColumn
=
0
AsideColumnNumber
=
4
AsideColumnNumber
=
3
ObjectName
=
"pb_tableWidget"
class
Subtitle
:
ObjectName
=
"zm_tableWidget"
import
os
dir_path
=
os
.
path
.
dirname
(
os
.
path
.
abspath
(
__file__
))
class
Pathes
:
...
...
detect_with_ocr.py
View file @
af1d5209
...
...
@@ -9,6 +9,8 @@
.. code-block:: python
from detect_with_ocr import detect_with_ocr
detect_with_ocr(video_path, book_path, start_time, end_time, state)
"""
...
...
@@ -17,6 +19,8 @@ import os
import
cv2
import
numpy
as
np
from
paddleocr
import
PaddleOCR
import
sys
print
(
"PaddleOCR load path:"
,
os
.
path
.
abspath
(
sys
.
modules
[
PaddleOCR
.
__module__
]
.
__file__
))
import
difflib
import
re
...
...
@@ -317,7 +321,7 @@ def detect_with_ocr(video_path: str, book_path: str, start_time: float, end_time
global
up_b
,
down_b
# print("get the bounding of the narratage at time: ", datetime.datetime.now())
# 此处start_time + 300是为了节省用户调整视频开始时间的功夫(强行跳过前5分钟)
up_b
,
down_b
=
get_position
(
video_path
,
start_time
)
up_b
,
down_b
=
get_position
(
video_path
,
start_time
+
300
)
# 获取并构建输出信息
table_head
=
[[
"起始时间"
,
"终止时间"
,
"字幕"
,
'建议'
,
'解说脚本'
]]
...
...
main_window.py
View file @
af1d5209
...
...
@@ -56,14 +56,14 @@ class MainWindow(QMainWindow, Ui_MainWindow):
"""
状态栏相关空间
"""
self
.
statusbarButton
=
QtWidgets
.
QPushButton
(
self
)
# 设置按钮对象名称(不是按钮显示内容)
self
.
statusbarButton
.
setObjectName
(
"pred"
)
# 设置按钮位置
self
.
statusbarButton
.
setGeometry
(
QRect
(
10
,
300
,
93
,
28
))
# 设置按钮显示内容
self
.
statusbarButton
.
setText
(
"敬请期待"
)
self
.
statusbarButton
.
setEnabled
(
False
)
#
self.statusbarButton = QtWidgets.QPushButton(self)
#
#
设置按钮对象名称(不是按钮显示内容)
#
self.statusbarButton.setObjectName("pred")
#
#
设置按钮位置
#
self.statusbarButton.setGeometry(QRect(10, 300, 93, 28))
#
#
设置按钮显示内容
#
self.statusbarButton.setText("敬请期待")
#
self.statusbarButton.setEnabled(False)
self
.
statusbarLabel
=
QLabel
()
...
...
@@ -93,7 +93,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self
.
action_view_history
.
triggered
.
connect
(
self
.
view_history_slot
)
# 状态栏的动作
self
.
statusbar
.
addPermanentWidget
(
self
.
statusbarButton
,
stretch
=
0
)
#
self.statusbar.addPermanentWidget(self.statusbarButton, stretch=0)
self
.
statusbar
.
addPermanentWidget
(
self
.
statusbarLabel
,
stretch
=
2
)
self
.
statusbar
.
addPermanentWidget
(
self
.
progressBar
,
stretch
=
10
)
#视频时长,全局变量
...
...
@@ -104,6 +104,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self
.
videoFullScreenWidget
=
myVideoWidget
()
# 创建一个全屏的widget
self
.
player
=
QMediaPlayer
()
self
.
player
.
setVideoOutput
(
self
.
wgt_video
)
# 视频播放输出的widget,就是上面定义的
self
.
player
.
durationChanged
.
connect
(
self
.
player_change_slot
)
self
.
btn_open
.
clicked
.
connect
(
self
.
open_excel
)
# 打开视频文件按钮
self
.
btn_play
.
clicked
.
connect
(
self
.
playVideo
)
# play
self
.
btn_stop
.
clicked
.
connect
(
self
.
pauseVideo
)
# pause
...
...
@@ -116,6 +117,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self
.
sld_video
.
sliderMoved
.
connect
(
self
.
moveSlider
)
# 进度条拖拽跳转
self
.
sld_video
.
ClickedValue
.
connect
(
self
.
clickedSlider
)
# 进度条点击跳转
self
.
sld_audio
.
valueChanged
.
connect
(
self
.
volumeChange
)
# 控制声音播放
self
.
kd_slider
.
valueChanged
.
connect
(
self
.
scale_change_slot
)
# 表格双击和发生change时的处理
self
.
zm_tableWidget
.
setEditTriggers
(
QAbstractItemView
.
NoEditTriggers
)
...
...
@@ -234,20 +236,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self
.
show_warning_msg_box
(
"您想要检测的片段太短,请重新输入开始时间和结束时间!"
)
return
#todo:交互升级
# # 开始检测后,将“开始检测”按钮设置为不可点击状态,“停止检测”按钮设置为可点击状态
# startDetection.config(state=tk.DISABLED)
# stopDetection.config(state=tk.ACTIVE)
#
# processState.set("正在启动中……")
# # print("start at: ", datetime.datetime.now())
# from narratage_detection import detect
# # 显示进度条及开始检测
# progressbar_1.grid(column=2, row=1, sticky="W")
# progress_1.grid(column=3, row=1, sticky="W")
# processState.set("检测中……")
# 多线程同步进行检测和进度条更新
state
=
[
None
]
...
...
@@ -277,28 +265,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self
.
statusbarLabel
.
setText
(
" 准备检测:"
)
self
.
detect_timer
.
start
(
5000
)
# 线程完成任务后结束线程,一旦有一个线程结束就判断是否是意外中断
# while 1:
# alive = True
# for t in threads:
# alive = alive and t.is_alive()
# if not alive:
# break
# time.sleep(5)
#
# print("===已有线程结束了 in detect ===")
# for t in self.threads:
# if t.exitcode != 0:
# print("Exception in", t.getName())
# self.show_warning_msg_box("运行出错,请联系开发者处理")
# # processState.set("任务中断")
# # progress_state = progressbar_1['value']
# # progressbar_1.stop()
# # progressbar_1['value'] = progress_state
# # stopDetection.config(state=tk.DISABLED)
# # startDetection.config(state=tk.ACTIVE)
# return
def
check_if_detect_over_slot
(
self
):
self
.
check_if_over
(
"检测"
)
...
...
@@ -320,7 +286,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self
.
detect_timer
.
stop
()
print
(
"===已有线程结束了 in
%
s ==="
%
(
type
))
self
.
statusbarLabel
.
setText
(
"
%
s完成"
%
(
type
))
self
.
progressBar
.
setValue
(
0
)
self
.
progressBar
.
setValue
(
10
0
)
for
t
in
self
.
threads
:
if
t
.
exitcode
!=
0
:
print
(
"Exception in"
,
t
.
getName
())
...
...
@@ -333,6 +299,32 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self
.
threads
=
self
.
synthesis
.
threads
self
.
synthesis_timer
.
start
(
5000
)
"""
刻度相关
"""
def
scale_change_slot
(
self
,
position
):
if
self
.
player
.
duration
()
==
0
:
return
area_width
=
self
.
scrollArea
.
width
()
max_sld_video_size
=
10
*
(
self
.
player
.
duration
()
/
1000
)
#10*视频秒数
min_sld_video_size
=
area_width
magnification
=
round
(
position
/
self
.
kd_slider
.
maximum
()
*
100
)
# [1,100]
now_sld_video_size
=
min_sld_video_size
+
((
magnification
-
1
)
*
(
max_sld_video_size
-
min_sld_video_size
)
/
99
)
# float
if
min_sld_video_size
>
max_sld_video_size
:
now_sld_video_size
=
min_sld_video_size
-
10
print
(
"before===="
)
print
(
"self.sld_video"
,
self
.
sld_video
.
size
())
print
(
"self.scrollAreaWidgetContents"
,
self
.
scrollAreaWidgetContents
.
size
())
self
.
sld_video
.
resize
(
int
(
now_sld_video_size
+
10
),
self
.
sld_video
.
height
())
self
.
scrollAreaWidgetContents
.
resize
(
int
(
now_sld_video_size
+
20
),
self
.
scrollAreaWidgetContents
.
height
())
print
(
"after===="
)
print
(
"self.sld_video"
,
self
.
sld_video
.
size
())
print
(
"self.scrollAreaWidgetContents"
,
self
.
scrollAreaWidgetContents
.
size
())
print
(
"min_sld_video_size"
,
min_sld_video_size
,
"magnification"
,
magnification
,
"max_sld_video_size"
,
max_sld_video_size
)
print
(
"now_sld_video_size"
,
now_sld_video_size
)
print
(
"计算"
,
((
magnification
-
1
)
*
(
max_sld_video_size
-
min_sld_video_size
)
/
99
))
"""
video相关
...
...
@@ -344,27 +336,24 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self
.
player
.
setVolume
(
volume
)
self
.
lab_audio
.
setText
(
"volume:"
+
str
(
volume
)
+
"
%
"
)
# postion 取值[0,
100
]
# postion 取值[0,
self.sld_video.maximum()
]
def
clickedSlider
(
self
,
position
):
if
self
.
player
.
duration
()
>
0
:
# 开始播放后才允许进行跳转
self
.
init_previewed_audio
()
video_position
=
int
((
position
/
100
)
*
self
.
player
.
duration
())
video_position
=
int
((
position
/
self
.
sld_video
.
maximum
()
)
*
self
.
player
.
duration
())
self
.
player
.
setPosition
(
video_position
)
# print("pos:", position, "总时长:", self.player.duration())
# self.lab_video.setText("%.2f%%" % position)
self
.
lab_video
.
setText
(
utils
.
transfer_second_to_time
(
str
(
video_position
)))
self
.
lab_video
.
setText
(
utils
.
transfer_second_to_time
(
str
(
video_position
/
1000
)))
else
:
self
.
sld_video
.
setValue
(
0
)
# position 取值[0,
100
]
# position 取值[0,
self.sld_video.maximum()
]
def
moveSlider
(
self
,
position
):
self
.
sld_video_pressed
=
True
if
self
.
player
.
duration
()
>
0
:
# 开始播放后才允许进行跳转
self
.
init_previewed_audio
()
video_position
=
int
((
position
/
100
)
*
self
.
player
.
duration
())
video_position
=
int
((
position
/
self
.
sld_video
.
maximum
()
)
*
self
.
player
.
duration
())
self
.
player
.
setPosition
(
video_position
)
# self.lab_video.setText("%.2f%%" % position)
self
.
lab_video
.
setText
(
utils
.
transfer_second_to_time
(
str
(
video_position
)))
self
.
lab_video
.
setText
(
utils
.
transfer_second_to_time
(
str
(
video_position
/
1000
)))
def
pressSlider
(
self
):
self
.
sld_video_pressed
=
True
...
...
@@ -376,7 +365,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
def
changeSlide
(
self
,
position
):
if
not
self
.
sld_video_pressed
:
# 进度条被鼠标点击时不更新
self
.
vidoeLength
=
self
.
player
.
duration
()
+
0.1
self
.
sld_video
.
setValue
(
round
((
position
/
self
.
vidoeLength
)
*
100
))
self
.
sld_video
.
setValue
(
round
((
position
/
self
.
vidoeLength
)
*
self
.
sld_video
.
maximum
()
))
self
.
lab_video
.
setText
(
utils
.
transfer_second_to_time
(
str
(
position
/
1000
)))
# 播放音频
...
...
@@ -387,7 +376,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
audio_path
=
None
for
i
in
range
(
len
(
self
.
projectContext
.
aside_list
)
-
1
,
-
1
,
-
1
):
if
position
/
1000
>
float
(
self
.
projectContext
.
aside_list
[
i
]
.
st_time_sec
):
audio_path
=
os
.
path
.
dirname
(
self
.
projectContext
.
excel_path
)
+
(
"/
%.2
f.wav"
%
float
(
self
.
projectContext
.
aside_list
[
i
]
.
st_time_sec
))
audio_path
=
os
.
path
.
dirname
(
self
.
projectContext
.
excel_path
)
+
(
"/
tmp/
%.2
f.wav"
%
float
(
self
.
projectContext
.
aside_list
[
i
]
.
st_time_sec
))
break
# 2、如果找到了该音频并且该次预览中没有播放过,则新起一个线程播放
if
audio_path
!=
None
and
os
.
path
.
basename
(
audio_path
)
not
in
self
.
previewed_audio
:
...
...
@@ -412,14 +401,15 @@ class MainWindow(QMainWindow, Ui_MainWindow):
path
=
QFileDialog
.
getOpenFileUrl
()[
0
]
self
.
player
.
setMedia
(
QMediaContent
(
path
))
# 选取视频文件
self
.
player
.
play
()
# 播放视频
print
(
"availableMetaData:"
,
self
.
player
.
availableMetaData
())
print
(
"[openVideoFile] self.player.duration"
,
self
.
player
.
duration
())
return
path
# 在初始化工程时
def
init_ProjectContext_VideoPath
(
self
,
path
):
# video_dir = os.path.dirname(path)
# video_name = os.path.basename(path)
# self.projectContext.Init(video_dir, video_name)
# video_name = os.path.basenampath) # self.projectContext.Init(video_dir, video_name)
self
.
projectContext
.
setVideoPath
(
path
)
def
init_previewed_audio
(
self
):
...
...
@@ -472,17 +462,19 @@ class MainWindow(QMainWindow, Ui_MainWindow):
all_elements
=
self
.
projectContext
.
all_elements
contentHeader
=
self
.
projectContext
.
contentHeader
aside_header
=
self
.
projectContext
.
aside_header
subtitle_header
=
self
.
projectContext
.
subtitle_header
self
.
zm_tableWidget
.
clear
()
self
.
pb_tableWidget
.
clear
()
self
.
zm_tableWidget
.
setRowCount
(
len
(
subtitle_list
))
self
.
zm_tableWidget
.
setColumnCount
(
len
(
header
))
self
.
zm_tableWidget
.
setHorizontalHeaderLabels
(
header
)
self
.
zm_tableWidget
.
setColumnCount
(
len
(
subtitle_
header
))
self
.
zm_tableWidget
.
setHorizontalHeaderLabels
(
subtitle_
header
)
for
i
in
range
(
len
(
subtitle_list
)):
self
.
setElememtToTable
(
self
.
zm_tableWidget
,
subtitle_list
[
i
],
i
)
self
.
pb_tableWidget
.
setRowCount
(
len
(
aside_list
))
self
.
pb_tableWidget
.
setColumnCount
(
len
(
header
))
self
.
pb_tableWidget
.
setHorizontalHeaderLabels
(
header
)
self
.
pb_tableWidget
.
setColumnCount
(
len
(
aside_
header
))
self
.
pb_tableWidget
.
setHorizontalHeaderLabels
(
aside_
header
)
for
i
in
range
(
len
(
aside_list
)):
self
.
setElememtToTable
(
self
.
pb_tableWidget
,
aside_list
[
i
],
i
)
...
...
@@ -500,9 +492,14 @@ class MainWindow(QMainWindow, Ui_MainWindow):
elem_list
=
elem
.
to_list
()
if
table
.
objectName
()
==
constant
.
Content
.
ObjectName
:
elem_list
=
elem
.
to_short_list
()
if
table
.
objectName
()
==
constant
.
Subtitle
.
ObjectName
:
elem_list
=
elem
.
to_subtitle_list
()
if
table
.
objectName
()
==
constant
.
Aside
.
ObjectName
:
elem_list
=
elem
.
to_aside_list
()
for
j
in
range
(
len
(
elem_list
)):
text
=
elem_list
[
j
]
if
type
(
text
)
==
str
and
'推荐'
in
text
:
if
type
(
text
)
==
str
and
'
插入旁白,
推荐'
in
text
:
text
=
text
[
text
.
index
(
'推荐'
):]
item
=
QTableWidgetItem
(
text
)
# 设置为不可编辑
...
...
@@ -578,7 +575,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
from
speech_synthesis
import
speech_synthesis
,
Speaker
,
choose_speaker
audio_dir
=
os
.
path
.
dirname
(
self
.
projectContext
.
excel_path
)
print
(
"self.pb_tableWidget.itemAt(item.row(), 0).text()"
,
self
.
projectContext
.
aside_list
[
item
.
row
()]
.
st_time_sec
)
wav_path
=
audio_dir
+
'/
%.2
f.wav'
%
float
(
self
.
projectContext
.
aside_list
[
item
.
row
()]
.
st_time_sec
)
wav_path
=
audio_dir
+
'/
tmp/
%.2
f.wav'
%
float
(
self
.
projectContext
.
aside_list
[
item
.
row
()]
.
st_time_sec
)
print
(
"wav_path:"
,
wav_path
)
speed_info
=
self
.
projectContext
.
speaker_speed
speaker_info
=
self
.
projectContext
.
speaker_info
...
...
@@ -655,8 +652,11 @@ class MainWindow(QMainWindow, Ui_MainWindow):
if
col
!=
constant
.
Aside
.
AsideColumnNumber
:
return
self
.
projectContext
.
refresh_aside
(
row
,
text
)
# 更新【字幕旁白】这个tab里的字
start_time
=
self
.
pb_tableWidget
.
item
(
int
(
row
),
constant
.
Aside
.
StartTimeColumn
)
.
text
()
idx
=
self
.
projectContext
.
aside2contentId
(
Element
(
str
(
start_time
),
0
,
0
,
0
,
0
))
# self.projectContext.refresh_element(idx, text)
self
.
all_tableWidget
.
setItem
(
int
(
row
),
constant
.
Content
.
ActivateColumn
,
QTableWidgetItem
(
text
))
def
write2ProjectFromContent
(
self
,
item
):
print
(
"write2ProjectFromContent"
)
if
item
is
None
:
...
...
@@ -690,6 +690,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
def
view_history_slot
(
self
):
print
(
"=="
*
10
)
print
(
"self.sld_video.maximumSize"
,
self
.
sld_video
.
maximumSize
(),
"self.sld_video.maximum"
,
self
.
sld_video
.
maximum
())
print
(
"records_pos:"
,
self
.
projectContext
.
records_pos
)
print
(
"history is below:"
)
...
...
@@ -717,3 +718,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
if
utils
.
trans_to_seconds
(
all_elements
[
i
]
.
st_time_sec
)
<=
cur_time
:
self
.
all_tableWidget
.
selectRow
(
i
)
break
def
player_change_slot
(
self
,
new_duration
:
int
):
# 在【打开工程】操作的时候,设置sld_video的最大值为电影秒数。
print
(
"打开工程:self.player.duration()"
,
self
.
player
.
duration
())
print
(
"设置最大值为:"
,
self
.
player
.
duration
()
/
1000
+
1
)
self
.
sld_video
.
setMaximum
(
self
.
player
.
duration
()
/
1000
+
1
)
\ No newline at end of file
main_window.ui
View file @
af1d5209
...
...
@@ -353,9 +353,33 @@ QPushButton:pressed {
</widget>
</item>
<item>
<layout
class=
"QHBoxLayout"
name=
"zm_slider_layout"
stretch=
"1
0
,1"
>
<layout
class=
"QHBoxLayout"
name=
"zm_slider_layout"
stretch=
"1
5
,1"
>
<item>
<widget
class=
"QScrollArea"
name=
"scrollArea"
>
<property
name=
"horizontalScrollBarPolicy"
>
<enum>
Qt::ScrollBarAlwaysOn
</enum>
</property>
<property
name=
"widgetResizable"
>
<bool>
false
</bool>
</property>
<widget
class=
"QWidget"
name=
"scrollAreaWidgetContents"
>
<property
name=
"geometry"
>
<rect>
<x>
0
</x>
<y>
0
</y>
<width>
827
</width>
<height>
64
</height>
</rect>
</property>
<widget
class=
"myVideoSlider"
name=
"sld_video"
>
<property
name=
"geometry"
>
<rect>
<x>
10
</x>
<y>
30
</y>
<width>
811
</width>
<height>
20
</height>
</rect>
</property>
<property
name=
"minimumSize"
>
<size>
<width>
410
</width>
...
...
@@ -378,6 +402,8 @@ QPushButton:pressed {
<enum>
QSlider::TicksAbove
</enum>
</property>
</widget>
</widget>
</widget>
</item>
<item>
<widget
class=
"QLabel"
name=
"lab_video"
>
...
...
@@ -388,7 +414,7 @@ QPushButton:pressed {
</size>
</property>
<property
name=
"text"
>
<string>
0
%
</string>
<string>
0
0:00
</string>
</property>
</widget>
</item>
...
...
@@ -421,12 +447,9 @@ QPushButton:pressed {
</widget>
</item>
<item>
<layout
class=
"QHBoxLayout"
name=
"pb_slider_layout"
>
<item>
<widget
class=
"QTimeEdit"
name=
"cur_time_2"
/>
</item>
<layout
class=
"QHBoxLayout"
name=
"kd_slider_layout"
>
<item>
<widget
class=
"QSlider"
name=
"
pb
_slider"
>
<widget
class=
"QSlider"
name=
"
kd
_slider"
>
<property
name=
"enabled"
>
<bool>
true
</bool>
</property>
...
...
@@ -456,9 +479,6 @@ QPushButton:pressed {
</property>
</widget>
</item>
<item>
<widget
class=
"QTimeEdit"
name=
"end_time_2"
/>
</item>
</layout>
</item>
</layout>
...
...
@@ -485,7 +505,6 @@ QPushButton:pressed {
<addaction
name=
"action_open_project"
/>
<addaction
name=
"separator"
/>
<addaction
name=
"import_movie"
/>
<addaction
name=
"actions"
/>
<addaction
name=
"separator"
/>
<addaction
name=
"action_save"
/>
</widget>
...
...
main_window_ui.py
View file @
af1d5209
...
...
@@ -203,19 +203,28 @@ class Ui_MainWindow(object):
self
.
chuizhi
.
addWidget
(
self
.
zm_label
)
self
.
zm_slider_layout
=
QtWidgets
.
QHBoxLayout
()
self
.
zm_slider_layout
.
setObjectName
(
"zm_slider_layout"
)
self
.
sld_video
=
myVideoSlider
(
self
.
verticalWidget_2
)
self
.
scrollArea
=
QtWidgets
.
QScrollArea
(
self
.
verticalWidget_2
)
self
.
scrollArea
.
setHorizontalScrollBarPolicy
(
QtCore
.
Qt
.
ScrollBarAlwaysOn
)
self
.
scrollArea
.
setWidgetResizable
(
False
)
self
.
scrollArea
.
setObjectName
(
"scrollArea"
)
self
.
scrollAreaWidgetContents
=
QtWidgets
.
QWidget
()
self
.
scrollAreaWidgetContents
.
setGeometry
(
QtCore
.
QRect
(
0
,
0
,
827
,
64
))
self
.
scrollAreaWidgetContents
.
setObjectName
(
"scrollAreaWidgetContents"
)
self
.
sld_video
=
myVideoSlider
(
self
.
scrollAreaWidgetContents
)
self
.
sld_video
.
setGeometry
(
QtCore
.
QRect
(
10
,
30
,
811
,
20
))
self
.
sld_video
.
setMinimumSize
(
QtCore
.
QSize
(
410
,
0
))
self
.
sld_video
.
setMaximumSize
(
QtCore
.
QSize
(
16777215
,
20
))
self
.
sld_video
.
setMaximum
(
100
)
self
.
sld_video
.
setOrientation
(
QtCore
.
Qt
.
Horizontal
)
self
.
sld_video
.
setTickPosition
(
QtWidgets
.
QSlider
.
TicksAbove
)
self
.
sld_video
.
setObjectName
(
"sld_video"
)
self
.
zm_slider_layout
.
addWidget
(
self
.
sld_video
)
self
.
scrollArea
.
setWidget
(
self
.
scrollAreaWidgetContents
)
self
.
zm_slider_layout
.
addWidget
(
self
.
scrollArea
)
self
.
lab_video
=
QtWidgets
.
QLabel
(
self
.
verticalWidget_2
)
self
.
lab_video
.
setMaximumSize
(
QtCore
.
QSize
(
16777215
,
50
))
self
.
lab_video
.
setObjectName
(
"lab_video"
)
self
.
zm_slider_layout
.
addWidget
(
self
.
lab_video
)
self
.
zm_slider_layout
.
setStretch
(
0
,
1
0
)
self
.
zm_slider_layout
.
setStretch
(
0
,
1
5
)
self
.
zm_slider_layout
.
setStretch
(
1
,
1
)
self
.
chuizhi
.
addLayout
(
self
.
zm_slider_layout
)
spacerItem
=
QtWidgets
.
QSpacerItem
(
20
,
40
,
QtWidgets
.
QSizePolicy
.
Minimum
,
QtWidgets
.
QSizePolicy
.
Expanding
)
...
...
@@ -228,30 +237,24 @@ class Ui_MainWindow(object):
self
.
pb_label
.
setSizePolicy
(
sizePolicy
)
self
.
pb_label
.
setObjectName
(
"pb_label"
)
self
.
chuizhi
.
addWidget
(
self
.
pb_label
)
self
.
pb_slider_layout
=
QtWidgets
.
QHBoxLayout
()
self
.
pb_slider_layout
.
setObjectName
(
"pb_slider_layout"
)
self
.
cur_time_2
=
QtWidgets
.
QTimeEdit
(
self
.
verticalWidget_2
)
self
.
cur_time_2
.
setObjectName
(
"cur_time_2"
)
self
.
pb_slider_layout
.
addWidget
(
self
.
cur_time_2
)
self
.
pb_slider
=
QtWidgets
.
QSlider
(
self
.
verticalWidget_2
)
self
.
pb_slider
.
setEnabled
(
True
)
self
.
kd_slider_layout
=
QtWidgets
.
QHBoxLayout
()
self
.
kd_slider_layout
.
setObjectName
(
"kd_slider_layout"
)
self
.
kd_slider
=
QtWidgets
.
QSlider
(
self
.
verticalWidget_2
)
self
.
kd_slider
.
setEnabled
(
True
)
sizePolicy
=
QtWidgets
.
QSizePolicy
(
QtWidgets
.
QSizePolicy
.
Expanding
,
QtWidgets
.
QSizePolicy
.
Fixed
)
sizePolicy
.
setHorizontalStretch
(
0
)
sizePolicy
.
setVerticalStretch
(
0
)
sizePolicy
.
setHeightForWidth
(
self
.
pb_slider
.
sizePolicy
()
.
hasHeightForWidth
())
self
.
pb_slider
.
setSizePolicy
(
sizePolicy
)
self
.
pb_slider
.
setCursor
(
QtGui
.
QCursor
(
QtCore
.
Qt
.
SizeHorCursor
))
self
.
pb_slider
.
setMouseTracking
(
False
)
self
.
pb_slider
.
setFocusPolicy
(
QtCore
.
Qt
.
NoFocus
)
self
.
pb_slider
.
setOrientation
(
QtCore
.
Qt
.
Horizontal
)
self
.
pb_slider
.
setTickPosition
(
QtWidgets
.
QSlider
.
TicksAbove
)
self
.
pb_slider
.
setTickInterval
(
1
)
self
.
pb_slider
.
setObjectName
(
"pb_slider"
)
self
.
pb_slider_layout
.
addWidget
(
self
.
pb_slider
)
self
.
end_time_2
=
QtWidgets
.
QTimeEdit
(
self
.
verticalWidget_2
)
self
.
end_time_2
.
setObjectName
(
"end_time_2"
)
self
.
pb_slider_layout
.
addWidget
(
self
.
end_time_2
)
self
.
chuizhi
.
addLayout
(
self
.
pb_slider_layout
)
sizePolicy
.
setHeightForWidth
(
self
.
kd_slider
.
sizePolicy
()
.
hasHeightForWidth
())
self
.
kd_slider
.
setSizePolicy
(
sizePolicy
)
self
.
kd_slider
.
setCursor
(
QtGui
.
QCursor
(
QtCore
.
Qt
.
SizeHorCursor
))
self
.
kd_slider
.
setMouseTracking
(
False
)
self
.
kd_slider
.
setFocusPolicy
(
QtCore
.
Qt
.
NoFocus
)
self
.
kd_slider
.
setOrientation
(
QtCore
.
Qt
.
Horizontal
)
self
.
kd_slider
.
setTickPosition
(
QtWidgets
.
QSlider
.
TicksAbove
)
self
.
kd_slider
.
setTickInterval
(
1
)
self
.
kd_slider
.
setObjectName
(
"kd_slider"
)
self
.
kd_slider_layout
.
addWidget
(
self
.
kd_slider
)
self
.
chuizhi
.
addLayout
(
self
.
kd_slider_layout
)
self
.
verticalLayout
.
addWidget
(
self
.
verticalWidget_2
)
self
.
verticalLayout
.
setStretch
(
0
,
5
)
self
.
verticalLayout
.
setStretch
(
1
,
1
)
...
...
@@ -294,7 +297,6 @@ class Ui_MainWindow(object):
self
.
menu
.
addAction
(
self
.
action_open_project
)
self
.
menu
.
addSeparator
()
self
.
menu
.
addAction
(
self
.
import_movie
)
self
.
menu
.
addAction
(
self
.
actions
)
self
.
menu
.
addSeparator
()
self
.
menu
.
addAction
(
self
.
action_save
)
self
.
menu_2
.
addAction
(
self
.
action_undo
)
...
...
@@ -322,7 +324,7 @@ class Ui_MainWindow(object):
self
.
tabWidget
.
setTabText
(
self
.
tabWidget
.
indexOf
(
self
.
zm_tab
),
_translate
(
"MainWindow"
,
"字幕"
))
self
.
tabWidget
.
setTabText
(
self
.
tabWidget
.
indexOf
(
self
.
pb_tab
),
_translate
(
"MainWindow"
,
"旁白"
))
self
.
zm_label
.
setText
(
_translate
(
"MainWindow"
,
"时间轴"
))
self
.
lab_video
.
setText
(
_translate
(
"MainWindow"
,
"0
%
"
))
self
.
lab_video
.
setText
(
_translate
(
"MainWindow"
,
"0
0:00
"
))
self
.
pb_label
.
setText
(
_translate
(
"MainWindow"
,
"刻度"
))
self
.
menu
.
setTitle
(
_translate
(
"MainWindow"
,
"文件"
))
self
.
menu_2
.
setTitle
(
_translate
(
"MainWindow"
,
"编辑"
))
...
...
management.py
View file @
af1d5209
...
...
@@ -100,12 +100,17 @@ class Element:
return
[
self
.
st_time_sec
,
self
.
ed_time_sec
,
self
.
subtitle
,
self
.
suggest
,
self
.
aside
]
def
to_short_list
(
self
):
return
[
self
.
st_time_sec
,
self
.
subtitle
,
self
.
aside
]
def
to_aside_list
(
self
):
return
[
self
.
st_time_sec
,
self
.
ed_time_sec
,
self
.
suggest
,
self
.
aside
]
def
to_subtitle_list
(
self
):
return
[
self
.
st_time_sec
,
self
.
ed_time_sec
,
self
.
subtitle
]
def
print_self
(
self
):
print
(
"st_time_sec:"
,
self
.
st_time_sec
,
"ed_time_sec:"
,
self
.
ed_time_sec
,
"subtitle:"
,
self
.
subtitle
,
"suggest:"
,
self
.
suggest
,
"aside"
,
self
.
aside
)
def
equalTo
(
self
,
other
)
->
bool
:
return
abs
(
self
.
st_time_sec
-
other
.
st_time_sec
)
<
0.1
return
abs
(
float
(
self
.
st_time_sec
)
-
float
(
other
.
st_time_sec
)
)
<
0.1
class
ProjectContext
:
def
__init__
(
self
):
...
...
@@ -119,6 +124,9 @@ class ProjectContext:
self
.
speaker_speed
=
'1.00(4字/秒)'
# 一些常量
self
.
header
=
[
"起始时间"
,
"终止时间"
,
"字幕"
,
'建议'
,
'解说脚本'
]
self
.
aside_header
=
[
"起始时间"
,
"终止时间"
,
'建议'
,
'解说脚本'
]
self
.
subtitle_header
=
[
"起始时间"
,
"终止时间"
,
"字幕"
]
self
.
contentHeader
=
[
"起始时间"
,
"字幕"
,
"旁白"
]
self
.
excel_sheet_name
=
"旁白插入位置建议"
self
.
history_records
=
[]
...
...
speech_synthesis.py
View file @
af1d5209
...
...
@@ -334,6 +334,7 @@ def ss_and_export(video_path: str, sheet_path: str, output_dir: str, speed: floa
caption_file (str): 输出的字幕文件存放位置
state (optional): 用于与界面中的进度条状态进行通讯. Defaults to None.
"""
print
(
"output_dir:"
,
output_dir
)
if
state
is
None
:
state
=
[
None
]
# 旁白解说表格的位置
...
...
synthesis.py
View file @
af1d5209
...
...
@@ -76,7 +76,7 @@ class SynthesisProcessor(QWidget):
self
.
threads
=
threads
from
speech_synthesis
import
ss_and_export
t
=
RunThread
(
funcName
=
ss_and_export
,
args
=
(
video_path
,
sheet_path
,
audio_dir
,
speed
,
args
=
(
video_path
,
sheet_path
,
audio_dir
+
"output/"
,
speed
,
caption_path
,
speaker_name
,
state
),
name
=
"ssAndExport"
)
t
.
setDaemon
(
True
)
...
...
test37second.xlsx
View file @
af1d5209
No preview for this file type
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