FFmpeg handles TTML internally. It also converts to VTT:

TTML allows overlapping <p> elements (multiple simultaneous captions). SRT does not. FFmpeg usually merges them with \n , but sometimes you lose data. Use ffmpeg -i input.ttml -c:s mov_text output.mp4 to keep overlapping captions in a compatible container.