aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMelody Horn <melody@boringcactus.com>2019-04-23 01:03:57 -0600
committerMelody Horn <melody@boringcactus.com>2019-04-23 01:03:57 -0600
commit23132238f9baa9a061a445e2d786a32790aa60a7 (patch)
tree344a6cc44e2f2dcadee5297a1d3c9b7a446a5b88
parentb81ee0c830398f9fcf26b32f0eca3da161f5c09c (diff)
downloadvidslice-23132238f9baa9a061a445e2d786a32790aa60a7.tar.gz
vidslice-23132238f9baa9a061a445e2d786a32790aa60a7.zip
use -ss as an input option for *far* better efficiency
-rw-r--r--options.py23
-rw-r--r--output.py24
-rw-r--r--vidslice.py2
3 files changed, 30 insertions, 19 deletions
diff --git a/options.py b/options.py
index 98c9013..e4ae452 100644
--- a/options.py
+++ b/options.py
@@ -13,6 +13,12 @@ EDIT_BOX_COL = 2
NEW_COL = 3
+class FFmpegOptions:
+ def __init__(self, input, output):
+ self.input = input
+ self.output = output
+
+
class Property:
def __init__(self, parent, name, *, label=None, orig=None, edit=None, new_class=None, new=None):
self.handlers = []
@@ -238,19 +244,20 @@ class OptionsPanel(wx.Panel):
self.enforce_constraints()
def ffmpeg_opts(self):
- opts = []
+ input_opts = []
+ output_opts = []
if self.start_time.is_edit():
- opts += ['-ss', str(self.start_time.get_final())]
+ input_opts += ['-ss', str(self.start_time.get_final())]
elif self.end_time.is_edit() and self.duration.is_edit():
new_end = float(self.end_time.get_final())
new_duration = float(self.duration.get_final())
new_start = new_end - new_duration
- opts += ['-ss', str(new_start)]
+ input_opts += ['-ss', str(new_start)]
if self.end_time.is_edit():
- opts += ['-to', str(self.end_time.get_final())]
+ output_opts += ['-to', str(self.end_time.get_final())]
if self.duration.is_edit():
- opts += ['-t', str(self.duration.get_final())]
+ output_opts += ['-t', str(self.duration.get_final())]
if self.width.is_edit() or self.height.is_edit():
width = str(self.width.get_final())
@@ -259,9 +266,9 @@ class OptionsPanel(wx.Panel):
width = "-1"
if not self.height.is_edit():
height = "-1"
- opts += ['-vf', 'scale=' + width + ':' + height]
+ output_opts += ['-vf', 'scale=' + width + ':' + height]
if self.framerate.is_edit():
- opts += ['-r', str(self.framerate.get_final())]
+ output_opts += ['-r', str(self.framerate.get_final())]
- return opts
+ return FFmpegOptions(input_opts, output_opts)
diff --git a/output.py b/output.py
index 766234c..82a106e 100644
--- a/output.py
+++ b/output.py
@@ -4,9 +4,11 @@ import threading
import wx
+from options import FFmpegOptions
+
class OutputPanel(wx.Panel):
- def __init__(self, *args, get_ffmpeg_args=lambda: [], **kw):
+ def __init__(self, *args, get_ffmpeg_args=lambda: FFmpegOptions([], []), **kw):
super(OutputPanel, self).__init__(*args, **kw)
self.update_listeners = []
self.input_path = None
@@ -74,29 +76,31 @@ class OutputPanel(wx.Panel):
self.logs.Clear()
self.run_panel.Disable()
real_args = self.get_ffmpeg_args()
+ input_args = real_args.input
+ output_args = real_args.output
output_path = self.file_text.GetValue()
(folder, name) = os.path.split(output_path)
(name, ext) = os.path.splitext(name)
if self.silence.GetValue():
- real_args += ['-an']
+ output_args += ['-an']
if ext == '.gif':
filter_before = '[0:v] '
filter_after = 'split [a][b];[a] palettegen [p];[b][p] paletteuse'
filter_during = ''
- if '-vf' in real_args:
- for i in range(len(real_args) - 1):
- [a, b] = real_args[i:i + 2]
+ if '-vf' in output_args:
+ for i in range(len(output_args) - 1):
+ [a, b] = output_args[i:i + 2]
if a == '-vf':
filter_during = b + ','
- real_args[i:i + 2] = []
+ output_args[i:i + 2] = []
break
- real_args += ['-filter_complex', filter_before + filter_during + filter_after]
+ output_args += ['-filter_complex', filter_before + filter_during + filter_after]
if self.deepfry.GetValue():
if ext == '.mp3':
- real_args += ['-q:a', '9']
+ output_args += ['-q:a', '9']
else:
- real_args += ['-q:a', '0.1', '-crf', '51']
- args = ['ffmpeg', '-hide_banner', '-y', '-i', self.input_path] + real_args + [output_path]
+ output_args += ['-q:a', '0.1', '-crf', '51']
+ args = ['ffmpeg', '-hide_banner', '-y'] + input_args + ['-i', self.input_path] + output_args + [output_path]
print(args)
def run():
diff --git a/vidslice.py b/vidslice.py
index 36fb1fd..6852ab9 100644
--- a/vidslice.py
+++ b/vidslice.py
@@ -9,7 +9,7 @@ from options import OptionsPanel
from output import OutputPanel
from sources import SourcesPanel, update_ytdl
-VERSION = "1.3"
+VERSION = "1.4"
def check_update(parent):