Сама конвертация устроена максимально тупо: я просто пользуюсь ffmpeg, причем именно консольным интерфейсом. Все остальное оказалось либо еще более сложным по интерфейсу, либо неподходящим - библиотек-энкодеров для браузера в целом не так много. Хотя когда-то в будущем обещают WebCodecs.

В любом случае, я не тащу прям весь ffmpeg целиком, а компилирую его сам, только с теми фильтрами и кодеками, которые мне нужны. Получается примерно 1.5 МБ wasm-байткода. Работает (на моем компьютере), на удивление, даже довольно быстро.

Обвязку для того, чтобы компилировать ffmpeg в wasm и потом этим пользоваться, нашел здесь:

github.com/Yahweasel/libav.js