Skip to content

Commit 8383417

Browse files
committed
Add split-songs
1 parent 1c04c16 commit 8383417

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

split-songs

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#!/bin/env python
2+
# Split songs in a single mp3 into separate files based on a list file in the form
3+
# HH:SS Song Name 1
4+
# HH:SS Song Name 2
5+
# ...
6+
7+
import sys
8+
import os
9+
10+
11+
def adjust_start(ints):
12+
i = len(ints)-1
13+
while i >= 0:
14+
if ints[i] != 59:
15+
ints[i] += 1
16+
return ints
17+
ints[i] = 00
18+
else:
19+
return [0]*len(ints)
20+
21+
def fixup_time(text, adjust=False):
22+
parts = text.split(':')
23+
ints = [int(p) for p in parts]
24+
if adjust:
25+
ints = adjust_start(ints)
26+
parts = ['{:02}'.format(int(p)) for p in ints]
27+
if len(parts) == 1:
28+
return ':'.join(['00']*2 + parts)
29+
elif len(parts) == 2:
30+
return ':'.join(['00'] + parts)
31+
elif len(parts) == 3:
32+
return ':'.join(parts)
33+
else:
34+
return ':'.join(parts[:3])
35+
36+
37+
def read_song_list(path):
38+
parts = []
39+
with open(path) as fh:
40+
for line in fh:
41+
parts.append(line.strip().split(' ', 1))
42+
43+
if len(parts) < 2:
44+
print('ERROR: at least two songs must be listed.')
45+
sys.exit(1)
46+
47+
songs = []
48+
for i, entry in enumerate(parts[:-1]):
49+
songs.append((fixup_time(parts[i][0], True), fixup_time(parts[i+1][0]), '{:02} - {}'.format(i+1, parts[i][1])))
50+
songs.append((fixup_time(parts[-2][0], True), fixup_time(parts[-1][0]), '{:02} - {}'.format(len(parts), parts[-1][1])))
51+
52+
return songs
53+
54+
55+
def extract_song(source, song_desc):
56+
tmpl = 'mp3cut -o "{}.mp3" -t {}-{} "{}"'
57+
cmd = tmpl.format(song_desc[2], song_desc[0], song_desc[1], source)
58+
print(cmd)
59+
os.system(cmd)
60+
61+
62+
if __name__ == '__main__':
63+
songs = read_song_list(sys.argv[2])
64+
for song in songs:
65+
extract_song(sys.argv[1], song)
66+
67+

0 commit comments

Comments
 (0)