[Megoldva]Konzolos megoldás videófelvétel készítésére IP kameráról

Fórumok

Sziasztok!

Van egy FosCam FI8918W IP kamerám, valamint egy Raspberry Pi-m, amire rá van kötve egy 1 Tb-os HDD.

Az udvarról szeretnék éjszaki felvételt csinálni. A kamera szoftvere azt meg tudja csinálni, hogy x másodpercenként feltölt egy képet FTP szerverre. Én azonban videó-felvételt szeretnék.

Van-e olyan program, amivel be tudnám állítani Linuxon, hogy a kamera képét vegye fel, és nem kell hozzá grafikus felület?

Hozzászólások

szerintem siman tudod pl. vlc-n keresztul a streamet tolni egy file-ba

t

Néztem mind kettőt, tud is mind a kettő, de nem nagyon jöttem rá hogyan.

Amit tudok, hogy Windows alatt VLC-ben ha megnyitom a következő címet: http://IPADDRESS/videostream.asf akkor a VLC bekéri a felhasználónevet és jelszót, majd elkezdi a videó lejátszását.

Most az kellene, hogy konzolon hogy tudom megnyitni és videó fájlba menteni. Nézegettem a leírást, de nem igazán jöttem rá eddig.

Valami nem stimmel. Fel kell tenni mpg kódolót? Néztem az apt-get mit talál mpg-re, de nem tudom kell-e valamelyik, és melyik. Vagy más probléma lehet? Azért cvlc-vel indítottam, mert az előző hibaüzenetben benne volt, hogy konzolos felületen cvlc-t használjak.


kisspepe@raspberrypi ~ $ cvlc http://felhasználónév:jelszó@192.168.1.110/videostream.asf --sout="#std{access=file,mux=ps,dst=/media/Munka/Movies/ejszaka.mpg}"

VLC media player 2.0.3 Twoflower (revision 2.0.2-93-g77aa89e)
[0x985fa0] inhibit interface error: Failed to connect to the D-Bus session daemon: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
[0x985fa0] main interface error: no suitable interface module
[0xae99f0] main interface error: no suitable interface module
[0x976908] main libvlc error: interface "globalhotkeys,none" initialization failed
[0xae99f0] dummy interface: using the dummy interface module...
[0xaf80c8] mux_ps mux: Open
[0xaf80c8] main mux error: cannot add this stream
[0xaf91d0] main decoder error: cannot create packetizer output ( ms)
[0xaf80c8] main mux error: cannot add this stream
[0xa0c8d0] main decoder error: cannot create packetizer output (MJPG)
^C[0xaf80c8] mux_ps mux: Close

Rég csináltam ilyet;)
Így?
cvlc --no-disable-screensaver --vout=dummy http://felhasználónév:jelszó@192.168.1.110/videostream.asf --sout="#std{access=file,mux=ps,dst=/media/Munka/Movies/ejszaka.mpg}"

Szerk.: közben még rájöttem hogy a transcode is hiányzik neki

// Happy debugging, suckers
#define true (rand() > 10)

Sajnos még most sem jó.

Amúgy ha Windowsban felhasználónévvel és jelszóval adom meg a VLC-nek a webcímet, akkor is bekéri a felhasználónevet és jelszót.


kisspepe@raspberrypi ~ $ cvlc --no-disable-screensaver --vout=dummy http://felhasználónév:jelszó@192.168.1.110/videostream.asf --sout="#std{access=file,mux=ps,dst=/media/Munka/Movies/ejszaka.mpg}"

VLC media player 2.0.3 Twoflower (revision 2.0.2-93-g77aa89e)
[0x1010038] inhibit interface error: Failed to connect to the D-Bus session daemon: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
[0x1010038] main interface error: no suitable interface module
[0x1178f28] main interface error: no suitable interface module
[0x1000908] main libvlc error: interface "globalhotkeys,none" initialization failed
[0x1178f28] dummy interface: using the dummy interface module...
[0x1181f50] mux_ps mux: Open
[0x1181f50] main mux error: cannot add this stream
[0x1182a20] main decoder error: cannot create packetizer output ( ms)
[0x1181f50] main mux error: cannot add this stream
[0x10969b8] main decoder error: cannot create packetizer output (MJPG)
^C[0x1181f50] mux_ps mux: Close

