# CPU 和 GPU 中的 MJPEG 视频编解码

Source: [https://docs.qualcomm.com/doc/80-70015-50SC/topic/mjpeg-video-decode-and-encode-in-cpu-and-gpu.html](https://docs.qualcomm.com/doc/80-70015-50SC/topic/mjpeg-video-decode-and-encode-in-cpu-and-gpu.html)

## camerasrc → jpegenc → 文件

    gst-launch-1.0 -e --gst-debug=2 qtiqmmfsrc name=camsrc ! video/x-raw,format=NV12,width=1920,height=1080,framerate=120/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg.aviCopy to clipboard

    gst-launch-1.0 -e --gst-debug=fpsdisplaysink:6 qtiqmmfsrc name=camsrc ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! jpegenc ! avimux ! queue ! fpsdisplaysink name=disp1 fps-update-interval=1000 signal-fps-measurements=true text-overlay=false video-sink="filesink location=/opt/mjpeg1080p30.avi"Copy to clipboard

## AVI 文件 → jpegdec → Waylandsink

    gst-launch-1.0 -v filesrc location=/opt/mjpeg.avi ! avidemux !  queue ! jpegdec ! waylandsinkCopy to clipboard

## YUV 文件 1920x1080@30 → 16 x jpegenc → AVI 文件

    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg1.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg2.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg3.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg4.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg5.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg6.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg7.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg8.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg9.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg10.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg11.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg12.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg13.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg14.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg15.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg16.aviCopy to clipboard

## YUV 文件 1920x1080@30 → 12 x jpegenc → AVI 文件和 1920x1080@30 AVI → 12 x jpegdec &gt; JPEG

    gst-launch-1.0 -v filesrc location=/opt/mjpeg.avi ! avidemux !  queue ! jpegdec ! multifilesink location=/opt/mjpeg1_%d.jpeg max-files=1 &
    gst-launch-1.0 -v filesrc location=/opt/mjpeg.avi ! avidemux !  queue ! jpegdec ! multifilesink location=/opt/mjpeg2_%d.jpeg max-files=1 &
    gst-launch-1.0 -v filesrc location=/opt/mjpeg.avi ! avidemux !  queue ! jpegdec ! multifilesink location=/opt/mjpeg3_%d.jpeg max-files=1 &
    gst-launch-1.0 -v filesrc location=/opt/mjpeg.avi ! avidemux !  queue ! jpegdec ! multifilesink location=/opt/mjpeg4_%d.jpeg max-files=1 &
    gst-launch-1.0 -v filesrc location=/opt/mjpeg.avi ! avidemux !  queue ! jpegdec ! multifilesink location=/opt/mjpeg5_%d.jpeg max-files=1 &
    gst-launch-1.0 -v filesrc location=/opt/mjpeg.avi ! avidemux !  queue ! jpegdec ! multifilesink location=/opt/mjpeg6_%d.jpeg max-files=1 &
    gst-launch-1.0 -v filesrc location=/opt/mjpeg.avi ! avidemux !  queue ! jpegdec ! multifilesink location=/opt/mjpeg7_%d.jpeg max-files=1 &
    gst-launch-1.0 -v filesrc location=/opt/mjpeg.avi ! avidemux !  queue ! jpegdec ! multifilesink location=/opt/mjpeg8_%d.jpeg max-files=1 &
    gst-launch-1.0 -v filesrc location=/opt/mjpeg.avi ! avidemux !  queue ! jpegdec ! multifilesink location=/opt/mjpeg9_%d.jpeg max-files=1 &
    gst-launch-1.0 -v filesrc location=/opt/mjpeg.avi ! avidemux !  queue ! jpegdec ! multifilesink location=/opt/mjpeg10_%d.jpeg max-files=1 &
    gst-launch-1.0 -v filesrc location=/opt/mjpeg.avi ! avidemux !  queue ! jpegdec ! multifilesink location=/opt/mjpeg11_%d.jpeg max-files=1 &
    gst-launch-1.0 -v filesrc location=/opt/mjpeg.avi ! avidemux !  queue ! jpegdec ! multifilesink location=/opt/mjpeg12_%d.jpeg max-files=1 &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg1.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg2.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg3.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg4.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg5.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg6.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg7.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg8.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg9.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg10.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg11.avi &
    gst-launch-1.0 -e filesrc location=/opt/1920_1080.yuv ! videoparse width=1920 height=1080 format=nv12 framerate=2/1 ! jpegenc ! avimux ! filesink location=/opt/mjpeg12.aviCopy to clipboard

## camerasrc 1920x1080@30 → 8x jpegenc → 文件

    gst-launch-1.0 -e --gst-debug=2 qtiqmmfsrc name=camsrc ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! tee name=t1 ! queue ! jpegenc ! avimux ! filesink location=/opt/mjpeg1.avi \
    t1. ! queue ! jpegenc ! avimux ! filesink location=/opt/mjpeg2.avi \
    t1. ! queue ! jpegenc ! avimux ! filesink location=/opt/mjpeg3.avi \
    t1. ! queue ! jpegenc ! avimux ! filesink location=/opt/mjpeg4.avi \
    t1. ! queue ! jpegenc ! avimux ! filesink location=/opt/mjpeg5.avi \
    t1. ! queue ! jpegenc ! avimux ! filesink location=/opt/mjpeg6.avi \
    t1. ! queue ! jpegenc ! avimux ! filesink location=/opt/mjpeg7.avi \
    t1. ! queue ! jpegenc ! avimux ! filesink location=/opt/mjpeg8.aviCopy to clipboard

## camerasrc 1920x1080@30 → 4x jpegenc → 文件和 1920x1080@30 AVI 文件 → 4xjpegdec → JPEG

    gst-launch-1.0 -e -v filesrc location=/opt/mjpeg.avi ! avidemux ! tee name=t2 ! queue ! jpegdec ! multifilesink location=/opt/mjpeg1_%d.jpeg max-files=1 \
    t2. !  queue ! jpegdec ! multifilesink location=/opt/mjpeg2_%d.jpeg max-files=1 \
    t2. !  queue ! jpegdec ! multifilesink location=/opt/mjpeg3_%d.jpeg max-files=1 \
    t2. !  queue ! jpegdec ! multifilesink location=/opt/mjpeg4_%d.jpeg max-files=1 \
    qtiqmmfsrc name=camsrc ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! tee name=t1 ! queue ! jpegenc ! avimux ! filesink location=/opt/mjpeg1.avi \
    t1. ! queue ! jpegenc ! avimux ! filesink location=/opt/mjpeg2.avi \
    t1. ! queue ! jpegenc ! avimux ! filesink location=/opt/mjpeg3.avi \
    t1. ! queue ! jpegenc ! avimux ! filesink location=/opt/mjpeg4.aviCopy to clipboard

## camerasrc 1920x1080@60 → 2x jpegenc → 文件和 1920x1080@60 AVI 文件 → 2xjpegdec → JPEG

    gst-launch-1.0 -e -v filesrc location=/opt/mjpeg.avi ! avidemux ! tee name=t2 ! queue ! jpegdec ! multifilesink location=/opt/mjpeg1_%d.jpeg max-files=1 \
    t2. !  queue ! jpegdec ! multifilesink location=/opt/mjpeg2_%d.jpeg max-files=1 \
    qtiqmmfsrc name=camsrc ! video/x-raw,format=NV12,width=1920,height=1080,framerate=60/1 ! tee name=t1 ! queue ! jpegenc ! avimux ! filesink location=/opt/mjpeg1.avi \
    t1. ! queue ! jpegenc ! avimux ! filesink location=/opt/mjpeg2.aviCopy to clipboard

## camerasrc 1920x1080@60 → 4x jpegenc → 文件

    gst-launch-1.0 -e --gst-debug=2 qtiqmmfsrc name=camsrc ! video/x-raw,format=NV12,width=1920,height=1080,framerate=60/1 ! tee name=t1 ! queue ! jpegenc ! avimux ! filesink location=/opt/mjpeg1.avi \
    t1. ! queue ! jpegenc ! avimux ! filesink location=/opt/mjpeg2.avi \
    t1. ! queue ! jpegenc ! avimux ! filesink location=/opt/mjpeg3.avi \
    t1. ! queue ! jpegenc ! avimux ! filesink location=/opt/mjpeg4.aviCopy to clipboard

**Parent Topic:** [摄像头和视频编码](https://docs.qualcomm.com/doc/80-70015-50SC/topic/camera-and-video-encode.html)

Last Published: Nov 11, 2025

[Previous Topic
帧内智能 codec（H.264 和 H.265）](https://docs.qualcomm.com/bundle/publicresource/80-70015-50SC/topics/intra-frame-smart-codec.md) [Next Topic
启用 24 个端到端并发视频会话](https://docs.qualcomm.com/bundle/publicresource/80-70015-50SC/topics/enable-end-to-end-24-concurrent-video-sessions-decode-encode.md)