SO - Eu encontrei a resposta para isso há um tempo atrás no stackexchange eu acho, então estou apenas regurgitando informações que encontrei (ou seja, não posso levar crédito!)
#!/bin/bash
# TimeLapse snapshot capture script.
# This script should capture any stills in the incoming Stills directory
time='date '+%Y_%m_%d__%H_%M_%S'';
# Specific for each camera
CameraName=no-spaces-this-will-be-a-filename-eventually
CameraIP='192.168.1.150'
CameraUsername='user'
CameraPassword='password'
# Shouldn't need to be changed!
StorageDirectory=/mnt/storage/Stills
StorageFilename=$CameraName-$time.png
mkdir -p $StorageDirectory/$CameraName;
ffmpeg -rtsp_transport tcp -i rtsp://$CameraUsername:$CameraPassword@$CameraIP:554/mainStream -ss 00:00:01.50 -vframes 1 $StorageDirectory/$CameraName/$StorageFilename -nostats -hide_banner -v 0 -loglevel quiet
Agora - isso funciona EXCELENTE com as câmeras HikVision. Com o que estou fazendo isso.
Para dividi-lo, o -ss 00: 00: 01.50 significa que ele envia um segundo e meio de imagens ENTÃO -vframe 1 captura 1 quadro. Isso permite que o fluxo seja "ajustado" para que você não fique com metade de uma imagem.
Eu corro isso para fazer capturas regulares de câmeras que eu, uma vez por semana, faço em um filme timelapse
#!/bin/bash
# TimeLapse footage creation script.
# This script should take any stills in the incoming Stills directory and
# compile them into a .mp4 file in the Movies directory.
# Then moved the 'processed' stills into a timestamped directory the
# Processed directory.
time='date '+%Y_%m_%d__%H_%M_%S'';
source="/mnt/storage/"
for CameraName in 'ls $source/Stills/'; do
# If the Movies directory for $CameraName doesn't exist, make it.
mkdir -p /mnt/storage/Movies/$CameraName
# Make the movie in the Movie directory using the stills from the Stills directory
ffmpeg -framerate 10/1 -pattern_type glob -i "$source/Stills/$CameraName/*.png" -vf fps=30 -c:v libx264 -pix_fmt yuv420p $source/Movies/$CameraName/$CameraName-$time.mp4
# Make the Processed directory for $CameraName if it doesn't already exist
mkdir -p /mnt/storage/Processed/$CameraName
# Make the timestamped directory for the stills to be moved into
mkdir -p /mnt/storage/Processed/$CameraName/$time
# Move the stills
mv $source/Stills/$CameraName/*.png $source/Processed/$CameraName/$time/
done
O primeiro script está em um cronjob para ser executado a cada 5 minutos. O segundo script está em um cron job para ser executado uma vez por semana.
Espero que ajude.