summaryrefslogtreecommitdiff
path: root/cutter.py
diff options
context:
space:
mode:
Diffstat (limited to 'cutter.py')
-rwxr-xr-xcutter.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/cutter.py b/cutter.py
index 78e6cf5..9fa0cff 100755
--- a/cutter.py
+++ b/cutter.py
@@ -9,6 +9,9 @@ from optparse import OptionParser, OptionGroup
import sys
import os
+import re
+
+re_range = re.compile("^(\d+)-(\d+)$")
try:
from cutter import config
@@ -100,6 +103,8 @@ def parse_args():
dest="bitrate", default=config.MP3_BITRATE,
help="audio bitrate (used for mp3)")
+ enc.add_option("--tracks", dest="tracks", help="select tracks")
+
parser.add_option_group(enc)
fname = OptionGroup(parser, "Filename options")
@@ -152,6 +157,29 @@ def option_check_range(option, value, min, max):
return True
+def tracks_parse(string):
+ tracks = set()
+
+ for item in string.split(","):
+ try:
+ value = int(item)
+ tracks.add(value)
+ except ValueError:
+ m = re_range.match(item)
+ if not m:
+ return None
+
+ start, end = int(m.group(1)), int(m.group(2))
+ if start <= 0 or end <= 0 or start == end:
+ return None
+
+ if start > end:
+ start, end = end, start
+
+ tracks.update(range(start, end + 1))
+
+ return None if len(tracks) == 0 else tracks
+
def process_options(opt):
def choose(a, b):
return a if a is not None else b
@@ -202,6 +230,14 @@ def process_options(opt):
if opt.use_tempdir is None:
opt.use_tempdir = config.USE_TEMPDIR
+ if opt.tracks is not None:
+ tracks = tracks_parse(opt.tracks)
+ if not tracks:
+ printerr("invalid tracks option \"%s\"", opt.tracks)
+ return False
+
+ opt.tracks = tracks
+
return True
def find_cuefile(path):