Os dois algoritmos de compressão são completamente diferentes na forma como funcionam, e o MPEG4 também pode usar a aceleração da GPU.
O MPEG4 é um verdadeiro codec de vídeo, enquanto o MJPEG simplesmente compacta cada quadro em uma imagem JPEG separada. A diferença é que o MPEG4 usa uma variedade de técnicas (compensação vetorial de movimento, quadros I / B, etc ...) para melhorar a qualidade e a taxa de compressão.
Por que um funciona mais rápido, o outro caso realmente depende de como o codificador foi implementado e de como seu hardware específico é executado durante a codificação. Alguns codificadores podem usar instruções especiais da CPU (SSE / SSE2, MMX, etc ...) ou usar a aceleração da GPU (eu sei que você provavelmente não, mas eu estou apenas mencionando isso). A compactação JPEG é, em grande parte, dependente da velocidade da CPU e realmente não usa nenhum aprimoramento de conjunto de instruções (para compatibilidade / estabilidade e o fato de que não é realmente necessário). help - veja a entrada do changelog para 16 de novembro de 2006.
Por fim, a menos que você tenha um vídeo de quadro único, o MPEG4 nunca codifica um "quadro único" de cada vez. Ele sempre executa frame look ahead ahead / behind para determinar as melhores maneiras de compactar o quadro atual (o MJPEG faz fazer apenas um quadro por vez). Como tal, é largamente dependente dos dados antes / depois do quadro, não apenas no atual. Isso também ocorre na codificação de passagem única (afinal, ele usa os vetores de movimento, afinal).