From 9183c38754d76fcd778965350046738557d13722 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 24 Jan 2022 03:52:34 +0000 Subject: splitfx: add --filter option to limit match to comments This can allow filtering for tracks with a given comment declared via the ".#{COMMENT}" mechanism or the track title. If no prefix is given (before the '='), then all comment values are matched. --- bin/dtas-splitfx | 1 + lib/dtas/splitfx.rb | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/bin/dtas-splitfx b/bin/dtas-splitfx index 6ce6521..d0afc7b 100755 --- a/bin/dtas-splitfx +++ b/bin/dtas-splitfx @@ -13,6 +13,7 @@ OptionParser.new('', 24, ' ') do |op| op.on('-n', '--dry-run') { opts[:dryrun] = true } op.on('-j', '--jobs [JOBS]', Integer) { |val| opts[:jobs] = val } # nil==inf op.on('-s', '--quiet', '--silent') { opts[:silent] = true } + op.on('-f', '--filter FILTER') { |val| (opts[:filter] ||= []) << val } op.on('-D', '--no-dither') { opts[:no_dither] = true } op.on('-O', '--outdir OUTDIR') { |val| opts[:outdir] = val } op.on('-C', '--compression FACTOR') { |val| opts[:compression] = val } diff --git a/lib/dtas/splitfx.rb b/lib/dtas/splitfx.rb index 1ce2007..696b9ce 100644 --- a/lib/dtas/splitfx.rb +++ b/lib/dtas/splitfx.rb @@ -360,6 +360,14 @@ class DTAS::SplitFX # :nodoc: fails = [] tracks = @tracks.dup + (opts[:filter] || []).each do |re| + field, val = re.split(/=/, 2) + if val + tracks.delete_if { |t| (t.comments[field] || '') !~ /#{val}/ } + else + tracks.delete_if { |t| t.comments.values.grep(/#{re}/).empty? } + end + end pids = {} jobs = opts[:jobs] || tracks.size # jobs == nil => everything at once if opts[:sox_pipe] -- cgit v1.2.3-24-ge0c7