Feltettem a transcode-ot

Még nem sikerült megoldást találnom. A hibaüzenetből lényegében ami érdekes az a következő:


[0x1181f50] mux_ps mux: Open
[0x1181f50] main mux error: cannot add this stream
[0x1182a20] main decoder error: cannot create packetizer output ( ms)
[0x1181f50] main mux error: cannot add this stream
[0x10969b8] main decoder error: cannot create packetizer output (MJPG)
[0x1181f50] mux_ps mux: Close

A többi hibaüzenet az csak azért van ha jól gondolom, mert nincs grafikus interface.

Próbáltam több parancsot is, amiket a neten találtam leírásokba, de nem működött egyik se.

ffmpeg-el a felvétel már működik. Kicsit mintha szaggatna, de jó lesz. Viszont ha VLC-ben megnyitom a videót, akkor van hangja is, ugyanis a kamerának van mikrofonja. Az ffmpeg felvételen viszont nincs hang.

A felvételt a következő paranccsal indítom:


kisspepe@raspberrypi ~ $ ffmpeg -i http://felhasználónév:jelszó@192.168.1.110/videostream.asf -r 30 -vcodec copy -an /media/Munka/Movies/udvar.mp4

ffmpeg version 0.8.17-6:0.8.17-1+rpi1, Copyright (c) 2000-2014 the Libav developers
built on Mar 25 2015 00:39:58 with gcc 4.6.3
The ffmpeg program is only provided for script compatibility and will be removed
in a future release. It has been deprecated in the Libav project to allow for
incompatible command line syntax improvements in its replacement called avconv
(see Changelog for details). Please use avconv instead.
[asf @ 0x16df660] max_analyze_duration reached
[asf @ 0x16df660] Estimating duration from bitrate, this may be inaccurate

Seems stream 0 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 25.00 (25/1)
Input #0, asf, from 'http://felhasználónév:jelszó@192.168.1.110/videostream.asf':
Duration: N/A, start: 0.000000, bitrate: 32 kb/s
Stream #0.0: Video: mjpeg, yuvj422p, 640x480, 25 tbr, 1k tbn, 1k tbc
Stream #0.1: Audio: adpcm_ima_wav, 8000 Hz, 1 channels, s16, 32 kb/s
File '/media/Munka/Movies/udvar.mp4' already exists. Overwrite ? [y/N] y
Output #0, mp4, to '/media/Munka/Movies/udvar.mp4':
Metadata:
encoder : Lavf53.21.1
Stream #0.0: Video: mjpeg, yuvj422p, 640x480, q=2-31, 1k tbn, 1k tbc
Stream mapping:
Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
frame= 458 fps= 6 q=-1.0 Lsize= 8058kB time=96.68 bitrate= 682.8kbits/s
video:8051kB audio:0kB global headers:0kB muxing overhead 0.093291%
Received signal 2: terminating.

ffmpeg-el jelenleg ott tartok, hogy a következő parancs:


ffmpeg -i input -s 640x480 -r 25 -b:0 1500k -vcodec:0 libx264 -acodec:1 libmp3lame -b:1 256k output.mkv

Elkezdi felvenni a videót és a hangot. A fájl mérete folyamatosan növekszik. Ha Ctrl+c-vel leállítóm (kétszer kell ctrl+c-t nyomni), majd megnézem a videót, a VLC nem tudja megállapítani a videó hosszát, és kb. fél percet játszik le.

Hogy miért arra még nem jöttem rá. Valakinek van ötlete mi lehet a gond?

ejszakai felvetelhez mit hasznalsz?
Pi noir camerat infra ledekkel? Ha igen milyen infra ledeket hasznalsz? Amit en probaltam, az kb. 3 meterre vilagitott wl csak.
Pl. feszket megfigyelni jo, de egy kapubeallot mar nem.

---
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....

Lényegében az alapprobléma megoldódott az ffmpeg-el.

A bash script amivel felveszek a FosCam FI8918W IP kamerámról, a következő:

