From a3557cbc4f192b520f7fccd849ebf4f70937cfee Mon Sep 17 00:00:00 2001
From: DH4
Date: Sat, 3 Jun 2017 19:10:27 -0500
Subject: UI Updates, encode lockout, added encoder-options.json. FIXME: Add
encoder options to the UI.
---
encoder-options.json | 191 ++++++++++++++++++++++++++++
main.py | 44 +++++++
mainwindow.ui | 350 ++++++++++++++++++++++++++++-----------------------
3 files changed, 427 insertions(+), 158 deletions(-)
create mode 100644 encoder-options.json
diff --git a/encoder-options.json b/encoder-options.json
new file mode 100644
index 0000000..699ead4
--- /dev/null
+++ b/encoder-options.json
@@ -0,0 +1,191 @@
+{
+ "containers":[
+ {
+ "name": "MP4",
+ "container": "mp4",
+ "default-vcodec": "H264",
+ "default-acodec": "AAC",
+ "video-codecs": [
+ {
+ "name": "H264",
+ "encoders": ["libx264"]
+ },
+ {
+ "name": "H264 (nvenc)",
+ "encoders": ["nvenc_264"]
+ },
+ {
+ "name": "MPEG4",
+ "encoders": ["mpeg4"]
+ }
+ ],
+ "audio-codecs": [
+ {
+ "name": "AAC",
+ "encoders": ["libfdk_aac","aac"]
+ },
+ {
+ "name": "AC3",
+ "encoders": ["ac3"]
+ },
+ {
+ "name": "MP3",
+ "encoders": ["libmp3lame"]
+ }
+ ]
+ },
+ {
+ "name": "MOV",
+ "container": "mov",
+ "default-vcodec": "H264",
+ "default-acodec": "AAC",
+ "video-codecs": [
+ {
+ "name": "H264",
+ "encoders": ["libx264"]
+ },
+ {
+ "name": "H264 (nvenc)",
+ "encoders": ["nvenc_264"]
+ },
+ {
+ "name": "MPEG4",
+ "encoders": ["mpeg4"]
+ },
+ {
+ "name": "XVID",
+ "encoders": ["libxvid"]
+ }
+ ],
+ "audio-codecs": [
+ {
+ "name": "AAC",
+ "encoders": ["libfdk_aac","aac"]
+ },
+ {
+ "name": "AC3",
+ "encoders": ["ac3"]
+ },
+ {
+ "name": "MP3",
+ "encoders": ["libmp3lame"]
+ },
+ {
+ "name": "PCM s16 LE",
+ "encoders": ["pcm_s16le"]
+ }
+ ]
+ },
+ {
+ "name": "AVI",
+ "container": "avi",
+ "default-vcodec": "H264",
+ "default-acodec": "AAC",
+ "video-codecs": [
+ {
+ "name": "H264",
+ "encoders": ["libx264"]
+ },
+ {
+ "name": "H264 (nvenc)",
+ "encoders": ["nvenc_264"]
+ },
+ {
+ "name": "MPEG4",
+ "encoders": ["mpeg4"]
+ },
+ {
+ "name": "MPEG2",
+ "encoders": ["mp2video"]
+ },
+ {
+ "name": "DV",
+ "encoders": ["dvvideo"]
+ },
+ {
+ "name": "WMV",
+ "encoders": ["wmv2"]
+ }
+ ],
+ "audio-codecs": [
+ {
+ "name": "AAC",
+ "encoders": ["libfdk_aac","aac"]
+ },
+ {
+ "name": "AC3",
+ "encoders": ["ac3"]
+ },
+ {
+ "name": "WMA",
+ "encoders": ["wmav2"]
+ },
+ {
+ "name": "MP3",
+ "encoders": ["libmp3lame"]
+ },
+ {
+ "name": "PCM s16 LE",
+ "encoders": ["pcm_s16le"]
+ }
+ ]
+ },
+ {
+ "name": "WEBM",
+ "container": "webm",
+ "default-vcodec": "VP9",
+ "default-acodec": "Vorbis",
+ "video-codecs": [
+ {
+ "name": "VP9",
+ "encoders": ["libvpx-vp9"]
+ },
+ {
+ "name": "VP8",
+ "encoders": ["libvpx"]
+ }
+ ],
+ "audio-codecs": [
+ {
+ "name": "Vorbis",
+ "encoders": ["vorbis"]
+ }
+ ]
+ },
+ {
+ "name": "FLV",
+ "container": "flv",
+ "default-vcodec": "FLV",
+ "default-acodec": "Vorbis",
+ "video-codecs": [
+ {
+ "name": "Sorenson (flv)",
+ "encoders": ["flv"]
+ },
+ {
+ "name": "H264",
+ "encoders": ["libx264"]
+ },
+ {
+ "name": "MPEG4",
+ "encoders": ["mpeg4"]
+ }
+ ],
+ "audio-codecs": [
+ {
+ "name": "MP3",
+ "encoders": ["libmp3lame"]
+ },
+ {
+ "name": "Vorbis",
+ "encoders": ["vorbis"]
+ },
+ {
+ "name": "PCM s16 LE",
+ "encoders": ["pcm_s16le"]
+ }
+ ]
+ }
+ ]
+
+}
\ No newline at end of file
diff --git a/main.py b/main.py
index 49fe469..c5080f3 100644
--- a/main.py
+++ b/main.py
@@ -305,9 +305,53 @@ class Main(QtCore.QObject):
if status:
self.window.pushButton_createVideo.setEnabled(False)
self.window.pushButton_Cancel.setEnabled(True)
+ self.window.comboBox_resolution.setEnabled(False)
+ self.window.stackedWidget.setEnabled(False)
+ self.window.tab_encoderSettings.setEnabled(False)
+ self.window.label_audioFile.setEnabled(False)
+ self.window.toolButton_selectAudioFile.setEnabled(False)
+ self.window.label_outputFile.setEnabled(False)
+ self.window.toolButton_selectOutputFile.setEnabled(False)
+ self.window.lineEdit_audioFile.setEnabled(False)
+ self.window.lineEdit_outputFile.setEnabled(False)
+ self.window.pushButton_addComponent.setEnabled(False)
+ self.window.pushButton_removeComponent.setEnabled(False)
+ self.window.pushButton_listMoveDown.setEnabled(False)
+ self.window.pushButton_listMoveUp.setEnabled(False)
+ self.window.comboBox_openPreset.setEnabled(False)
+ self.window.pushButton_removePreset.setEnabled(False)
+ self.window.pushButton_savePreset.setEnabled(False)
+ self.window.pushButton_openProject.setEnabled(False)
+ self.window.listWidget_componentList.setEnabled(False)
+
+ self.window.label_background.setEnabled(False)
+ self.window.lineEdit_background.setEnabled(False)
+ self.window.toolButton_selectBackground.setEnabled(False)
else:
self.window.pushButton_createVideo.setEnabled(True)
self.window.pushButton_Cancel.setEnabled(False)
+ self.window.comboBox_resolution.setEnabled(True)
+ self.window.stackedWidget.setEnabled(True)
+ self.window.tab_encoderSettings.setEnabled(True)
+ self.window.label_audioFile.setEnabled(True)
+ self.window.toolButton_selectAudioFile.setEnabled(True)
+ self.window.lineEdit_audioFile.setEnabled(True)
+ self.window.label_outputFile.setEnabled(True)
+ self.window.toolButton_selectOutputFile.setEnabled(True)
+ self.window.lineEdit_outputFile.setEnabled(True)
+ self.window.pushButton_addComponent.setEnabled(True)
+ self.window.pushButton_removeComponent.setEnabled(True)
+ self.window.pushButton_listMoveDown.setEnabled(True)
+ self.window.pushButton_listMoveUp.setEnabled(True)
+ self.window.comboBox_openPreset.setEnabled(True)
+ self.window.pushButton_removePreset.setEnabled(True)
+ self.window.pushButton_savePreset.setEnabled(True)
+ self.window.pushButton_openProject.setEnabled(True)
+ self.window.listWidget_componentList.setEnabled(True)
+
+ self.window.label_background.setEnabled(True)
+ self.window.lineEdit_background.setEnabled(True)
+ self.window.toolButton_selectBackground.setEnabled(True)
diff --git a/mainwindow.ui b/mainwindow.ui
index 5e10028..f9e8f5e 100644
--- a/mainwindow.ui
+++ b/mainwindow.ui
@@ -325,11 +325,11 @@
0
-
+
- Input Settings
+ Export Video
-
+
10
@@ -348,10 +348,16 @@
- 100
+ 85
0
+
+
+ 80
+ 16777215
+
+
80
@@ -427,7 +433,7 @@
- 100
+ 85
0
@@ -482,9 +488,142 @@
+ -
+
+
-
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 85
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+ Output File
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 28
+
+
+
+
+ 16777215
+ 28
+
+
+
+
+ -
+
+
+
+ 0
+ 28
+
+
+
+
+ 16777215
+ 28
+
+
+
+ ...
+
+
+
+
+
+
+
+ -
+
+
+ 0
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+ 24
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Minimum
+
+
+
+ 10
+ 20
+
+
+
+
+ -
+
+
+ Create Video
+
+
+
+ -
+
+
+ false
+
+
+ Cancel
+
+
+
+
+
+
+
+
-
+
Encoder Settings
@@ -504,17 +643,40 @@
- 98
+ 85
0
- Video Format
+ Container
+
+
+
+ -
+
+
+
+ 150
+ 0
+
-
-
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Minimum
+
+
+
+ 5
+ 5
+
+
+
-
@@ -525,12 +687,25 @@
- Video Preset
+ Resolution
-
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
@@ -546,7 +721,7 @@
- 98
+ 85
0
@@ -590,12 +765,12 @@
- Resolution
+ Video Bitrate
-
-
+
@@ -611,7 +786,7 @@
- 98
+ 85
0
@@ -655,158 +830,17 @@
- Bitrate
+ Audio Bitrate
-
-
+
-
-
- Export Video
-
-
-
- 10
-
- -
-
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 100
- 0
-
-
-
-
- 0
- 0
-
-
-
- Output File
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 28
-
-
-
-
- 16777215
- 28
-
-
-
-
- -
-
-
-
- 0
- 28
-
-
-
-
- 16777215
- 28
-
-
-
- ...
-
-
-
-
-
-
-
- -
-
-
- 0
-
-
-
-
-
-
- 0
- 0
-
-
-
- 24
-
-
-
- -
-
-
- Qt::Horizontal
-
-
- QSizePolicy::Minimum
-
-
-
- 10
- 20
-
-
-
-
- -
-
-
- Create video
-
-
-
- -
-
-
- true
-
-
- Cancel
-
-
-
-
-
-
-
-
-
--
cgit v1.2.3
From e6d119769f825a523bc96c3bfe1c87015be54c9f Mon Sep 17 00:00:00 2001
From: DH4
Date: Sat, 3 Jun 2017 19:29:25 -0500
Subject: Render order reversed to match component list.
---
preview_thread.py | 2 +-
video_thread.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/preview_thread.py b/preview_thread.py
index b20e9a1..63d1ac5 100644
--- a/preview_thread.py
+++ b/preview_thread.py
@@ -56,7 +56,7 @@ class Worker(QtCore.QObject):
frame.paste(im)
components = nextPreviewInformation["components"]
- for component in components:
+ for component in reversed(components):
newFrame = Image.alpha_composite(frame,component.previewRender(self))
frame = Image.alpha_composite(frame,newFrame)
diff --git a/video_thread.py b/video_thread.py
index 0d42406..c97cc24 100644
--- a/video_thread.py
+++ b/video_thread.py
@@ -43,7 +43,7 @@ class Worker(QtCore.QObject):
else:
frame = self.getBackgroundAtIndex(i[1])
- for compNo, comp in enumerate(self.components):
+ for compNo, comp in reversed(list(enumerate(self.components))):
if compNo in self.staticComponents and self.staticComponents[compNo] != None:
frame = Image.alpha_composite(frame, self.staticComponents[compNo])
else:
--
cgit v1.2.3
From 5b78a26d8069e48ad5ba88f457b563620be72173 Mon Sep 17 00:00:00 2001
From: DH4
Date: Sat, 3 Jun 2017 19:54:53 -0500
Subject: Add component inserts on top.
---
main.py | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/main.py b/main.py
index c5080f3..2aa7fa9 100644
--- a/main.py
+++ b/main.py
@@ -186,7 +186,7 @@ class Main(QtCore.QObject):
self.compMenu = QMenu()
for i, comp in enumerate(self.modules):
action = self.compMenu.addAction(comp.Component.__doc__)
- action.triggered[()].connect( lambda item=i: self.addComponent(item))
+ action.triggered[()].connect( lambda item=i: self.insertComponent(item))
self.window.pushButton_addComponent.setMenu(self.compMenu)
window.listWidget_componentList.clicked.connect(lambda _: self.changeComponentWidget())
@@ -400,6 +400,16 @@ class Main(QtCore.QObject):
self.selectedComponents[-1].update()
self.updateOpenPresetComboBox(self.selectedComponents[-1])
+ def insertComponent(self, moduleIndex):
+ self.selectedComponents.insert(0, self.modules[moduleIndex].Component())
+ self.window.listWidget_componentList.insertItem(0, self.selectedComponents[0].__doc__)
+ self.pages.insert(0, self.selectedComponents[0].widget(self))
+ self.window.listWidget_componentList.setCurrentRow(0)
+ self.window.stackedWidget.insertWidget(0, self.pages[0])
+ self.window.stackedWidget.setCurrentIndex(0)
+ self.selectedComponents[0].update()
+ self.updateOpenPresetComboBox(self.selectedComponents[0])
+
def removeComponent(self):
for selected in self.window.listWidget_componentList.selectedItems():
index = self.window.listWidget_componentList.row(selected)
--
cgit v1.2.3