davideisinger.com

My personal website
Log | Files | Refs | README

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}"`