#!/bin/bash
#Videó felvétel készítése Foscam-al

#Videó fájl neve
name="`date +%Y-%m-%d_%H.%M`.mkv"

#Felvétel helye
RECpath='/media/Munka/Movies/Kamera/'

#Kamera képének elérése
kamera='http://felhasznalonev:jelszo@kamera_ip_cime/videostream.asf'

#Felvétel indítása

ffmpeg -i $kamera -t 20:00:00.000 -s 640x480 -r 30 -vcodec copy -acodec copy $RE

Ez 20 órányi anyagot vesz fel a kameráról. Még kísérleteztem azzal, hogy időbélyeget tegyek a videóra, de ez eddig még nem sikerült a talált leírások alapján.

http://einar.slaskete.net/2011/09/05/adding-time-stamp-overlay-to-video…

nem letezik, hogy FOScam a gyarto neve... :))

Gondolom kellene meg szoftveres mozgaserzekeles is.
Nekem van egy ilyen szkriptem, ami thumbnaileket general egy videobol (majd abbol egy gyorsitott videot), ahol mozgas volt.
Ime:

lamer@lamerorszagban:/mnt/dug/100HDDVR/20150221-1218$ cat extract_short.sh
#! /bin/bash

# F="MINI0820.MOV";
# 20120107-2105--20150221-1218

CWD=$(pwd)
TMP=${CWD%%/}/TMP
mkdir $TMP
rm $TMP/scenes*

((j=1))
for F in MINI*; do
rm $TMP/scenes-0.05a.txt
ffprobe -show_frames -of compact=p=0 -f lavfi \
"movie=$F,select=gt(scene\,0.05)" | \
sed -r 's/.*pkt_pts_time=([0-9.]{8,})\|.*/\1/' >> \
$TMP/scenes-0.05a.txt

FOO=()

while read p; do
FOO+=($p)
done <$TMP/scenes-0.05a.txt

FOO2=()
((k=0))
for i in "${!FOO[@]}"; do
if [ $i -gt 0 ]
then
diff=$(echo "scale=6;a=${FOO[$i]}-${FOO[$k]};if (a > 1.5) 1 else 0" |bc -l)
echo "diff: $diff"
if [ $diff -gt 0 ]
then
((k=i))
FOO2+=(${FOO[$i]})
fi
else
FOO2+=(${FOO[$i]})
fi
done

echo -e "\n\nFOO2\n\n"
for i in "${!FOO2[@]}"; do
printf "%s\t%s\n" "$i" "${FOO2[$i]}"
t_start=$(echo "scale=6;a=${FOO2[$i]}-0.5;if (a > 0) a else 0" | bc)
# I don't know why, but -t 0.2 equals 6 frames. Which is about 1.5sec @5fps
if [ $t_start -eq 0 ]
then
echo "ffmpeg -i $F -vf transpose=1 -vframes 1 -ss $t_start $TMP/pout-$(printf %06d $j)%02d.png" >>$TMP/scenes-0.05b.sh
else
echo "ffmpeg -i $F -vf transpose=1 -vframes 1 -ss $t_start $TMP/pout-$(printf %06d $j)%02d.png" >>$TMP/scenes-0.05b.sh
fi
((j=j+1))
done

done

chmod 755 $TMP/scenes-0.05b.sh
$TMP/scenes-0.05b.sh

((j=0))
cd $TMP
for i in pout*; do
((j=j+1))
mv $i output-$(printf %06d $j).png
done
cd $CWD

ffmpeg -framerate 5 -i $TMP/output-%6d.png -c:v libx264 -r 30 -pix_fmt yuv420p preview.mp4

Anno egy napot elpocsoltem vele, mire osszehoztam.
Nem tul egyertelmu az ffmpeg itt-ott...

Ezt ha negyedorankent uj fajlba mentened (file-20150730-1530.mkv), akkor lehetne naponta egy tomoritette mozgaserzekelost csinalni, es a fajlokat kukazni.

Nalam 720p-ben 2.5 nap fer fel 32GB-ra. Mozgaserzekelessel megszurve 56MB ugyanez a 2.5 nap.

---
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....