The algorithm dosent need to be too complex. You basically look at each still frame as grayscale, generate a hashtable of brightness values mapping to monospaced characters, and convert each grayscale pixel to a character.
()
and: )(
have the same brightness values, but we see them pretty differently.Ideally you would use edge detection, maybe some object detection, and then be willing to compromise a little on brightness in order to make important edges nice. I don't know if there's software out there that does this, though.