Skip to content

Instantly share code, notes, and snippets.

@packer-
Created February 25, 2018 14:26
Show Gist options
  • Save packer-/1b6d54fb745be144566301d95f217177 to your computer and use it in GitHub Desktop.
Save packer-/1b6d54fb745be144566301d95f217177 to your computer and use it in GitHub Desktop.
#!/bin/bash
set -ex
demotcpl=$HOME/xonotic/game/git/misc/tools/demotc.pl
userdir="$HOME/xonotic-video/userdir"
sourcedir="$userdir/data/topfrags"
frags="$sourcedir/frags.txt"
watermark="$HOME/xonotic/game/git/misc/logos/icons_png/xonotic_64.png"
if [ ! -d "$userdir/data/demos/topfrags" ]; then
mkdir -p "$userdir/data/demos/topfrags"
fi
if [ ! -f "$frags" ]; then
echo >&2 "'frags' file missing."
exit
fi
# convert for stability
dos2unix $frags
# prepare demo files
while read -r line; do
IFS=" " read demo name t t_min duration <<< $(echo "$line" | awk '{print $1" "$2" "$3" "$4" "$5}')
t_max="$(echo "$t_min + $duration" | bc -l)"
$demotcpl cut "$sourcedir/$demo" "$userdir/data/demos/topfrags/${name}.dem" $t_min $t_max --capture
sed -i 's/cl_capturevideo 0; defer 0.5 "disconnect"/cl_capturevideo 0; defer 0.5 "quit"/g' \
"$userdir/data/demos/topfrags/${name}.dem"
done < $frags
# record demos and convert them
for demo in $(find "$userdir/data/demos/topfrags" -maxdepth 1 -type f -name "*.dem" | sort -n); do
demo="${demo##*/}"
echo "Source: $demo"
echo "Target: ${demo%.dem}.mp4"
if [ -f "$userdir/data/video/${demo%.dem}.mp4" ]; then
echo >&2 "Video output file exists... Skipping"
echo >&2 "- ${demo%.dem}.mp4"
continue
fi
leftright="${demo##*-}"
leftright="${leftright%\.dem}"
if [ "$leftright" == "l" ]; then
config="config_l.cfg"
resolution="1152x864x24"
bitrate="8000k"
else
config="config_r.cfg"
resolution="768x576x24"
bitrate="3500k"
fi
time xinit $HOME/xonotic/game/release/xonotic-linux64-sdl -basedir $HOME/xonotic/game/autobuild \
-simsound -userdir "$userdir" +exec video.cfg +exec "$config" +cl_curl_enabled 1 +cl_capturevideo_number 1 \
+ply "demos/topfrags/$demo" -- /usr/bin/Xvfb :9 -screen 0 "$resolution"
time ffmpeg -threads 3 \
-i "$userdir/data/video/dpvideo001.avi" \
-preset slow -pix_fmt yuv420p -profile:v high -bf 2 -coder 1 -flags +cgop \
-c:v libx264 -r 60 -g 30 -c:a aac -b:a 384k -ar 48000 -movflags +faststart \
-b:v $bitrate \
"$userdir/data/video/${demo%.dem}.mp4"
#-i "$watermark" -filter_complex "[0:v]overlay=W-w-25:25" \
#-crf 20
done
rm -f "$userdir/data/video/dpvideo001.avi"
rm -f "$userdir/data/demos/topfrags/"*.dem
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment