code: func NewSubtitle(moviePath string, subPath string, langID string) (s Subtitle, err error) {
  	s.subFilePath = subPath
  	s.SubLanguageID = langID
  	s.SubFileName = path.Base(subPath)
  	// Subs are identified using md5 hashes... ¬¬
  	subIO, err := os.Open(subPath)
  	if err != nil {
  		return
  	}
  	defer subIO.Close()
  	h := md5.New()
  	_, err = io.Copy(h, subIO)
  	if err != nil {
  		return
  	}
  	s.SubHash = fmt.Sprintf("%x", h.Sum(nil))
  
  	// Movie filename, byte-size, & hash.
  	s.MovieFileName = path.Base(moviePath)
  	movieIO, err := os.Open(moviePath)
  	if err != nil {
  		return
  	}
  	defer movieIO.Close()
  	stat, err := movieIO.Stat()
  	if err != nil {
  		return
  	}
  	s.MovieByteSize = strconv.FormatInt(stat.Size(), 10)
  	movieHash, err := HashFile(movieIO)
  	if err != nil {
  		return
  	}
  	s.MovieHash = fmt.Sprintf("%x", movieHash)
  	return
  }
docs: // NewSubtitle builds a Subtitle struct.