in="vid/myfile.mp4"
out="/srv/media/vid/myfile_15mb.mp4"
target_mb=15
audio_kbps=64

dur=$(ffprobe -v error -show_entries format=duration -of default=nw=1:nk=1 "$in")
dur=${dur%.*}

# total kbps to hit target size
total_kbps=$(( target_mb*1024*1024*8 / dur / 1000 ))
video_kbps=$(( total_kbps - audio_kbps ))
if [ $video_kbps -lt 200 ]; then video_kbps=200; fi

echo "Duration: ${dur}s  Total: ${total_kbps} kbps  Video: ${video_kbps} kbps  Audio: ${audio_kbps} kbps"

# pass 1
ffmpeg -y -i "$in" -c:v libx264 -preset veryfast -vf "scale='min(854,iw)':-2" -r 24 \
  -b:v ${video_kbps}k -pass 1 -an -f mp4 /dev/null

# pass 2
ffmpeg -y -i "$in" -c:v libx264 -preset veryfast -vf "scale='min(854,iw)':-2" -r 24 \
  -b:v ${video_kbps}k -pass 2 \
  -c:a aac -b:a ${audio_kbps}k -ac 1 \
  -movflags +faststart "$out"