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..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())
@@ -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)
@@ -356,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)
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,198 +488,6 @@
-
-
-
-
- Encoder Settings
-
-
-
- 10
-
- -
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 98
- 0
-
-
-
- Video Format
-
-
-
- -
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Video Preset
-
-
-
- -
-
-
-
-
- -
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 98
- 0
-
-
-
- Video Codec
-
-
-
- -
-
-
-
- 150
- 0
-
-
-
-
- -
-
-
- Qt::Horizontal
-
-
- QSizePolicy::Fixed
-
-
-
- 5
- 5
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Resolution
-
-
-
- -
-
-
-
-
- -
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 98
- 0
-
-
-
- Audio Codec
-
-
-
- -
-
-
-
- 150
- 0
-
-
-
-
- -
-
-
- Qt::Horizontal
-
-
- QSizePolicy::Fixed
-
-
-
- 5
- 10
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Bitrate
-
-
-
- -
-
-
-
-
-
-
-
-
- Export Video
-
-
-
- 10
-
-
-
@@ -688,7 +502,7 @@
- 100
+ 85
0
@@ -788,14 +602,14 @@
-
- Create video
+ Create Video
-
- true
+ false
Cancel
@@ -806,6 +620,226 @@
+
+
+
+
+
+ Encoder Settings
+
+
+
+ 10
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 85
+ 0
+
+
+
+ Container
+
+
+
+ -
+
+
+
+ 150
+ 0
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Minimum
+
+
+
+ 5
+ 5
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Resolution
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 85
+ 0
+
+
+
+ Video Codec
+
+
+
+ -
+
+
+
+ 150
+ 0
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 5
+ 5
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Video Bitrate
+
+
+
+ -
+
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 85
+ 0
+
+
+
+ Audio Codec
+
+
+
+ -
+
+
+
+ 150
+ 0
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 5
+ 10
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Audio Bitrate
+
+
+
+ -
+
+
+
+
+
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: