How do I create mpegs from jpeg files instead of using ffmpeg?
mencoder "mf://${FOLDER}/*.jpg" -ovc lavc -o motion${DATER}.avi
mencoder "mf://${FOLDER}/*.jpg" -ovc lavc -o motion${DATER}.avi
Имеется:
SK-2000F (EK-500F) PCI плата видео захвата 4 канала 1-25 кадр/сек
Вход для камеры: 4 канала
Аудиовход: 1 канал
Разрешение: 768*576 (PAL), 640*480 (NTSC)
Контроль сигнализация: возможность подключения 16-каналов сигнализации
Операционная система:
1 2 | $ uname -rps FreeBSD 6.4-STABLE amd64 |
Прописываем в /boot/loader.conf:
1 | bktr_load="YES" |
Либо сразу в конфиг ядра:
1 2 3 4 | device bktr device iicbus device iicbb device smbus |
Устанавливаем плату. Перезагружаем компьютер. После загрузки видим:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $ cat /var/run/dmesg.boot |grep bktr bktr0: mem 0x90001000-0x90001fff irq 21 at device 0.0 on pci4 bktr0: [GIANT-LOCKED] bktr0: Warning - card vendor 0x0000 (model 0x0000) unknown. bktr0: Detected a DPL34-1@-@0 at 0x84 bktr0: Intel Smart Video III/VideoLogic Captivator PCI, tuner, dpl3518a dolby. $ pciconf -lv bktr0@pci4:0:0: class=0x040000 card=0x00000000 chip=0x036e109e rev=0x11 hdr=0x00 vendor = 'Conexant (Was: Brooktree Corp)' device = 'Bt878/Fusion 878A Mediastream Controller' class = multimedia subclass = video none1@pci4:0:1: class=0x048000 card=0x00000000 chip=0x0878109e rev=0x11 hdr=0x00 vendor = 'Conexant (Was: Brooktree Corp)' device = '7610144D&REV_02\4&1F7DBC9F&0&09F0 TV Video Capture' class = multimedia |
Устанавливаем.
1 2 3 4 5 | $ wget http://matrix.gatewaynet.com/panix/zoneminder.tar.gz $ tar zxvf zoneminder.tar.gz $ mv zoneminder /usr/ports/multimedia/ $ cd /usr/ports/multimedia/zoneminder $ make install clean |
Если во время сборки возникла ошибка:
1 2 3 | zm_mpeg.cpp: In destructor 'VideoStream::~VideoStream()': zm_mpeg.cpp:281: error: cannot convert 'ByteIOContext**' to 'ByteIOContext*' for argument '1' to 'int url_fclose(ByteIOContext*)' |
то удаляем патч и собираем заново:
1 2 3 | $ cd /usr/ports/multimedia/zoneminder $ rm files/patch-zm_mpeg.cpp $ make reinstall clean |
Если во время работы программы возникает ошибка:
1 | zmwatch[2320]: ERR [Shared memory size conflict in shared_data, expected 312, got 320] |
Удаляем патч и собираем заново:
1 2 3 | $ cd /usr/ports/multimedia/zoneminder $ rm files/patch-SharedMem.pm $ make reinstall clean |
Если во время работы программы возникает ошибка:
1 | WAR [Buffer overrun at index 54, slow down capture, speed up analysis or increase ring buffer size] |
То в настройках камеры надо уменьшить Maximum FPS и Alarm Maximum FPS или увеличить буферы.
Для корректной работы ZoneMinder прописываем в /etc/sysctl.conf:
1 2 3 | kern.ipc.shm_use_phys=1 kern.ipc.shmmax=536870912 kern.ipc.shmall=524288 |
Пояснение по режимам: None (и так понятно), Monitor (только просмотр), Modetect (запись только движения что я использую), Record (постоянная запись), Mocord (тоже что и Record, но дополнительно выделяются те области где было замечено движение). (c) densan
Для захвата видео с помощью ffmpeg поэксперементируйте со следующими командами:
1 2 3 | $ BKTR_DEV=1 ffmpeg -y -tvstd pal -r 12 -s 768x576 -deinterlace -isync -f bktr -i /dev/bktr0 -s 768x576 -vcodec rawvideo raw.avi $ ffmpeg -y -tvstd pal -r 12 -s 640x480 -deinterlace -isync -f bktr -i /dev/bktr0 -s 640x480 -vcodec rawvideo raw.av $ ffmpeg -y -tvstd pal -r 12 -s 640x480 -deinterlace -isync -f bktr -i /dev/bktr0 -s 640x480 -vcodec mpeg4 -vb 800k raw.avi |
Устанавливаем:
1 2 3 4 5 6 7 8 | $ cd /usr/ports/multimedia/motion/ $ make showconfig ===> The following configuration options are available for motion-3.2.11_1: PWCBSD=off "PWCBSD based Webcams (disables BKTR)" BKTR=on "Support for TV Capture cards" LINUXTHREADS=off "Use LinuxThreads" ===> Use 'make config' to modify these settings $ make install clean |
Прописываем в /etc/rc.conf:
1 | motion_enable="YES" |
Взяв за основу /usr/local/etc/motion.conf.sample создаем свой конфиг /usr/local/etc/motion.conf (приведены только изменения):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | daemon on process_id_file /var/run/motion.pid setup_mode off videodevice /dev/bktr0 input 1 norm 0 framerate 5 minimum_frame_time 0 output_all off output_normal on output_motion off quality 75 ffmpeg_cap_new off ffmpeg_cap_motion off target_dir /mnt/share/case/motion/ jpeg_filename %s-%q webcam_port 0 control_port 0 sql_log_image off sql_log_snapshot off sql_log_mpeg off sql_log_timelapse off |
Для дублирования изображения на другой сервер были написаны пару скриптов. На первом сервере list.php, лежащий в каталоге куда плодит картинки motion:
1 | <?php system('ls -r -U *.jpg | head -n 100'); ?> |
На втором сервере, скрипт на shell забирающий недостающий файлы с первого сервера:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #!/bin/sh file="http://example.com/list.php" url="http://example.com/" cd `dirname $0` while test true do if test -f list.php then rm list.php fi if test -f files then rm files fi wget -o /dev/null $file cat list.php | while read line do if ! test -e $line then echo $url$line >> files fi done if test -s files then wget -o /dev/null -c -i files fi if [ -e stop ] then rm stop if test -f list.php then rm list.php fi if test -f files then rm files fi exit 1 fi sleep 1 done |
Ссылки:
Собственно subj. Лежит тут: multimedia/motion. Можно указать либо сразу местонахождение веб-камеры, либо скармливать jpg’шки с нее. На данный момент я использую второй вариант.
Основные настройки motion.conf:
1 2 3 4 5 6 7 8 9 10 11 | daemon on process_id_file /var/run/motion.pid setup_mode off framerate 2 netcam_url file:////mnt/share/vlc/final.jpg target_dir /mnt/share/vlc/motion jpeg_filename %s webcam_port 0 control_port 0 quiet on on_picture_save /path/to/moution_detect.sh |