Die beiden Kompressionsalgorithmen unterscheiden sich völlig in ihrer Funktionsweise, und MPEG4 kann auch die GPU-Beschleunigung verwenden.
MPEG4 ist ein echter Videocodec, während MJPEG jedes Bild einfach in ein separates JPEG-Bild komprimiert. Der Unterschied besteht darin, dass MPEG4 eine Vielzahl von Techniken (Bewegungsvektorkompensation, I / B-Frames usw.) verwendet, um sowohl die Qualität als auch das Kompressionsverhältnis zu verbessern.
Warum man schneller arbeitet als der andere, hängt wirklich davon ab, wie der Encoder implementiert wurde und wie sich die jeweilige Hardware beim Encoding verhält. Einige Encoder können spezielle CPU-Anweisungen (SSE / SSE2, MMX usw.) oder GPU-Beschleunigung verwenden (ich weiß, dass Sie dies wahrscheinlich nicht tun, aber ich erwähne es nur). Die JPEG-Komprimierung ist weitgehend von der CPU-Geschwindigkeit abhängig und verwendet eigentlich keine Verbesserungen des Befehlssatzes (aus Gründen der Kompatibilität / Stabilität und der Tatsache, dass sie nicht wirklich hilft - siehe den Änderungsprotokolleintrag für den 16. November 2006).
Wenn Sie nicht über ein Einzelbildvideo verfügen, codiert MPEG4 niemals wirklich ein "Einzelbild" gleichzeitig. Es wird immer ein Frame-Blick nach vorne / hinten durchgeführt, um bessere Möglichkeiten zum Komprimieren des aktuellen Frames zu ermitteln (MJPEG führt nur jeweils einen einzelnen Frame aus). Daher hängt es weitgehend von den Daten vor / nach dem Frame ab, nicht nur von den aktuellen. Dies tritt auch bei der Single-Pass-Codierung auf (deshalb werden überhaupt die Bewegungsvektoren verwendet).