This one liner using ffprobe
checks each input and returns either OK
or ERROR
, followed by the name of the file.
for i in *; do ffprobe -v error "$i" 2>/dev/null && echo "OK => '$i'" || echo "ERROR => '$i'"; done
I created a fake .mp4
file by running touch video.mp4
to simulate a corrupted video. Result:
OK => 'How To Be A Gardener 1x1 - Know Your Plot.mp4'
OK => 'How To Be A Gardener 1x2 - Understand Plants.mp4'
OK => 'How To Be A Gardener 1x3 - Planting Schemes & Themes.mp4'
OK => 'How To Be A Gardener 1x4 - Practical Planting.mp4'
OK => 'How To Be A Gardener 1x5 - Caring For Your Garden.mp4'
OK => 'How To Be A Gardener 1x6 - Problem Solving.mp4'
OK => 'How To Be A Gardener 1x7 - The Productive Garden.mp4'
OK => 'How To Be A Gardener 1x8 - The Gardening Year.mp4'
ERROR => 'video.mp4'
The actual ffprobe
errors can be shown by removing the 2>/dev/null
redirection:
for i in *; do ffprobe -v error "$i" && echo "OK => '$i'" || echo "ERROR => '$i'"; done
OK => 'How To Be A Gardener 1x1 - Know Your Plot.mp4'
OK => 'How To Be A Gardener 1x2 - Understand Plants.mp4'
OK => 'How To Be A Gardener 1x3 - Planting Schemes & Themes.mp4'
OK => 'How To Be A Gardener 1x4 - Practical Planting.mp4'
OK => 'How To Be A Gardener 1x5 - Caring For Your Garden.mp4'
OK => 'How To Be A Gardener 1x6 - Problem Solving.mp4'
OK => 'How To Be A Gardener 1x7 - The Productive Garden.mp4'
OK => 'How To Be A Gardener 1x8 - The Gardening Year.mp4'
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559de0c58900] moov atom not found
video.mp4: Invalid data found when processing input
ERROR => 'video.mp4'
Adjust the for
loop to check only specific extensions or files:
for i in *.mkv; do ...
for i in *S01E*.mp4; do ...
ffmpeg
to batch scan video files for integrity within a selected directory: github.com/nhershy/CorruptVideoFileInspector