youpy-scissor 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +1 -1
- data/Rakefile +1 -1
- data/lib/scissor.rb +38 -11
- metadata +1 -1
data/README.rdoc
CHANGED
@@ -30,7 +30,7 @@ utility to chop mp3 files
|
|
30
30
|
((foo.slice(10, 1) + bar.slice(2, 3)) * 4).to_file('slicefoobarloop.mp3')
|
31
31
|
|
32
32
|
# split
|
33
|
-
(Scissor.new('sequence.mp3') / 16).to_file('split.mp3')
|
33
|
+
(Scissor.new('sequence.mp3') / 16).first.to_file('split.mp3')
|
34
34
|
|
35
35
|
== Copyright
|
36
36
|
|
data/Rakefile
CHANGED
@@ -17,7 +17,7 @@ DESCRIPTION = "utility to chop mp3 files"
|
|
17
17
|
RUBYFORGE_PROJECT = "scissor"
|
18
18
|
HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
|
19
19
|
BIN_FILES = %w( )
|
20
|
-
VERS = "0.0.
|
20
|
+
VERS = "0.0.3"
|
21
21
|
|
22
22
|
REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
|
23
23
|
CLEAN.include ['**/.*.sw?', '*.gem', '.config']
|
data/lib/scissor.rb
CHANGED
@@ -6,13 +6,12 @@ include FileUtils
|
|
6
6
|
class Scissor
|
7
7
|
class Error < StandardError; end
|
8
8
|
class CommandNotFound < Error; end
|
9
|
+
class FileExists < Error; end
|
10
|
+
class EmptyFragment < Error; end
|
9
11
|
|
10
12
|
attr_reader :fragments
|
11
13
|
|
12
14
|
def initialize(filename = nil)
|
13
|
-
which('ffmpeg')
|
14
|
-
which('mp3wrap')
|
15
|
-
|
16
15
|
@fragments = []
|
17
16
|
|
18
17
|
if filename
|
@@ -96,13 +95,32 @@ class Scissor
|
|
96
95
|
results = []
|
97
96
|
|
98
97
|
count.times do |i|
|
99
|
-
results << slice(i, splitted_duration)
|
98
|
+
results << slice(i * splitted_duration, splitted_duration)
|
100
99
|
end
|
101
100
|
|
102
101
|
results
|
103
102
|
end
|
104
103
|
|
105
|
-
def to_file(filename)
|
104
|
+
def to_file(filename, options = {})
|
105
|
+
if @fragments.empty?
|
106
|
+
raise EmptyFragment
|
107
|
+
end
|
108
|
+
|
109
|
+
which('ffmpeg')
|
110
|
+
which('mp3wrap')
|
111
|
+
|
112
|
+
options = {
|
113
|
+
:overwrite => false
|
114
|
+
}.merge(options)
|
115
|
+
|
116
|
+
if File.exists?(filename)
|
117
|
+
if options[:overwrite]
|
118
|
+
File.unlink(filename)
|
119
|
+
else
|
120
|
+
raise FileExists
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
106
124
|
outfiles = []
|
107
125
|
tmpdir = '/tmp/scissor-' + $$.to_s
|
108
126
|
mkdir tmpdir
|
@@ -112,16 +130,25 @@ class Scissor
|
|
112
130
|
outfile = tmpdir + '/' + index.to_s + '.mp3'
|
113
131
|
outfiles << outfile
|
114
132
|
cmd = "ffmpeg -i \"#{fragment.filename}\" -ss #{fragment.start} -t #{fragment.duration} #{outfile}"
|
133
|
+
puts cmd
|
115
134
|
system cmd
|
116
135
|
end
|
117
136
|
|
118
|
-
|
119
|
-
|
120
|
-
|
137
|
+
if outfiles.size == 1
|
138
|
+
mv outfiles.first, filename
|
139
|
+
else
|
140
|
+
# concat mp3 files
|
141
|
+
outfile = tmpdir + '/concat.mp3'
|
142
|
+
cmd = "mp3wrap \"#{outfile}\" #{outfiles.join(' ')}"
|
143
|
+
puts cmd
|
144
|
+
system cmd
|
121
145
|
|
122
|
-
|
123
|
-
|
124
|
-
|
146
|
+
# fix duration and rename
|
147
|
+
infile = tmpdir + '/concat_MP3WRAP.mp3'
|
148
|
+
cmd = "ffmpeg -i \"#{infile}\" -acodec copy \"#{filename}\""
|
149
|
+
puts cmd
|
150
|
+
system cmd
|
151
|
+
end
|
125
152
|
|
126
153
|
rm_rf tmpdir
|
127
154
|
|