I’ve been working on a script to generate .tbn files for my home videos. If I run the script, it only seems to process every other file.
#!/bin/bash
find ~/Movies/Home\ Movies/Canada\ Trip -type f | egrep '\.mp4$|\.avi$|\.mkv$' | while read file ; do
if [ ! -f "${file:0:${#file}-3}tbn" ]; then
# .tbn not found
echo "$file"
ffmpeg -itsoffset -13 -i "$file" -vcodec mjpeg -vframes 1 -s 400x224 -an -f rawvideo "${file:0:${#file}-3}tbn"
fi
done
And here is my data set:
Canada.Trip.S01E01.avi
Canada.Trip.S01E02.avi
Canada.Trip.S01E03.avi
Canada.Trip.S01E04.avi
Canada.Trip.S01E05.avi
Canada.Trip.S01E06.avi
Canada.Trip.S01E07.avi
Canada.Trip.S01E08.avi
Canada.Trip.S01E09.avi
Canada.Trip.S01E10.avi
Canada.Trip.S01E11.avi
Canada.Trip.S01E12.avi
Canada.Trip.S01E13.avi
Canada.Trip.S01E14.mp4
Canada.Trip.S01E15.mp4
Canada.Trip.S01E16.mp4
Canada.Trip.S01E17.mp4
Canada.Trip.S01E18.avi
Canada.Trip.S01E19.mkv
Canada.Trip.S01E20.mp4
So the first time I run it, it generates tbn’s for 1,3,5,7 etc.. The even numbered files fail with vies/Canada Trip/Canada.Trip.S01E16.mp4: No such file or directory (note the truncated start of the file name)
If I run the script again it generates the even numbered files .tbn files. I’ve never used Bash before so I’m finding the whole situation confusing!
ffmpeg reads stdin. Also, you should always use
read -r.