ffmpeg – How to find a corrupt frame in an MJPEG file?

I use a script to find corrupted frames with the respective time stamp. As example a mov-container is used, but other container can be easily added :

#!/bin/bash
while IFS= read -r -d $'\0' video
do
    filename=$(basename -- "$video")
    filename="${filename%.*}"    
    ffmpeg -y -i "$video" -vcodec libx264 -crf 51 -preset ultrafast -acodec copy -f mp4 -movflags frag_keyframe+empty_moov+delay_moov pipe:1 >/dev/null 2>"${filename}.txt" 

A txt-file will be generated, same name as the video-file, extension “txt”.
All videos of the directory where you have the script will be analysed.
At the beginning a Terminal will be opened without output (I use Ubuntu-Mate, a script can be started via the file manager, a Terminal will be automatically opened.).
If the video analysis will be complete, the respective name of the txt-file can be seen in the terminal.

Example of an txt-file output :

...
Stream #0:0[0x1]: Video: mjpeg (Baseline) (jpeg / 0x6765706A), yuvj420p(pc, bt470bg/bt709/bt709, progressive), 1280x720 [SAR 1:1 DAR 16:9], 6789 kb/s, 50 fps, 50 tbr, 12800 tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : FFMP
      encoder         : Lavc62.11.100 mjpeg
  Stream #0:1[0x2]: Audio: mp2 (.mp2 / 0x32706D2E), 48000 Hz, stereo, s16p, 256 kb/s, start 0.009000 (default)
...
  Stream #0:1: Audio: mp2 (mp4a / 0x6134706D), 48000 Hz, stereo, s16p, 256 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
frame=  186 fps=0.0 q=53.0 size=       0KiB time=00:00:03.72 bitrate=   0.0kbits/s speed=7.44x elapsed=0:00:00.50    
frame=  408 fps=408 q=55.0 size=     204KiB time=00:00:08.16 bitrate= 205.1kbits/s speed=8.16x elapsed=0:00:01.00    
frame=  638 fps=425 q=54.0 size=     463KiB time=00:00:12.76 bitrate= 297.0kbits/s speed= 8.5x elapsed=0:00:01.50    
frame=  865 fps=432 q=52.0 size=     736KiB time=00:00:17.30 bitrate= 348.7kbits/s speed=8.65x elapsed=0:00:02.00    
frame= 1096 fps=438 q=53.0 size=    1025KiB time=00:00:21.92 bitrate= 383.0kbits/s speed=8.77x elapsed=0:00:02.50    
...

If no error, the respective output as seen above.

Read more here: Source link