← back to Beverlyhillsvideos
filmgen/trim_existing.sh
33 lines
#!/bin/bash
# One-time reprocess of already-downloaded restaurant films:
# remove any leading silence (talk starts at t=0) and hard-cap to 29s.
# Rebuilds poster + 9:16 vertical from the trimmed file. Idempotent.
cd /Users/macstudio3/Projects/beverlyhillsvideos || exit 1
VD=public/video
for f in "$VD"/*.mp4; do
[ -f "$f" ] || continue
base=$(basename "$f" .mp4)
# detect leading-silence end
sd=$(ffmpeg -i "$f" -af silencedetect=noise=-35dB:d=0.2 -f null - 2>&1)
fs=$(echo "$sd" | grep -o 'silence_start: [-0-9.]*' | head -1 | awk '{print $2}')
fe=$(echo "$sd" | grep -o 'silence_end: [0-9.]*' | head -1 | awk '{print $2}')
start=0
if [ -n "$fs" ] && [ -n "$fe" ]; then
awk "BEGIN{exit !($fs<=0.3)}" && start=$(awk "BEGIN{s=$fe-0.05; if(s<0)s=0; if(s>2.5)s=2.5; print s}")
fi
dur=$(ffprobe -v error -show_entries format=duration -of default=nk=1:nw=1 "$f")
# skip if already <=29s AND no leading gap to trim
if awk "BEGIN{exit !($dur<=29.05 && $start<0.15)}"; then
echo " = $base ${dur}s (already clean, skip)"
continue
fi
tmp="$VD/$base-trim.mp4"
ffmpeg -y -ss "$start" -i "$f" -t 29 -c:v libx264 -preset medium -crf 20 -c:a aac -b:a 128k -movflags +faststart "$tmp" 2>/dev/null \
&& mv -f "$tmp" "$f" \
&& echo " ✓ $base trimmed (start=${start}s -> <=29s)"
# rebuild poster + vertical from trimmed
ffmpeg -y -ss 1 -i "$f" -vframes 1 -q:v 3 "$VD/$base.jpg" 2>/dev/null
ffmpeg -y -i "$f" -filter_complex "[0:v]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,gblur=sigma=26,eq=brightness=-0.10[bg];[0:v]scale=1080:-1[fg];[bg][fg]overlay=(W-w)/2:(H-h)/2,format=yuv420p[v]" -map "[v]" -map 0:a -c:v libx264 -preset medium -crf 21 -c:a aac -b:a 128k "$VD/vertical/$base.mp4" 2>/dev/null
done
echo "done."