The script below uses GhostScript PostScript processor to downsample and compress background images in the scanned PDF file, preserving an existing OCR layer. It is partially based on StackOverflow question 77521044 and implemented in Bash.
#!/usr/bin/env bash
INFILE="${1}"
OUTFILE=$(echo -e "${INFILE}" | sed -e 's/\.\(PDF\|pdf\)$/\.compressed\.pdf/')
gs -sOutputFile="${OUTFILE}" \
-sDEVICE=pdfwrite \
-dCompatibilityLevel=1.4 \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleColorImages=true -dColorImageDownsampleType=/Bicubic \
-dColorImageResolution=150 -dColorImageDownsampleThreshold=1.5 \
-dAutoFilterColorImages=false -dColorImageFilter=/DCTEncode \
-dPassThroughJPEGImages=false \
-dDownsampleGrayImages=true -dGrayImageDownsampleType=/Bicubic \
-dGrayImageResolution=150 -dGrayImageDownsampleThreshold=1.5 \
-dAutoFilterGrayImages=false -dGrayImageFilter=/DCTEncode \
-dDownsampleMonoImages=true -dMonoImageDownsampleType=/Subsample \
-dMonoImageResolution=300 -dMonoImageDownsampleThreshold=1.5 \
-dDetectDuplicateImages=true \
-dPreserveMarkedContent=true \
-dEmbedAllFonts=true \
-dSubsetFonts=true \
-dNOPAUSE \
-dBATCH \
-dNEWPDF=true \
-dSAFER \
-dPDFSETTINGS=/ebook "${INFILE}"