Skip to content

Instantly share code, notes, and snippets.

@megasaturnv
Created June 20, 2022 19:40
Show Gist options
  • Save megasaturnv/7abf42b04539ec125ba5e5108698bab0 to your computer and use it in GitHub Desktop.
Save megasaturnv/7abf42b04539ec125ba5e5108698bab0 to your computer and use it in GitHub Desktop.
An attempt to take any size video file and reduce in size to 8MB or less by re-encoding, using ffmpeg
#!/bin/bash
# 64 000 000 bits / video length = target bitrate
#MAX_VIDEO_SIZE="60000000"
#MAX_VIDEO_SIZE="66108900"
MAX_VIDEO_SIZE="55000000"
#MAX_AUDIO_SIZE="4000000"
MAX_AUDIO_SIZE="1000000"
# Check argument
if [[ "$1" == "" ]]; then
echo "Error: No video file selected"
echo "Usage: $0 <video-file>"
exit
fi
# Check if file is video, get duration if it is
DURATION=$(ffprobe -hide_banner "$1" -show_entries format=duration -v quiet -of csv="p=0")
if [[ "$DURATION" == "" ]]; then
echo Error, ffprobe returned no duration. "$1" is possibly not a video file
exit
fi
echo "$1 is a video file and is $DURATION seconds long"
# Calculate bitrate
#ADJUSTED_DURATION=$(printf "%.0f\n" "$DURATION")
#VIDEO_BITRATE=$(echo $((MAX_VIDEO_SIZE / ADJUSTED_DURATION*60/100)))
#AUDIO_BITRATE=$(echo $((MAX_AUDIO_SIZE / ADJUSTED_DURATION*75/100)))
ADJUSTED_DURATION=$(printf "%.0f00\n" "$DURATION")
VIDEO_BITRATE=$(echo $((MAX_VIDEO_SIZE / ADJUSTED_DURATION)))
VIDEO_BITRATE=$(echo $((VIDEO_BITRATE * 100)))
AUDIO_BITRATE=$(echo $((MAX_AUDIO_SIZE / ADJUSTED_DURATION)))
AUDIO_BITRATE=$(echo $((AUDIO_BITRATE * 100)))
echo "ADJUSTED_DURATION = $ADJUSTED_DURATION"
echo "VIDEO_BITRATE = $VIDEO_BITRATE"
echo "AUDIO_BITRATE = $AUDIO_BITRATE"
#ffmpeg -hide_banner -i "$1" -c:v libvpx-vp9 -b:v "$VIDEO_BITRATE" -vf scale=1280:720 -c:a libopus -b:a "$AUDIO_BITRATE" "$1-compressed.webm"
#ffmpeg -hide_banner -i "$1" -c:v libvpx-vp9 -b:v "$VIDEO_BITRATE" -c:a libopus -b:a "$AUDIO_BITRATE" "$1_8MB.webm"
ffmpeg -hide_banner -i "$1" -c:v libvpx-vp9 -b:v "$VIDEO_BITRATE" -c:a libopus -b:a "$AUDIO_BITRATE" "$1_8MB.mp4"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment