나는감시 장치Linux(busybox 1.32.0)를 실행하면 폴더 구조에서 30초 블록(구성 가능)으로 연속적으로 비디오를 녹화하도록 설정할 수 있습니다.
recording/2022/04/26/15/2022-04-26-15-30-00.mp4
다른 폴더에서는 움직임이 감지될 때만 정지 이미지를 녹화합니다.
stills/2022/04/26/15/2022-04-26-15-30-05.jpg
다음은 모션이 감지되기 전에 비디오를 얻기 위해 고안한 해결 방법입니다.
사용 가능한 공간이 제한되어 있으므로 이동 전 60초 이상, 이동 후 120초 이상부터의 모든 동영상을 삭제하여 각 정지 이미지에 대한 전후 동영상을 일부 유지하고 싶습니다.
정적 이미지의 빈도는 미리 정의된 간격이 아닌 모션 트리거를 기반으로 하기 때문에 5초마다 높을 수 있습니다.
물론, 단일 이미지의 경우 다음과 같이 "찾기"를 실행하세요.적합한옵션이 있지만 더 복잡한 사용 사례는 어떻습니까?
몇 가지 가능한 접근 방식을 고려했지만 진행 방법을 모르겠습니다.
전날의 요소(녹화 및 스틸)를 나열하는 스크립트를 매일 실행하여 변환하는 것에 대해 생각했습니다.파일 이름에서 타임스탬프까지그런 다음 각각의 타임스탬프를 정지 이미지의 타임스탬프와 반복적으로 비교합니다.
여기에는 4개의 목록(파일 이름, 타임스탬프, 녹음 및 스틸)이 포함되는데, 이는 상당히 복잡해 보입니다(아마도 쉘 스크립트에 익숙하지 않기 때문일 것입니다). 이 작업을 수행하는 더 쉬운 방법이 있습니까?
Python 또는 Perl과 관련된 솔루션은 플랫폼에 맞게 컴파일해야 하며 장치의 사용 가능한 공간이 이미 제한되어 있고 Samba 4.x 실행 파일이 더 이상 적합하지 않다는 것은 말할 것도 없고 CPU에 과도한 로드를 가할 가능성이 높습니다.
답변1
시간 개념을 전혀 사용하지 않고 파일 이름에 의존하여 알파벳순으로 정렬하는 것은 시간순으로 정렬하는 것과 같습니다.
첫 번째 단계:
$ busybox sh
$ target="/2022/04/26"
$ busybox find recording/"$target" stills/"$target" -type f | busybox sort -t/ -k6 |\
busybox grep -B2 -A4 'jpg$' | busybox grep 'mp4$' > keep.txt
일정 기간 동안 녹화 및 정지 이미지를 가져옵니다 find
. sort
매개변수는 파일 이름입니다. 이제 사진과 비디오가 시간별로 정렬됩니다. grep
사진의 경우 재생 전후에 줄을 유지하고(원하는 양을 확인하려면 -B, -A 사용) 마지막에 유지하려는 녹음만 유지하세요.
첫 번째 출력의 중간 출력은 grep
다음과 같습니다(처음 2, 마지막 4).
recording/2022/04/26/15/2022-04-26-15-31-30.mp4
recording/2022/04/26/15/2022-04-26-15-32-00.mp4
stills/2022/04/26/15/2022-04-26-15-32-05.jpg
recording/2022/04/26/15/2022-04-26-15-32-30.mp4
recording/2022/04/26/15/2022-04-26-15-33-00.mp4
recording/2022/04/26/15/2022-04-26-15-33-30.mp4
recording/2022/04/26/15/2022-04-26-15-34-00.mp4
--
recording/2022/04/26/15/2022-04-26-15-36-30.mp4
recording/2022/04/26/15/2022-04-26-15-37-00.mp4
stills/2022/04/26/15/2022-04-26-15-37-29.jpg
recording/2022/04/26/15/2022-04-26-15-37-30.mp4
stills/2022/04/26/15/2022-04-26-15-37-34.jpg
recording/2022/04/26/15/2022-04-26-15-38-00.mp4
recording/2022/04/26/15/2022-04-26-15-38-30.mp4
recording/2022/04/26/15/2022-04-26-15-39-00.mp4
recording/2022/04/26/15/2022-04-26-15-39-30.mp4
2단계:
$ busybox find recording/"$target" -type f | busybox grep -vf keep.txt | busybox xargs echo rm
녹음에서 보관하려는 파일을 제외하고 나머지 파일을 삭제하세요.
노트:
파일 이름은 공백이나 특수 문자 없이 단순해야 합니다. 귀하의 비지박스에 더 많은 옵션이 작동할지 모르겠습니다. 명령을 설치하고 실행한 버전 1.34의 경우 -print0
find 및 -z
sort가 있지만 grep이나 xargs는 없습니다 -0
.
또한 목표 기간 동안 모든 녹음이 존재한다고 가정합니다. 그러나 그렇지 않더라도 우리는 유용한 청크를 제거하지 않을 것이며 최악의 경우 더 많은 청크를 유지할 수 있습니다. 예를 들어 정지 이미지 주위에 비디오가 없는 경우 언제 나타나는지에 관계없이 더 가까운 청크를 유지합니다.
답변2
쉘 스크립트를 사용하면 확실히 가능하지만 Python을 사용하면 더 쉽습니다. 디렉토리에 있는 모든 파일을 가져올 수 있는 Python의 os 모듈을 확인해 보세요.
그런 다음 파일 이름을 정규식과 비교하고 원하지 않는 파일을 삭제하기만 하면 됩니다.