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: