Skip to content

Commit 5ca39bd

Browse files
committed
Change the display (precision) of the progress bar during export
depending on how long the last display ago was done. Also display at least every second. This should help users to recognise that the export is still ongoing when the ecoder is slow and the clip is long. Needs more fine tuning and a method that combines the output that is now done at various locations in the code
1 parent 18e52fc commit 5ca39bd

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

src/windows/export.py

+17-7
Original file line numberDiff line numberDiff line change
@@ -314,10 +314,10 @@ def getProfileName(self, profile_path):
314314
if profile_path == path:
315315
return profile
316316

317-
def updateProgressBar(self, title_message, start_frame, end_frame, current_frame):
317+
def updateProgressBar(self, title_message, start_frame, end_frame, current_frame, progress_format):
318318
"""Update progress bar during exporting"""
319319
if end_frame - start_frame > 0:
320-
percentage_string = "%4.1f%% " % (( current_frame - start_frame ) / ( end_frame - start_frame ) * 100)
320+
percentage_string = progress_format % (( current_frame - start_frame ) / ( end_frame - start_frame ) * 100)
321321
else:
322322
percentage_string = "100%"
323323
self.progressExportVideo.setValue(current_frame)
@@ -905,11 +905,21 @@ def accept(self):
905905
start_time_export = time.time()
906906
start_frame_export = video_settings.get("start_frame")
907907
end_frame_export = video_settings.get("end_frame")
908+
last_exported_time = time.time()
909+
# Precision of the progress bar
910+
progress_format = "%4.1f%% "
908911
# Write each frame in the selected range
909912
for frame in range(video_settings.get("start_frame"), video_settings.get("end_frame") + 1):
910913
# Update progress bar (emit signal to main window)
911-
if (frame % progressstep) == 0:
912-
end_time_export = time.time()
914+
end_time_export = time.time()
915+
if ((frame % progressstep) == 0) or ((end_time_export - last_exported_time) > 1):
916+
if (end_time_export - last_exported_time) > 5:
917+
progress_format = "%4.4f%% "
918+
elif (end_time_export - last_exported_time) > 1:
919+
progress_format = "%4.2f%% "
920+
else:
921+
progress_format = "%4.1f%% "
922+
last_exported_time = time.time()
913923
if ((( frame - start_frame_export ) != 0) & (( end_time_export - start_time_export ) != 0)):
914924
seconds_left = round(( start_time_export - end_time_export )*( frame - end_frame_export )/( frame - start_frame_export ))
915925
fps_encode = ((frame - start_frame_export)/(end_time_export-start_time_export))
@@ -923,7 +933,7 @@ def accept(self):
923933
'fps': fps_encode}
924934

925935
# Emit frame exported
926-
get_app().window.ExportFrame.emit(title_message, video_settings.get("start_frame"), video_settings.get("end_frame"), frame)
936+
get_app().window.ExportFrame.emit(title_message, video_settings.get("start_frame"), video_settings.get("end_frame"), frame, progress_format)
927937

928938
# Process events (to show the progress bar moving)
929939
QCoreApplication.processEvents()
@@ -947,7 +957,7 @@ def accept(self):
947957
'fps': fps_encode}
948958

949959
get_app().window.ExportFrame.emit(title_message, video_settings.get("start_frame"),
950-
video_settings.get("end_frame"), frame)
960+
video_settings.get("end_frame"), frame, progress_format)
951961

952962
except Exception as e:
953963
# TODO: Find a better way to catch the error. This is the only way I have found that
@@ -1019,7 +1029,7 @@ def accept(self):
10191029
'fps': fps_encode}
10201030

10211031
get_app().window.ExportFrame.emit(title_message, video_settings.get("start_frame"),
1022-
video_settings.get("end_frame"), frame)
1032+
video_settings.get("end_frame"), frame, progress_format)
10231033

10241034
# Make progress bar green (to indicate we are done)
10251035
from PyQt5.QtGui import QPalette

src/windows/main_window.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ class MainWindow(QMainWindow, updates.UpdateWatcher):
9595
WaveformReady = pyqtSignal(str, list)
9696
TransformSignal = pyqtSignal(str)
9797
ExportStarted = pyqtSignal(str, int, int)
98-
ExportFrame = pyqtSignal(str, int, int, int)
98+
ExportFrame = pyqtSignal(str, int, int, int,str)
9999
ExportEnded = pyqtSignal(str)
100100
MaxSizeChanged = pyqtSignal(object)
101101
InsertKeyframe = pyqtSignal(object)

0 commit comments

Comments
 (0)