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 = [["起始时间", "终止时间", "字幕", '建议', '解说脚本']]
......
This diff is collapsed.
......@@ -353,30 +353,56 @@ 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="myVideoSlider" name="sld_video">
<property name="minimumSize">
<size>
<width>410</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>20</height>
</size>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
<widget class="QScrollArea" name="scrollArea">
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksAbove</enum>
<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>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>20</height>
</size>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksAbove</enum>
</property>
</widget>
</widget>
</widget>
</item>
<item>
......@@ -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