audio (1167B)
1 #!/usr/bin/env ruby 2 3 require "optparse" 4 5 ARTIST = "David Eisinger" 6 7 Config = Struct.new(:file, :title, :directory, :artist) 8 9 config = Config.new(artist: ARTIST) 10 11 parser = OptionParser.new do |opts| 12 opts.banner = "Usage: bin/audio [options]" 13 14 opts.on("-f", "--file FILE", "input file") do |file| 15 config.file = file 16 end 17 18 opts.on("-t", "--title TITLE", "title of the track") do |title| 19 config.title = title 20 end 21 22 opts.on("-d", "--directory DIRECTORY", "directory to put the output file") do |directory| 23 config.directory = directory 24 end 25 26 opts.on("-a", "--artist ARTIST", "artist (default: #{ARTIST})") do |artist| 27 config.artist = artist 28 end 29 end 30 31 begin 32 parser.parse!(ARGV) 33 missing = config.to_h.filter_map { |k, v| k if v.nil? } 34 raise OptionParser::MissingArgument.new(missing * ", ") unless missing.empty? 35 rescue 36 puts $!.to_s 37 puts parser 38 exit 39 end 40 41 dest = [config.directory, "#{config.title}.mp3"].join("/").squeeze("/") 42 43 # `ffmpeg -i "#{config.file}" -af "pan=mono|FC=FL" -y "#{dest}"` 44 `ffmpeg -i "#{config.file}" -y "#{dest}"` 45 `id3tag --artist="#{config.artist}" --song="#{config.title}" "#{dest}"` 46 47 puts `id3info "#{dest}"`