Here are some links and notes on archiving a UniFi Protect’s footage.
Apparently, the .ubv files just need to be remuxed to .mp4 so they are easily playable. On the UniFi Protect appliances, they have a ubnt_ubvexport and ubnt_ubvinfo binary that can do the remux. You can copy the binary off and run it with QEMU on x86 hardware.
Helpful Links.
https://github.com/danielfernau/unifi-protect-video-downloader
https://github.com/petergeneric/unifi-protect-remux
https://durdle.com/2022/01/22/extract-unifi-protect-video/
RSYNC
We can setup rsync to copy the raw footage off the Unifi Protect appliance. Once we have it locally, we can use the remux tool to convert the files to .mp4 so we can easily view them.
A cool thing about using rsync, is if our copy gets interrupted, we can just rerun the command and it will pick up where it left off without duplicating anything.
The following command is a mouthful. It searches for all the recorded video files for cameras with the MAC addresses specified. (MAC addresses can be found from the web interface), There are only a couple things to change or tweak for the command to work for you.
MAC1 should be the MAC address of camera 1 while MAC2 is the MAC address of the next camera we want to archive.
Change the dst_directory to the archive directory or drive.
And of course we need to change the IP address (10.0.0.1) to the UniFi Protect IP address.
ssh root@10.0.0.1 'find /srv/unifi-protect/video/ \( -name "MAC1*" -o -name "MAC2*" \) -printf %P\\0\\n' | rsync -a -v --exclude="*timelapse*" --files-from=- root@10.0.0.1:/src/unifi-protect/video/ dst_directory/
Here are the details for the commands.
- -printf %P\\0\\n : Don’t print the full path, i.e. “/src/unifi-protect/video/”
- -name “MAC1*” : Search for recording files that start with camera mac1 address.
- -o -name “MAC2*” : Let’s us search for multiple “cameras” add more -o -name “mac3*” etc
- rsync
- -a : archive mode, copies date, permissions etc.
- -v : verbose output. Not needed, but it is nice to see what it is copying.
- –exclude=”*timelapse*” : Exclude timelapse files. Remove this if you want to archive them.
- –files-from=- : Tells rsync to use the standard input for the list of files to download.
- root@10.10.1.1:/src/unifi-protect/video/ : This is the source directory for where the video files are located
- /archive/directory : The path where we are archiving the video footage.
Acquire ubnt_ubvinfo from UDM
Before we can use remux, we need to setup a local copy of ubnt_ubvinfo.
You should be able to use the following scp command to copy the ubnt_ubvinfo or ubnt_ubvexport binary from the UniFi Protect appliance.
scp root@10.0.0.1:/usr/share/unifi-protect/app/node_modules/.bin/ubnt_ubvexport ./
To install on Intel or AMD CPU’s, check out the following section on the unifi-protect-remux page.
https://github.com/petergeneric/unifi-protect-remux#quick-start-for-x86-linux
As a side note, it looks like you can download an old x86 version of ubnt_ubvinfo from archive.org. Use at your own discretion.
wget https://archive.org/download/ubnt_ubvinfo/ubnt_ubvinfo
Install unifi-protect-remux
Install ffmpeg
apt install -y ffmpeg
or
dnf install -y ffmpeg
Now we can download and install remux.
wget https://github.com/petergeneric/unifi-protect-remux/releases/download/v3.0.6/remux-x86_64.tar.gz
tar zxf remux-x86_64.tar.gz
sudo mv remux /usr/bin/
Now we can remux the files.
remux --with-audio=true dst_directory/*.ubv
You will need to script a way to recursively loop through the directories, or just do it manually.