LINUX.ORG.RU

Bash, оставить видео с движением

 , ,


0

1

Здравствуйте! У меня есть папка, куда валятся картинки, если есть детекция (наборсимволов.jpg), и папка куда валятся видео файлы (время начала записи ч_м_с.mp4). Суть вот в чем, нужно удалить файлы где нет движения. Пока я дошел до того, что лью в файл время правки (в формате 2017-05-04T14:45), а как проверять что время правки изображения попадает в диапазон времени правки видео, и его создания (не соображу).

Если кто то знает способ оставить в папке только видео где есть движение, напишите пожалуйста

Как вариант: сравнивать не имена файлов, а время создания, или время создания jpg-файла и имя mp4-файла.

foxy_ant ()

1. Преобразуете время создания всех файлов в удобоваримый формат 2. Для каждого видеофайла определяете диапазон времени съемки и сканируете папку с картинками. Если существует картинка в этом диапазоне - видеофайл оставляете, если нет - удаляете

vaddd ★★ ()

как проверять что время правки изображения попадает в диапазон времени правки видео

по времени создания предыдущего (последующего) файла

как можно просканить папку и оставить только видео где есть движение

Можно ffmpeg'ом сделать выборку кадров из видеоряда в виде JPG-файлов, потом утилитой compare из пакета imagemagick их сравнить.

foxy_ant ()

приведи примеры имен файлов которые надо удалять или оставлять,...

bl ★★★ ()

совет такой - используй unixtimestamp формат времени. чтобы определить попадание таймштампа в диапазон.
конвертирование туда-обратно делается примерно так:

date --date="2017-05-04T14:45" +%s
date --date=@1493898300 "+%FT%H:%M"

bl ★★★ ()

ЯННП. Какие-то «видео», «детекции», «движения». При том, что это все вы уже решили, как я понял. Ну или точнее, наверное, это было решено до вас.

А вам осталось что? Понять как *даты сравнивать* что ли?

Даты в формате типа 2017-05-04T14:45, как нетрудно заметить, если подумать, прекрасно сравниваются *лексикографически*, то есть как строки (в Баше — [[ $a < $b ]], [[ $a > $b ]]). Для этого, собственно, такой нечеловеческий формат и был придуман.

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 1)

У тебя jpg шлёпается только на движение, а видео всё время пишется?

Radjah ★★★★★ ()

Не уверен что понял вышепрочтенное, но ЕМНИП motion умеет писать движение в кадре, все остальное может отсекать.

xaTa ★★★ ()

а как проверять что время правки изображения попадает в диапазон времени правки видео

date '+%s'
или переведи любую другую дату в этот же формат.
А потом сможешь использовать <= >=
Crystal_HMR ★★★ ()
Ответ на: комментарий от xaTa

Motion вещь хорошая, но будет грузить проц т.к. камер много. Если прикручивать к нему ffmpeg будут задержки (а мне нужно от них уйти). Поэтому самое збс оставлять файлы с движением уже из папки с полным днём записи, и я пришел пока к единственному решению. Если кто то подкинет способ отсеять файлы где нет движения то збс

Rody2k17 ()
Ответ на: комментарий от Rody2k17

А писать видео только с движением не вариант?

Radjah ★★★★★ ()
Ответ на: комментарий от Radjah

Вариант, но как это сделать без задержек и нагрузки на проц, сейчас ffmpeg берет видео по rtsp в 2mpx и кидает без перекодировки в папку.

Rody2k17 ()
Ответ на: комментарий от Rody2k17

Так тут motion никаким боком не используется что ли?

Radjah ★★★★★ ()
Ответ на: комментарий от Zmicier

В общем вот накидал в файлах date_mod_pic и date_mod_mp4 строки вида 2017-05-19T11:43. Вопрос как правильно расставить done (если получится).

#/bin/bash

for im in `cat date_mod_mp4.txt`
do
        image=" `date --date=${im} +%s` "
done


for na in `cat date_mod_pic.txt | awk 'NR%2==1'`
do
        nach=" `date --date=${na} +%s` "

done

for ko in `cat date_mod_mp4.txt | awk 'NR%2==0'`
do
        kon=" `date --date=${ko} +%s` "
done

ch=$(( $kon - $nach ))
vch=$(( $image - $ch ))

if [ "${vch}" -le "${ch}" ]

then
        echo "`date --date=@"${nach}" "%H_%M.mp4"`" >> motion_files.txt
else
        echo no detection 
fi
Rody2k17 ()
Ответ на: комментарий от Rody2k17

#/bin/bash

#!

for im in `cat date_mod_mp4.txt`

Ошибка номер один при написании программ на ГНУ Баше и языках борн-подобных оболочек вообще.

echo "`date ...`"

echo "`echo "\`date ...\`"`" же!

Zmicier ★★★★★ ()
Ответ на: комментарий от Rody2k17

А если вы хотите, чтобы кто-нибудь оценил решение по существу, то нужна задача в виде, какой позволяет ее решить. Что обычно означает исчерпывающие образцы ввода и результата.

Чаще правда вместо разбора вы получите написанное решение (а часто и не одно), что тоже недурно — можно сопоставить со своим.

Zmicier ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.