I’ve been taking my GoPro to Sunday Morning Football (as it is known) for a while now, so I figured I’d automate the process of importing the footage (moving it from microSD) and combining it into one file (GoPro splits recordings by default).
So I have the following script:
#!/bin/bash GOPRO="/tmp/gopro" DATE="$(date +%Y-%m-%d)" VIDEO_BASE="/home/robert/mounts/storage/video/unsorted" VIDEO_DEST="$VIDEO_BASE/$DATE" if [ -e $GOPRO ]; then echo "Copying..." rsync -aP --info=progress2 --remove-source-files --include='*.MP4' $GOPRO/DCIM/100GOPRO/ $VIDEO_DEST/ echo "Joining..." cd $VIDEO_DEST #cd $GOPRO/DCIM/100GOPRO/ for file in `ls *.MP4`; do echo "file '$file'" >> stitch.txt; done #RECORD_DATE="$(ffprobe -v quiet `ls *.MP4 | head -n1` -show_entries stream=index,codec_type:stream_tags=creation_time:format_tags=creation_time | grep creation_time | head -n1| cut -d '=' -f 2| cut -d ' ' -f1)" # new format: RECORD_DATE="$(ffprobe -v quiet `ls *.MP4 | head -n1` -show_entries stream=index,codec_type:stream_tags=creation_time:format_tags=creation_time | grep creation_time | head -n1| cut -d '=' -f 2| cut -d ' ' -f1| cut -d 'T' -f1)" #echo "$RECORD_DATE" ffmpeg -y -f concat -i stitch.txt -c copy $RECORD_DATE.mp4 else echo "GoPro microSD not mounted?" fi
- the microSD is already mounted before running (under
/tmp/gopro) – I had considered automating this, but I figured running a script in response to insertion of removable media was a bad idea; I could add the
mountcommands here, but since the latter requires root privileges I’d rather not and it is quickly recalled from bash history in any case
$VIDEO_BASEdirectory is mounted and created (this is pretty stable)
- the GoPro won’t number directories higher than
101GOPRO)- it possibly would if dealing with eg timelapse, but I am not covering that case
- the GoPro will set creation time correctly; so far it has reset to the default date a few times, probably related to battery
- I want to keep the source files around after creation (the script could remove them)
Given the above the script may seem a bit fragile – and it is definitely tightly coupled to my assumptions – but it’s done the job for a few weeks at least, and the commands it was based on have been pretty stable since I started recording football last year.