#!/usr/bin/env bash # Turns a generated clip into a seamless looping hero background: # the clip plays forward, then backward, so the loop point cannot be seen. # Usage: encode-hero-video.sh [width] set -euo pipefail FFMPEG="${FFMPEG:-ffmpeg}" SRC="$1"; OUT="$2"; W="${3:-1920}" FILTER="[0:v]scale=${W}:-2:flags=lanczos,fps=25,setpts=PTS-STARTPTS,split[a][b];[b]reverse,trim=start_frame=1,setpts=PTS-STARTPTS[r];[a][r]concat=n=2:v=1[v]" "$FFMPEG" -y -i "$SRC" -filter_complex "$FILTER" -map "[v]" -an \ -c:v libx264 -profile:v high -crf 30 -preset slow -pix_fmt yuv420p -movflags +faststart "${OUT}.mp4" "$FFMPEG" -y -i "$SRC" -filter_complex "$FILTER" -map "[v]" -an \ -c:v libvpx-vp9 -crf 40 -b:v 0 -row-mt 1 -deadline good -cpu-used 2 "${OUT}.webm" ls -lh "${OUT}.mp4" "${OUT}.webm"