TB-Profiler has used bcftools csq to annotate variant calls, converting into protein/gene consequences. The main advantages is of csq is that if two mutations are present in the same codon it will translate them both at the same time.
However there are cases that it does not do the right thing, e.g. ERR2864220: