Skip to content

Commit 86e6f08

Browse files
committed
Fixing lots of regressions with Preview / Split Clip dialog:
- Preview should always start at the beginning - Both split and preview should respect previous split start/end - Both split and preview should display frame # - After typing clip name, Enter key should create clip - After clip is created, frame # should increment by 1
1 parent a9c348c commit 86e6f08

File tree

1 file changed

+39
-18
lines changed

1 file changed

+39
-18
lines changed

src/windows/cutting.py

+39-18
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
from PyQt5.QtCore import pyqtSignal, QTimer
3333
from PyQt5.QtWidgets import QDialog, QMessageBox, QSizePolicy
34+
from PyQt5.QtCore import Qt
3435
import openshot # Python module for libopenshot (required video editing module installed separately)
3536

3637
from classes import info, ui_util, time_parts
@@ -72,11 +73,6 @@ def __init__(self, file=None, preview=False):
7273
# Track metrics
7374
track_metric_screen("cutting-screen")
7475

75-
self.start_frame = 1
76-
self.start_image = None
77-
self.end_frame = 1
78-
self.end_image = None
79-
8076
# Keep track of file object
8177
self.file = file
8278
self.file_path = file.absolute_path()
@@ -90,17 +86,26 @@ def __init__(self, file=None, preview=False):
9086
self.channels = int(file.data['channels'])
9187
self.channel_layout = int(file.data['channel_layout'])
9288

89+
self.start_frame = 1
90+
self.start_image = None
91+
self.end_frame = self.video_length
92+
self.end_image = None
93+
9394
# If preview, hide cutting controls
9495
if preview:
9596
self.lblInstructions.setVisible(False)
9697
self.widgetControls.setVisible(False)
9798
self.setWindowTitle(_("Preview"))
9899

99-
if float(file.data.get("start", 0.0)) > 0.0:
100-
self.start_frame = round(file.data.get("start", 0) * self.fps) + 1
101-
if float(file.data.get("end", 0.0)) > 0.0:
102-
self.end_frame = round(file.data.get("end", 0) * self.fps)
103-
self.video_length = (self.end_frame - self.start_frame) + 1
100+
if float(file.data.get("start", 0.0)) > 0.0:
101+
self.start_frame = round(file.data.get("start", 0) * self.fps) + 1
102+
if float(file.data.get("end", 0.0)) > 0.0:
103+
self.end_frame = round(file.data.get("end", 0) * self.fps)
104+
self.video_length = (self.end_frame - self.start_frame) + 1
105+
106+
# Set clip start / end
107+
clip_start = file.data.get("start", 0.0)
108+
clip_end = file.data.get("end", file.data.get("duration", 0.0))
104109

105110
# Open video file with Reader
106111
log.info(self.file_path)
@@ -128,6 +133,8 @@ def __init__(self, file=None, preview=False):
128133
# Add clip for current preview file
129134
self.clip = openshot.Clip(self.file_path)
130135
self.clip.SetJson(json.dumps({"reader": file.data}))
136+
self.clip.Start(clip_start)
137+
self.clip.End(clip_end)
131138

132139
# Show waveform for audio files
133140
if not self.clip.Reader().info.has_video and self.clip.Reader().info.has_audio:
@@ -139,11 +146,10 @@ def __init__(self, file=None, preview=False):
139146
# Update video_length property of the Timeline object
140147
self.r.info.video_length = self.video_length
141148

142-
if preview:
143-
# Display frame #'s during preview
144-
self.clip.display = openshot.FRAME_DISPLAY_CLIP
145-
149+
# Display frame #
150+
self.clip.display = openshot.FRAME_DISPLAY_CLIP
146151
self.r.AddClip(self.clip)
152+
147153
except Exception:
148154
log.error(
149155
'Failed to load media file into preview player: %s',
@@ -169,8 +175,8 @@ def __init__(self, file=None, preview=False):
169175
self.sliderVideo.setPageStep(24)
170176

171177
# Display start frame (and then the previous frame)
172-
QTimer.singleShot(500, functools.partial(self.sliderVideo.setValue, self.start_frame + 1))
173-
QTimer.singleShot(600, functools.partial(self.sliderVideo.setValue, self.start_frame))
178+
QTimer.singleShot(500, functools.partial(self.sliderVideo.setValue, 2))
179+
QTimer.singleShot(600, functools.partial(self.sliderVideo.setValue, 1))
174180

175181
# Connect signals
176182
self.actionPlay.triggered.connect(self.actionPlay_Triggered)
@@ -180,8 +186,17 @@ def __init__(self, file=None, preview=False):
180186
self.btnEnd.clicked.connect(self.btnEnd_clicked)
181187
self.btnClear.clicked.connect(self.btnClear_clicked)
182188
self.btnAddClip.clicked.connect(self.btnAddClip_clicked)
189+
self.txtName.installEventFilter(self)
183190
self.initialized = True
184191

192+
def eventFilter(self, source, event):
193+
if event.type() == event.KeyPress and source is self.txtName:
194+
if event.key() == Qt.Key_Return or event.key() == Qt.Key_Enter:
195+
if self.btnAddClip.isEnabled():
196+
self.btnAddClip_clicked()
197+
return True
198+
return super().eventFilter(source, event)
199+
185200
def actionPlay_Triggered(self):
186201
# Trigger play button (This action is invoked from the preview thread, so it must exist here)
187202
self.btnPlay.click()
@@ -340,16 +355,22 @@ def btnAddClip_clicked(self):
340355
if 'name' in self.file.data:
341356
self.file.data.pop('name')
342357

358+
# Get initial start / end properties (if any)
359+
previous_start = self.file.data.get("start", 0.0)
360+
343361
# Save new file
344362
self.file.id = None
345363
self.file.key = None
346364
self.file.type = 'insert'
347-
self.file.data['start'] = (self.start_frame - 1) / self.fps
348-
self.file.data['end'] = self.end_frame / self.fps
365+
self.file.data['start'] = previous_start + ((self.start_frame - 1) / self.fps)
366+
self.file.data['end'] = previous_start + (self.end_frame / self.fps)
349367
if self.txtName.text():
350368
self.file.data['name'] = self.txtName.text()
351369
self.file.save()
352370

371+
# Move to next frame
372+
self.sliderVideo.setValue(self.end_frame + 1)
373+
353374
# Reset form
354375
self.clearForm()
355376

0 commit comments

Comments
 (0)