From b74c267cf282210b97db16ab6d4f92fc60baf65e Mon Sep 17 00:00:00 2001 From: Martin Kaistra Date: Mon, 24 Apr 2017 15:53:59 +0200 Subject: [PATCH 1/4] add new experimental command line mode --- main.py | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 67 insertions(+), 7 deletions(-) diff --git a/main.py b/main.py index 121efa0..d338d4f 100644 --- a/main.py +++ b/main.py @@ -9,9 +9,59 @@ from PIL.ImageQt import ImageQt import atexit from queue import Queue from PyQt4.QtCore import QSettings +import signal import preview_thread, core, video_thread +class Command(QtCore.QObject): + + videoTask = QtCore.pyqtSignal(str, str, QFont, int, int, int, int, str, str) + + def __init__(self): + QtCore.QObject.__init__(self) + + import argparse + self.parser = argparse.ArgumentParser(description='Create a visualization for an audio file') + self.parser.add_argument('-i', '--input', dest='input', help='input audio file', required=True) + self.parser.add_argument('-o', '--output', dest='output', help='output video file', required=True) + self.parser.add_argument('-bg', '--background', dest='bg', help='background image file', required=True) + self.parser.add_argument('-t', '--text', dest='text', help='title text', required=True) + self.args = self.parser.parse_args() + + self.settings = QSettings('settings.ini', QSettings.IniFormat) + self.font = QFont(self.settings.value("titleFont")) + self.fontsize = int(self.settings.value("fontSize")) + self.alignment = int(self.settings.value("alignment")) + self.textX = int(self.settings.value("xPosition")) + self.textY = int(self.settings.value("yPosition")) + + ffmpeg_cmd = self.settings.value("ffmpeg_cmd", expanduser("~")) + + self.videoThread = QtCore.QThread(self) + self.videoWorker = video_thread.Worker(self) + + self.videoWorker.moveToThread(self.videoThread) + self.videoWorker.videoCreated.connect(self.videoCreated) + + self.videoThread.start() + self.videoTask.emit(self.args.bg, + self.args.text, + self.font, + self.fontsize, + self.alignment, + self.textX, + self.textY, + self.args.input, + self.args.output) + + def videoCreated(self): + self.videoThread.quit() + self.videoThread.wait() + self.cleanUp() + + def cleanUp(self): + sys.exit(0) + class Main(QtCore.QObject): newTask = QtCore.pyqtSignal(str, str, QFont, int, int, int, int) @@ -106,6 +156,7 @@ class Main(QtCore.QObject): self.settings.setValue("fontSize", str(self.window.fontsizeSpinBox.value())) self.settings.setValue("xPosition", str(self.window.textXSpinBox.value())) self.settings.setValue("yPosition", str(self.window.textYSpinBox.value())) + sys.exit(0) def openInputFileDialog(self): inputDir = self.settings.value("inputDir", expanduser("~")) @@ -183,12 +234,21 @@ class Main(QtCore.QObject): self.window.label_preview.setPixmap(self._previewPixmap) -if __name__ == "__main__": +if len(sys.argv) > 1: + # command line mode app = QtGui.QApplication(sys.argv) - window = uic.loadUi("main.ui") - - main = Main(window) - - atexit.register(main.cleanUp) - + command = Command() + signal.signal(signal.SIGINT, command.cleanUp) sys.exit(app.exec_()) +else: + # gui mode + if __name__ == "__main__": + app = QtGui.QApplication(sys.argv) + window = uic.loadUi("main.ui") + + main = Main(window) + + signal.signal(signal.SIGINT, main.cleanUp) + atexit.register(main.cleanUp) + + sys.exit(app.exec_()) From 1a361388d045a4b315f53dc72df51a537c4aa263 Mon Sep 17 00:00:00 2001 From: Martin Kaistra Date: Tue, 25 Apr 2017 10:28:04 +0200 Subject: [PATCH 2/4] do not require X server for command line mode --- main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.py b/main.py index d338d4f..fb5c8a4 100644 --- a/main.py +++ b/main.py @@ -236,7 +236,7 @@ class Main(QtCore.QObject): if len(sys.argv) > 1: # command line mode - app = QtGui.QApplication(sys.argv) + app = QtGui.QApplication(sys.argv, False) command = Command() signal.signal(signal.SIGINT, command.cleanUp) sys.exit(app.exec_()) From 03f6dcdc53b0e18cdfccfcbb62d5c1f26e0991cf Mon Sep 17 00:00:00 2001 From: Martin Kaistra Date: Tue, 25 Apr 2017 15:48:18 +0200 Subject: [PATCH 3/4] added font parameter, default values for settings, writing of settings file at clean up --- main.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/main.py b/main.py index fb5c8a4..b9263b2 100644 --- a/main.py +++ b/main.py @@ -24,16 +24,20 @@ class Command(QtCore.QObject): self.parser = argparse.ArgumentParser(description='Create a visualization for an audio file') self.parser.add_argument('-i', '--input', dest='input', help='input audio file', required=True) self.parser.add_argument('-o', '--output', dest='output', help='output video file', required=True) - self.parser.add_argument('-bg', '--background', dest='bg', help='background image file', required=True) + self.parser.add_argument('-b', '--background', dest='bgimage', help='background image file', required=True) self.parser.add_argument('-t', '--text', dest='text', help='title text', required=True) + self.parser.add_argument('-f', '--font', dest='font', help='title font', required=False) self.args = self.parser.parse_args() self.settings = QSettings('settings.ini', QSettings.IniFormat) - self.font = QFont(self.settings.value("titleFont")) - self.fontsize = int(self.settings.value("fontSize")) - self.alignment = int(self.settings.value("alignment")) - self.textX = int(self.settings.value("xPosition")) - self.textY = int(self.settings.value("yPosition")) + if self.args.font: + self.font = QFont(self.args.font) + else: + self.font = QFont(self.settings.value("titleFont", QFont())) + self.fontsize = int(self.settings.value("fontSize", 35)) + self.alignment = int(self.settings.value("alignment", 0)) + self.textX = int(self.settings.value("xPosition", 70)) + self.textY = int(self.settings.value("yPosition", 375)) ffmpeg_cmd = self.settings.value("ffmpeg_cmd", expanduser("~")) @@ -44,7 +48,7 @@ class Command(QtCore.QObject): self.videoWorker.videoCreated.connect(self.videoCreated) self.videoThread.start() - self.videoTask.emit(self.args.bg, + self.videoTask.emit(self.args.bgimage, self.args.text, self.font, self.fontsize, @@ -60,6 +64,11 @@ class Command(QtCore.QObject): self.cleanUp() def cleanUp(self): + self.settings.setValue("titleFont", self.font.toString()) + self.settings.setValue("alignment", str(self.alignment)) + self.settings.setValue("fontSize", str(self.fontsize)) + self.settings.setValue("xPosition", str(self.textX)) + self.settings.setValue("yPosition", str(self.textY)) sys.exit(0) class Main(QtCore.QObject): From 7a6a800714b44fd2ef98560d14a0eb38f69657c5 Mon Sep 17 00:00:00 2001 From: Martin Kaistra Date: Mon, 22 May 2017 11:06:13 +0200 Subject: [PATCH 4/4] add command line options for font size, alignment, position --- main.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/main.py b/main.py index e4f4a64..0e55196 100644 --- a/main.py +++ b/main.py @@ -27,6 +27,10 @@ class Command(QtCore.QObject): self.parser.add_argument('-b', '--background', dest='bgimage', help='background image file', required=True) self.parser.add_argument('-t', '--text', dest='text', help='title text', required=True) self.parser.add_argument('-f', '--font', dest='font', help='title font', required=False) + self.parser.add_argument('-s', '--fontsize', dest='fontsize', help='title font size', required=False) + self.parser.add_argument('-x', '--xposition', dest='xposition', help='x position', required=False) + self.parser.add_argument('-y', '--yposition', dest='yposition', help='y position', required=False) + self.parser.add_argument('-a', '--alignment', dest='alignment', help='title alignment', required=False, type=int, choices=[0, 1, 2]) self.args = self.parser.parse_args() self.settings = QSettings('settings.ini', QSettings.IniFormat) @@ -34,10 +38,26 @@ class Command(QtCore.QObject): self.font = QFont(self.args.font) else: self.font = QFont(self.settings.value("titleFont", QFont())) - self.fontsize = int(self.settings.value("fontSize", 35)) - self.alignment = int(self.settings.value("alignment", 0)) - self.textX = int(self.settings.value("xPosition", 70)) - self.textY = int(self.settings.value("yPosition", 375)) + + if self.args.fontsize: + self.fontsize = int(self.args.fontsize) + else: + self.fontsize = int(self.settings.value("fontSize", 35)) + + if self.args.alignment: + self.alignment = int(self.args.alignment) + else: + self.alignment = int(self.settings.value("alignment", 0)) + + if self.args.xposition: + self.textX = int(self.args.xposition) + else: + self.textX = int(self.settings.value("xPosition", 70)) + + if self.args.yposition: + self.textY = int(self.args.yposition) + else: + self.textY = int(self.settings.value("yPosition", 375)) ffmpeg_cmd = self.settings.value("ffmpeg_cmd", expanduser("~"))