Compare commits
2 Commits
8119f75279
...
3dd752cb34
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3dd752cb34 | ||
|
|
03cd2dedcc |
33
testdata/ffmpeg.d/cams.sh
vendored
Normal file
33
testdata/ffmpeg.d/cams.sh
vendored
Normal 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
|
||||||
20
testdata/ffmpeg.d/cmd/prune/main.go
vendored
20
testdata/ffmpeg.d/cmd/prune/main.go
vendored
@@ -67,17 +67,29 @@ func Run(ctx context.Context, args []string) error {
|
|||||||
if seriesHasMovement, err := seriesHasMovement(ctx, seriesFiles, movementInterval); err != nil {
|
if seriesHasMovement, err := seriesHasMovement(ctx, seriesFiles, movementInterval); err != nil {
|
||||||
return err
|
return err
|
||||||
} else if seriesHasMovement {
|
} 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")
|
outd := strings.ReplaceAll(cam, "record", "movement")
|
||||||
os.MkdirAll(outd, os.ModePerm)
|
os.MkdirAll(outd, os.ModePerm)
|
||||||
cmd := exec.CommandContext(ctx,
|
cmd := exec.CommandContext(ctx,
|
||||||
"ffmpeg",
|
"ffmpeg",
|
||||||
"-y",
|
"-y",
|
||||||
"-framerate", "3",
|
"-framerate", strconv.Itoa(fps),
|
||||||
"-pattern_type", "glob",
|
"-pattern_type", "glob",
|
||||||
"-i", path.Join(cam, series)+".*.jpg",
|
"-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", strconv.Itoa(fps),
|
||||||
"-r", "3",
|
|
||||||
path.Join(outd, series+".mp4"),
|
path.Join(outd, series+".mp4"),
|
||||||
)
|
)
|
||||||
if out, err := cmd.CombinedOutput(); err != nil {
|
if out, err := cmd.CombinedOutput(); err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user