MJPEG Format Support

Explore the capabilities and limitations of MJPEG (Motion JPEG), a format that uses a sequence of JPEG images to represent video frames. Understand how MJPEG differs from standard JPEG images, how to identify motion JPEGs in various formats like .mov, .mp4, or .jpg, and discover how this format is supported in Picsart's Creative APIs for specific services. Always check the latest API documentation for up-to-date information about MJPEG support.

MJPEG (Motion JPEG) is a video format that compresses each frame as an individual JPEG image. Unlike modern video codecs, which compress multiple frames together to reduce file size, MJPEG maintains high-quality frames at the cost of larger file sizes. This makes MJPEG ideal for certain use cases like video surveillance, mobile video capture, and video editing, where preserving the quality of each frame is essential.

How MJPEG Works

Each frame in MJPEG is treated as a standalone JPEG image. This format does not use inter-frame compression, meaning there is no comparison between frames to reduce redundancy. Instead, every frame is compressed separately, ensuring consistent image quality throughout the video.

However, because MJPEG does not reduce the amount of data between frames, the file sizes tend to be much larger than those created with more advanced codecs like H.264. Nevertheless, MJPEG remains a popular choice in situations where simplicity and frame-by-frame access are prioritized over file size.

MJPEG on Mobile Devices: .mov and .mp4

On mobile devices, such as iPhones and Android phones, MJPEG is often stored within standard video containers like .mov or .mp4. These containers bundle the JPEG frames with additional metadata, such as audio tracks, allowing for smooth playback in media players. MJPEG content can thus be easily used for mobile video processing, though the file size remains larger compared to more compressed formats.

MJPEG with .jpg Extension: Static or Motion?

In rare cases, MJPEG content can also be found with the .jpg extension, which is usually reserved for static JPEG images. This can lead to confusion, as both static images and motion JPEGs may share the same extension. To determine if a .jpg file contains a static image or motion JPEG content, you can:

  • Check File Properties: Look at the metadata or file properties to see if the file contains information related to frame rates or sequences, which would indicate it is an MJPEG file.
  • Use Software Tools: Tools like FFmpeg or ExifTool can help you analyze the file’s encoding to confirm whether it's a static image or part of a motion sequence.
  • Media Player Test: Try opening the .jpg file in a media player. If the file plays like a video, it is likely an MJPEG file.
ffprobe original.jpg
ffprobe version 7.1 Copyright (c) 2007-2024 the FFmpeg developers
  built with Apple clang version 15.0.0 (clang-1500.3.9.4)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/7.1 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags='-Wl,-ld_classic' --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d --enable-libharfbuzz --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-audiotoolbox
  libavutil      59. 39.100 / 59. 39.100
  libavcodec     61. 19.100 / 61. 19.100
  libavformat    61.  7.100 / 61.  7.100
  libavdevice    61.  3.100 / 61.  3.100
  libavfilter    10.  4.100 / 10.  4.100
  libswscale      8.  3.100 /  8.  3.100
  libswresample   5.  3.100 /  5.  3.100
  libpostproc    58.  3.100 / 58.  3.100
Input #0, image2, from 'original.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 499255 kb/s
  Stream #0:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4160x3120 [SAR 96:96 DAR 4:3], 25 fps, 25 tbr, 25 tbn

As we can see in the above example, there is a Stream component that shows the content of the file is a mjpeg video with 25 fps.

Limited Support for MJPEG in Picsart's Creative APIs

While MJPEG is a widely-used format, its support across Picsart’s Creative APIs is currently limited to specific services. Users interested in using MJPEG for image or video processing should always consult the latest API documentation to verify whether MJPEG is supported for the service they intend to use. Depending on the specific API, MJPEG support may vary, and additional constraints or conditions may apply, such as file size limits or processing capabilities.

Why Use MJPEG?

MJPEG is often preferred in scenarios where high-quality, frame-by-frame access is critical. Some of its primary use cases include:

  • Video Surveillance: Capturing consistent quality for every frame without relying on complex compression.
  • Mobile Video Capture: Quick and efficient capture on mobile devices without the overhead of more advanced codecs.
  • Video Editing: Easy access to individual frames simplifies frame-by-frame editing in certain video production workflows.

Conclusion

MJPEG is a reliable format for applications that require consistent frame quality and simplicity of use, particularly in specific sectors like video surveillance or mobile video capture. However, because MJPEG support is limited across Picsart’s Creative APIs, it is crucial to check the specific API service documentation for the latest information on whether MJPEG is supported in your use case.