@herb_fargus I found that relying on sleep to properly time a 30 second video was getting mixed results so I modified your script a little to crop the video afterward for a more uniform recording length.
It requires that you install ffmpeg beforehand though.
#!/usr/bin/env bash
system="$1"
emulator="$2"
rompath="$3"
launch="$4"
rom_file="${rompath##*/}"
rom="${rom_file%.*}"
mediadir="$HOME/RetroPie/roms/$system/images"
tmpfile="/tmp/$rom-video.mkv"
videofile="$mediadir/$rom-video.mkv"
# Create videos folder in system's rom folder
if [[ ! -d "$mediadir" ]]; then
mkdir -p "$mediadir"
dialog --msgbox "$mediadir created!" 20 60 >/dev/tty
fi
# Launch to record gameplay on RetroArch Systems.
if [[ "$launch" =~ retroarch ]]; then
eval "$launch" "--record \"$tmpfile\"" & sleep 120
killall retroarch
# Crop video to 30 seconds
eval "ffmpeg -y -t 30" "-i \"$tmpfile\"" "-acodec copy \"$videofile\"" &
exit 1
else
dialog --msgbox "Video recording is not supported for this system" 20 60 >/dev/tty
fi