Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Make previews for a folder of .mov or .mp4 files that MacOS can open. Normalizes to 480x270 at 30fps and 96kbps audio.
#!/bin/bash
# Make previews for a folder of .mov or .mp4 files that MacOS can open.
# Normalizes to 480x270 at 30fps and 96kbps audio.
current_file=none
# Catch ctrl-c and stop the whole batch, otherwise ctrl-c just stops ffmpeg and the loop continues
trap ctrl_c INT
function ctrl_c() {
echo "** aborting $current_file"
if [ -e "$current_file.preview.mp4" ]
then
# Delete the current file since ffmpeg will have left it there after being interrupted
rm "$current_file.preview.mp4"
fi
exit
}
for filename in `ls *.{MOV,MP4,mov,mp4}`
do
# Check if the preview file already exists
if [ -e "$filename.preview.mp4" ]
then
echo "$filename.preview.mp4 already exists"
else
# Don't convert .preview.mp4 files
if [[ $filename != *.preview.mp4 ]]
then
current_file=$filename
# ffmpeg flags
# -c:v libx264 -- encode using h264
# -b:a 96k -- set audio to 96kbps
# -s 480x270 -- scale video to 480x270 (1/4 of 1920x1080)
# -r 30 -- set frame rate to 30fps
# -movflags faststart -- move the index to the beginning of the file
# -pix_fmt yuv420p -- this is needed for the resulting video to be understood by some apps like Quicktime and Quick Look
ffmpeg -i $filename -c:v libx264 -b:a 96k -s 480x270 -r 30 -movflags faststart -pix_fmt yuv420p $filename.preview.mp4
fi
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.