1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#!/usr/bin/env ruby
require 'json'
dir = ARGV[0]
Dir.chdir dir
input = JSON.load(File.read("config.json"))
input["album"] = File.basename(dir).gsub("_", " ")
input["artist"] ||= "pdp8@pdp8.info"
input["year"] ||= `date +%Y`
input["copyright"] ||= "Creative Commons Attribution-ShareAlike 4.0 International License (http://creativecommons.org/licenses/by-sa/4.0/)"
dest = File.join(ENV["HOME"], "pub", "music", `date +%Y-%m-%d_`.strip + input["album"].gsub(" ", "_"))
puts `mkdir -p '#{dest}'`
cover = File.join(dest, "cover" + File.extname(input["cover"]))
puts `cp -v '#{input["cover"]}' '#{cover}'`
puts `exiv2 rm #{cover}`
puts `exiv2 -M"set Xmp.dc.creator pdp8@pdp8.info" -M"set Xmp.dc.rights This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (http://creativecommons.org/licenses/by-sa/4.0/)." -M"set Xmp.xmpRights.Marked True" #{cover}`
n = 1
input["tracks"].each do |t, s|
File.open(File.join(dest, "README"), "w+") { |f| f.puts input["text"] }
flac = File.join(dest, sprintf("%02d-%s.flac", n, t))
puts `cp -v '#{s}' '#{flac}'`
File.open("/tmp/meta", "w+") do |tmp|
tmp.puts "TITLE=#{t}"
tmp.puts "TRACK=#{n}"
[
"artist",
"year",
"album",
"genre",
"copyright"
].each do |tag|
tmp.puts "#{tag.upcase}=#{input[tag]}"
end
end
puts `metaflac --remove-all --dont-use-padding #{flac}`
puts `metaflac --import-tags-from=/tmp/meta #{flac}`
puts `metaflac --import-picture-from=#{cover} #{flac}`
mp3 = flac.sub("flac", "mp3")
puts `ffmpeg -i #{flac} -c:v copy -ab 256k -f mp3 #{mp3}`
n += 1
end
|