Commit af1d5209 authored by xuanweiace's avatar xuanweiace

upd 仅剩1、边检测边刷新tab,2、字幕和旁白增加增删行,这两个功能

parent 5520eebf
......@@ -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>211</width>
<width>231</width>
<height>21</height>
</rect>
</property>
......@@ -64,7 +64,7 @@
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>360</x>
<x>390</x>
<y>40</y>
<width>101</width>
<height>31</height>
......@@ -92,7 +92,7 @@
<rect>
<x>130</x>
<y>90</y>
<width>211</width>
<width>231</width>
<height>21</height>
</rect>
</property>
......@@ -100,7 +100,7 @@
<widget class="QPushButton" name="pushButton_2">
<property name="geometry">
<rect>
<x>360</x>
<x>390</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>211</width>
<width>231</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>211</width>
<width>231</width>
<height>21</height>
</rect>
</property>
......
......@@ -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, 211, 21))
self.lineEdit.setGeometry(QtCore.QRect(130, 40, 231, 21))
self.lineEdit.setObjectName("lineEdit")
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(360, 40, 101, 31))
self.pushButton.setGeometry(QtCore.QRect(390, 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, 211, 21))
self.lineEdit_2.setGeometry(QtCore.QRect(130, 90, 231, 21))
self.lineEdit_2.setObjectName("lineEdit_2")
self.pushButton_2 = QtWidgets.QPushButton(Dialog)
self.pushButton_2.setGeometry(QtCore.QRect(360, 90, 101, 31))
self.pushButton_2.setGeometry(QtCore.QRect(390, 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)
......
......@@ -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:
......
......@@ -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 = [["起始时间", "终止时间", "字幕", '建议', '解说脚本']]
......
......@@ -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(100)
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) + ("/%.2f.wav" % float(self.projectContext.aside_list[i].st_time_sec))
audio_path = os.path.dirname(self.projectContext.excel_path) + ("/tmp/%.2f.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 + '/%.2f.wav' % float(self.projectContext.aside_list[item.row()].st_time_sec)
wav_path = audio_dir + '/tmp/%.2f.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
......@@ -353,9 +353,33 @@ QPushButton:pressed {
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="zm_slider_layout" stretch="10,1">
<layout class="QHBoxLayout" name="zm_slider_layout" stretch="15,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>00: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>
......
......@@ -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, 10)
self.zm_slider_layout.setStretch(0, 15)
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", "00:00"))
self.pb_label.setText(_translate("MainWindow", "刻度"))
self.menu.setTitle(_translate("MainWindow", "文件"))
self.menu_2.setTitle(_translate("MainWindow", "编辑"))
......
......@@ -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 = []
......
......@@ -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]
# 旁白解说表格的位置
......
......@@ -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)
......
No preview for this file type
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment