Не силен в создании скриптов. Подскажите, как реализовать функциональность видеорегитратора на ПК. Есть ip-камера. Выдергиваю RTSP-поток при помощи ffmpeg и записываю в файл длительностью 15 минут, но функция работает единоразово:
ffmpeg -t 00:15:00 -i "rtsp://192.168.1.10:554/user=admin&password=&channel=1&stream=0.sdp" -vcodec copy -b:v 64k "/home/anton/video/$(date +%Y-%m-%d+%H-%M-%S).mkv"
Итак, не дождавшись ответа и самостоятельно поломав голову, а также прочитав кучу литературы, я все же смастерил скрипт. Кажется, что можно улучшить, но пока и так сойдет. Значение порога свободного месиа подбирается эксперементально. Жду, предложений по улучшению скрипта.
З.Ы.: Выяснилось, что find срабатывает неверно, после удаления старого файла.
#!/bin/bash
i='2700' #параметр обозначающий порог свободного места на диске в МБ
FREE=$(df -m | grep "/dev/sdb1" | awk '{print $4}')
while [ "$i" -le "$FREE" ] #запись пока есть свободное место на диске
do
echo "Запись нового файла: " $(date +%Y-%m-%d+%H-%M-%S)".mkv"
ffmpeg -t 00:05:00 -i "rtsp://192.168.1.10:554/user=admin&password=&channel=1&stream=0.sdp" -vcodec copy -b:v 64k "/media/anton/48D6-E2E1/$(date +%Y-%m-%d+%H-%M-%S).mkv"
FREE=$(df -m | grep "/dev/sdb1" | awk '{print $4}') #проверим сколько осталось свободного места после записи файла
if [ "$i" -gt "$FREE" ];
then
until [ "$i" -gt "$FREE" ]
do
#ищим самый старый файл, за последние пять дней
var_d=$(find /media/anton/48D6-E2E1 -type f -name '*.mkv' -mtime 5 -daystart | head -n 1 | rm)
echo "Удаляем старый файл: " $var_d
FREE=$(df -m | grep "/dev/sdb1" | awk '{print $4}') #проверим сколько осталось свободного места после удаления
var_d=""
done
fi
done