Compare commits

...

2 Commits

Author SHA1 Message Date
Bel LaPointe
3dd752cb34 compute fps 2024-09-19 07:44:48 -04:00
Bel LaPointe
03cd2dedcc pull 2024-09-19 07:40:22 -04:00
2 changed files with 49 additions and 4 deletions

33
testdata/ffmpeg.d/cams.sh vendored Normal file
View File

@@ -0,0 +1,33 @@
#! /bin/bash
set -euo pipefail
cd "$(dirname "$(realpath "$BASH_SOURCE")")"
mkdir -p ./record.d/
for i in 83 98; do
(
while sleep 1; do
mkdir -p ./record.d/$i/
/var/services/homes/squeaky2x3/bin/ffmpeg7 \
-y \
-rtsp_transport udp \
-i rtsp://192.168.0.$i:8554/unicast \
-t 180 \
./record.d/$i/$(date +%Y-%m-%dT%H-%M-%S).%05d.jpg \
< /dev/null &> ./record.d/$i/ffmpeg.log
done
) &
done
cleanup() {
local jobs="$(jobs -p)"
if [ -n "$jobs" ]; then
echo -e "killing $jobs"
kill -9 $jobs
wait
fi
}
trap cleanup EXIT
echo -e "waiting..."
wait

View File

@@ -67,17 +67,29 @@ func Run(ctx context.Context, args []string) error {
if seriesHasMovement, err := seriesHasMovement(ctx, seriesFiles, movementInterval); err != nil {
return err
} else if seriesHasMovement {
log.Println("found movement in", series)
firstFileInfo, err := os.Stat(seriesFiles[0])
if err != nil {
return err
}
lastFileInfo, err := os.Stat(seriesFiles[len(seriesFiles)-1])
if err != nil {
return err
}
durationSeconds := lastFileInfo.ModTime().Sub(firstFileInfo.ModTime()).Seconds()
frames := len(seriesFiles)
fps := int(float64(frames) / durationSeconds)
log.Println("found movement in", series, "over", durationSeconds, "seconds at", fps, "fps")
outd := strings.ReplaceAll(cam, "record", "movement")
os.MkdirAll(outd, os.ModePerm)
cmd := exec.CommandContext(ctx,
"ffmpeg",
"-y",
"-framerate", "3",
"-framerate", strconv.Itoa(fps),
"-pattern_type", "glob",
"-i", path.Join(cam, series)+".*.jpg",
//"-filter_complex", "fps=3,scale=-1:-1:flags=lanczos[x];[x]split[x1][x2];[x1]palettegen[p];[x2][p]paletteuse",
"-r", "3",
"-r", strconv.Itoa(fps),
path.Join(outd, series+".mp4"),
)
if out, err := cmd.CombinedOutput(); err != nil {