Два алгоритма сжатия совершенно различны по своему функционированию, и MPEG4 также может использовать ускорение GPU.
MPEG4 - это настоящий видеокодек, тогда как MJPEG просто сжимает каждый кадр в отдельное изображение JPEG. Разница в том, что MPEG4 использует различные методы (компенсация вектора движения, кадры I / B и т. Д.) Для улучшения как качества, так и степени сжатия.
Почему один работает быстрее, чем другой, действительно зависит от того, как был реализован кодер, и от того, как работает ваше конкретное оборудование при кодировании. Некоторые кодировщики могут использовать специальные инструкции процессора (SSE / SSE2, MMX и т. Д.) Или использовать ускорение графического процессора (я знаю, что вы, вероятно, нет, но я только упоминаю об этом). Сжатие JPEG в значительной степени зависит от скорости процессора и на самом деле не использует никаких улучшений набора команд (для совместимости / стабильности и того факта, что это не очень помогает - см. Запись в журнале изменений за 16 ноября 2006 г.).
Наконец, если у вас нет однокадрового видео, MPEG4 никогда не кодирует «один кадр» за раз. Он всегда выполняет просмотр кадра вперед / назад, чтобы определить лучшие способы сжатия текущего кадра (MJPEG делает только один кадр за раз). Как таковой, он в значительной степени зависит от данных до / после кадра, а не только от текущего. Это происходит и в однопроходном кодировании (поэтому, в конце концов, оно использует векторы движения).