commit fe5a75b1777b3c9885527c6b2a57dffd34a888d2
parent a9c294e3ea334986627b04c3863c96211910450a
Author: gearsix <gearsix@tuta.io>
Date: Sat, 8 May 2021 20:11:10 +0100
moved new gui stuff to gui.py; moved about layout, added keep, youtubedl, ffmpeg settings
Diffstat:
A | gui.py | | | 154 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
M | sya.py | | | 68 | ++++---------------------------------------------------------------- |
2 files changed, 158 insertions(+), 64 deletions(-)
diff --git a/gui.py b/gui.py
@@ -0,0 +1,153 @@
+
+import PyQt5.QtWidgets as pyqt
+
+class Args:
+ def __init__(self, args):
+ # arg values
+ self.tracklist = args.tracklist
+ self.format = args.format
+ self.quality = args.quality
+ self.youtubedl = args.youtubedl
+ self.ffmpeg = args.ffmpeg
+ self.keep = args.keep
+ self.output = args.output
+ # static shared values
+ self._sizex_btn = 40
+ self._sizey_btn = 40
+ # widget
+ self._widget = pyqt.QWidget()
+ # INFO
+ self._info_label = pyqt.QLabel('INFO:', self._widget)
+ self._info_textedit = pyqt.QTextEdit(self._widget)
+ # Tracklist
+ self._tracklist_pbtn = pyqt.QPushButton(self._widget)
+ self._tracklist_label = pyqt.QLabel('Tracklist:', self._widget)
+ self._tracklist_edit = pyqt.QLineEdit(self._widget)
+ # youtube-dl
+ self._youtube_pbtn = pyqt.QPushButton(self._widget)
+ self._youtube_label = pyqt.QLabel('youtube-dl:', self._widget)
+ self._youtube_edit = pyqt.QLineEdit(self._widget)
+ # ffmpeg
+ self._ffmpeg_pbtn = pyqt.QPushButton(self._widget)
+ self._ffmpeg_label = pyqt.QLabel('ffmpeg:', self._widget)
+ self._ffmpeg_edit = pyqt.QLineEdit(self._widget)
+ # keep
+ self._keep_checkbox = pyqt.QCheckBox('keep', self._widget)
+ self._format_combobox = pyqt.QComboBox(self._widget)
+ self._quality_combobox = pyqt.QComboBox(self._widget)
+ # init gui elements
+ self._init_widget()
+ self._init_readme()
+ self._init_tracklist()
+ self._init_youtubedl()
+ self._init_ffmpeg()
+ self._init_keep()
+ self._init_format()
+ self._init_quality()
+ # run
+ self._widget.show()
+
+ def _getx_edit(self, base):
+ return base + 45
+
+ def _gety_edit(self, base):
+ return base + 14
+
+ def _getx_label(self, base):
+ return base + 45
+
+ def _gety_label(self, base):
+ return base - 1
+
+ def _filepicker_tracklist(self, signal):
+ file = pyqt.QFileDialog.getOpenFileName(self.widget, 'Select a tracklist',
+ os.path.expanduser("~"), "text file (*.txt)")
+ if file[1] == 'text file (*.txt)':
+ self.path_edit.setText(file[0])
+
+ def _filepicker_youtubedl(self, signal):
+ file = pyqt.QFileDialog.getOpenFileName(self.widget, 'Select youtube-dl binary',
+ os.path.expanduser("~"), "exe file (*.exe)")
+ if file[1] == 'exe file (*.exe)':
+ self.youtube_edit.setText(file[0])
+
+ def _filepicker_ffmpeg(self, signal):
+ file = pyqt.QFileDialog.getOpenFileName(self.widget, 'Select ffmpeg binary',
+ os.path.expanduser("~"), "exe file (*.exe)")
+ if file[1] == 'exe file (*.exe)':
+ self.ffmpeg_edit.setText(file[0])
+
+ def _init_widget(self):
+ self._widget.setWindowTitle('sya')
+ #self.widget.setWindowIcon(pyqt.QIcon('icon.png'))
+ self._widget.resize(500, 600)
+
+ def _init_tracklist(self):
+ y = 375
+ x = 25
+ #self.filepicker_btn.setIcon(QIcon('logo.png'))
+ self._tracklist_pbtn.move(x, y)
+ self._tracklist_pbtn.resize(self._sizex_btn, self._sizey_btn)
+ self._tracklist_pbtn.clicked.connect(self._filepicker_tracklist)
+ self._tracklist_label.move(self._getx_label(x), self._gety_label(y))
+ self._tracklist_edit.move(self._getx_edit(x), self._gety_edit(y))
+ self._tracklist_edit.resize(400, 25)
+
+ def _init_youtubedl(self):
+ y = 420
+ x = 25
+ self._youtube_pbtn.move(x, y)
+ self._youtube_pbtn.resize(self._sizex_btn, self._sizey_btn)
+ self._youtube_pbtn.clicked.connect(self._filepicker_youtubedl)
+ self._youtube_label.move(self._getx_label(x), self._gety_label(y))
+ self._youtube_edit.move(self._getx_edit(x), self._gety_edit(y))
+ self._youtube_edit.resize(165, 25)
+
+ def _init_ffmpeg(self):
+ y = 420
+ x = 260
+ self._ffmpeg_pbtn.move(x, y)
+ self._ffmpeg_pbtn.resize(self._sizex_btn, self._sizey_btn)
+ self._ffmpeg_pbtn.clicked.connect(self._filepicker_ffmpeg)
+ self._ffmpeg_label.move(self._getx_label(x), self._gety_label(y))
+ self._ffmpeg_edit.move(self._getx_edit(x), self._gety_edit(y))
+ self._ffmpeg_edit.resize(165, 25)
+
+ def _init_keep(self):
+ return
+ #
+
+ def _init_format(self):
+ return
+ #
+
+ def _init_quality(self):
+ return
+ #
+
+ def _init_readme(self):
+ self._info_label.move(25, 50)
+ self._info_textedit.resize(450, 300)
+ self._info_textedit.move(25, 65)
+ self._info_textedit.setReadOnly(True)
+ self._info_textedit.setPlainText(
+'''sya uses the tools "youtube-dl" and "ffmpeg" to download videos from youtube, extract & converts their audio them to an audio file, then splits that file based on set timestamps set in a "tracklist" text file (see below).
+
+Select a file to use as the "tracklist" and various options below.
+
+Tracklist files should be text file that has the URL/v=code of the youtube video to
+download on the first line and the starting timestamp of each section to split, followed
+by the title of that section section.
+Here is an example:
+
+ https://www.youtube.com/watch?v=ors0wpcVDcc
+ Los Natas - Brisa Del Desierto [00:00]
+ Sleeping Pandora - Through The Maze [02:05]
+ Fluidage - Feel Like I Do [12:43]
+ My Sleeping Karma - Psilocybe [18:11]
+ Daisy Pusher - While Wailing (Only a Part) [26:01]
+ The Whirlings - Worries on a Shelf [30:49]
+ Arenna - Move Through Figurehead Lights [36:28]
+ Ten East - Skyline Pressure [43:32]
+ Wooden Shjips - These Shadows [49:24]
+ ...etc''')
+\ No newline at end of file
diff --git a/sya.py b/sya.py
@@ -5,6 +5,7 @@ import subprocess
import re
import os
import sys
+import gui
import PyQt5.QtWidgets as pyqt
Timestamp = re.compile('[\[,\(]?(:?\d{1,2}){3}[\],\)]?')
@@ -14,67 +15,6 @@ class TracklistItem:
self.timestamp = timestamp
self.title = title
-class GUI:
- def __init__(self, widget):
- self.widget = widget
- self.init_widget()
- self.filepickerbtn = pyqt.QPushButton(widget)
- self.pathlabel = pyqt.QLabel('Tracklist:', widget)
- self.textbox = pyqt.QTextEdit(widget)
- self.init_tracklist()
- self.init_readme()
-
- def filepicker(self, signal):
- file = pyqt.QFileDialog.getOpenFileName(self.widget, 'Select a tracklist', os.path.expanduser("~"), "text file (*.txt)")
- if file[1] == 'text file (*.txt)':
- self.pathlineditor.setText(file[0])
-
- def init_widget(self):
- widget.setWindowTitle('sya')
- widget.resize(500, 500)
- #widget.setWindowIcon(pyqt.QIcon('icon.png'))
-
- def init_tracklist(self):
- #self.filepickerbtn.setIcon(QIcon('logo.png'))
- self.filepickerbtn.move(25, 25)
- self.filepickerbtn.resize(40, 40)
- self.filepickerbtn.clicked.connect(self.filepicker)
-
- self.pathlabel.move(75, 23)
-
- self.pathlineditor = pyqt.QLineEdit(widget)
- self.pathlineditor.move(75, 38)
- self.pathlineditor.resize(400, 25)
-
- def init_readme(self):
- self.textbox.resize(450, 330)
- self.textbox.move(25, 120)
- self.textbox.setReadOnly(True)
- self.textbox.setPlainText('''
- DESCRIPTION
- sya downloads, converts and splits youtube videos using `youtube-dl` and `ffmpeg`.
- while intended for long audio mixtapes, the tools it uses are quite flexible so
- you could use it to download & split long videos as well.
-
- TRACKLIST
- TRACKLIST files should be text file that has the URL/v=code of the youtube video to
- download on the first line and the starting timestamp of each section to split, followed
- by the title of that section section.
- Here is an example:
-
- https://www.youtube.com/watch?v=ors0wpcVDcc
- Los Natas - Brisa Del Desierto [00:00]
- Sleeping Pandora - Through The Maze [02:05]
- Fluidage - Feel Like I Do [12:43]
- My Sleeping Karma - Psilocybe [18:11]
- Daisy Pusher - While Wailing (Only a Part) [26:01]
- The Whirlings - Worries on a Shelf [30:49]
- Arenna - Move Through Figurehead Lights [36:28]
- Ten East - Skyline Pressure [43:32]
- Wooden Shjips - These Shadows [49:24]
- ...etc
- ''')
-
def log(msg):
print('sya:', msg)
@@ -183,10 +123,10 @@ if __name__ == '__main__':
args = parse_args()
if len(sys.argv) == 1:
app = pyqt.QApplication([])
- widget = pyqt.QWidget()
- gui = GUI(widget)
- widget.show()
+ args = gui.Args(args)
sys.exit(app.exec_())
+ #while app.exec_():
+ # continue
if check_bin(args.youtubedl, args.ffmpeg) == False:
error_exit('required binaries are missing')
tracklist = load_tracklist(args.tracklist)