code: def _get_info(self):
          
          out_parts = []
          while True:
              line = self.proc.stderr.readline()
              if not line:
                  # EOF and data not found.
                  raise CommunicationError("stream info not found")
  
              # In Python 3, result of reading from stderr is bytes.
              if isinstance(line, bytes):
                  line = line.decode('utf8', 'ignore')
  
              line = line.strip().lower()
  
              if 'no such file' in line:
                  raise IOError('file not found')
              elif 'invalid data found' in line:
                  raise UnsupportedError()
              elif 'duration:' in line:
                  out_parts.append(line)
              elif 'audio:' in line:
                  out_parts.append(line)
                  self._parse_info(''.join(out_parts))
                  break
docs: Reads the tool's output from its stderr stream, extracts the
          relevant information, and parses it.