Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: tamrock - 04.11.17 - klo:23.39
-
Iltaa,
Yrityksenäni oli saada ip-kamerasta kaapattua kuvia ja ihmeen kaupalla sainkin asian toimimaan kohtalaisesti seuraavalla koodilla:
avconv -y -loglevel debug -stimeout 2 -rtsp_transport tcp -i "rtsp://username:password@192.168.1.64:554/1" -q:v 9 -s 1920x1080 -vframes 1 -strftime 1 "%Y-%m-%d_%H-%M-%S.png"
Nyt kysyisinkin, että kuinka saan tuon kaapatun kuvan tallennettua suoraan haluamaani kansioon? (esim /home/kuvat/ipkamera) Nyt tuolla komennolla kuvat tallentuvat omaan kotikansioon.
Toinen kysymys kuuluu, miten saan tuon kaappauksen ajastettua crontabilla? Esimerkiksi 10 min välein...
-
en ole varma mutta luulen että tuo kansion valinta tapahtuu laittamalla kansion polku tiedostonimen eteen eli näin:
"/home/kuvat/ipkamera/%Y-%m-%d_%H-%M-%S.png"
tuo ajastus puolestaan tapahtuu näin:
crontab -e
sitten kirjoitat sinne
*/10 * * * * avconv -y -loglevel debug -stimeout 2 -rtsp_transport tcp -i "rtsp://username:password@192.168.1.64:554/1" -q:v 9 -s 1920x1080 -vframes 1 -strftime 1 "/home/kuvat/ipkamera/%Y-%m-%d_%H-%M-%S.png"
olettaen siis että tuo kansion valinta toimii noin kuten arvelen... mutta kokeilemalla se selviää
-
Kiitos neuvosta. Nyt kuvat ohjautuu kansioon mihin haluankin. Tuo ajastus ei vaan jostain syystä toimi. Kokeilin myös näin:
* * * * * /usr/bin/avconv -y -loglevel debug -stimeout 2 -rtsp_transport tcp -i "rtsp://username:password@192.168.1.64:554/1" -q:v 9 -s 1920x1080 -vframes 1 -strftime 1 "/home/tarmo/cam/%Y-%m-%d_%H-%M-%S.png" , mutta kansioon ei kuvia ilmesty...
-
onhan tuo komento yhdellä rivillä?
-
Kyllä on yhdessä pötkössä... :D
-
ilmeisesti cronissa pitää olla kevoviiva ennen % merkkiä, eli koitapa laittaa \%Y jne tuohon tiedoston nimeen
eli näin:
"/home/kuvat/ipkamera/\%Y-\%m-\%d_\%H-\%M-\%S.png"
-
Nyt lisäsin tämmöiset rimpsut crontabiin eikä toimi vieläkään :-\
* * * * * avconv -y -loglevel debug -stimeout 2 -rtsp_transport tcp -i "rtsp://username:password@192.168.1.64:554/1" -q:v 9 -s 1920x1080 -vframes 1 -strftime 1 "/home/tarmo/cam/\%Y-%m-%d_%H-%M-%S.png"
* * * * * /usr/bin/avconv -y -loglevel debug -stimeout 2 -rtsp_transport tcp -i "rtsp://username:password@192.168.1.64:554/1" -q:v 9 -s 1920x1080 -vframes 1 -strftime 1 "/home/tarmo/cam/\%Y-%m-%d_%H-%M-%S.png"
Eli muuten samoja, paitsi toisen alussa on: /usr/bin/ ...liekkö sillä yleensä merkitystä?
-
pakko myöntää että oma tietämys alkaa loppua, ei ole itsellenikään kovin tuttu tuo crontab :D
mutta yksi keino tuli vielä mieleen. josko yrittäisi tehdä siitä skriptin jos tuossa cronissa on joku syntaksivirhe...
eli
#!/bin/sh
/usr/bin/avconv -y -loglevel debug -stimeout 2 -rtsp_transport tcp -i "rtsp://username:password@192.168.1.64:554/1" -q:v 9 -s 1920x1080 -vframes 1 -strftime 1 "/home/tarmo/cam/%Y-%m-%d_%H-%M-%S.png"
tallenna se kotikansioosi vaikka nimellä ipkamera tai millä haluatkaan
sitten anna suoritusoikeudet
chmod a+x ipkamera
kopioi /usr/local/bin kansioon
sudo cp ipkamera /usr/local/bin
ja lopuksi sitten vaihdat crontabiin komennon tilalle /usr/local/bin/ipkamera
-
Nyt lisäsin tämmöiset rimpsut crontabiin eikä toimi vieläkään :-\
* * * * * avconv -y -loglevel debug -stimeout 2 -rtsp_transport tcp -i "rtsp://username:password@192.168.1.64:554/1" -q:v 9 -s 1920x1080 -vframes 1 -strftime 1 "/home/tarmo/cam/\%Y-%m-%d_%H-%M-%S.png"
* * * * * /usr/bin/avconv -y -loglevel debug -stimeout 2 -rtsp_transport tcp -i "rtsp://username:password@192.168.1.64:554/1" -q:v 9 -s 1920x1080 -vframes 1 -strftime 1 "/home/tarmo/cam/\%Y-%m-%d_%H-%M-%S.png"
Eli muuten samoja, paitsi toisen alussa on: /usr/bin/ ...liekkö sillä yleensä merkitystä?
No ainakin sellainen huomio, että olet laittanut \-merkin vain ensimmäisen %-merkin eteen...se pitää laittaa kaikkien eteen: \%Y-\%m-\%d_\%H-\%M-\%S.png
-
Eli muuten samoja, paitsi toisen alussa on: /usr/bin/ ...liekkö sillä yleensä merkitystä?
On koska cron ajoissa ei käytetä ympäristömuuttujia niin ainoa tapa löytää ajettavat ohjelmat on käyttää absoluuttisia hakemistopolkuja crontab:ssa.
-
Eli muuten samoja, paitsi toisen alussa on: /usr/bin/ ...liekkö sillä yleensä merkitystä?
On koska cron ajoissa ei käytetä ympäristömuuttujia niin ainoa tapa löytää ajettavat ohjelmat on käyttää absoluuttisia hakemistopolkuja crontab:ssa.
Tämä vähän riippuu asetuksista, esim. /etc/crontab:issa asetetaan $PATH muuttuja käsittääkseni oletuksenakin (joka tapauksessa sellaisen voi ainakin halutessaan asettaa).
Sinänsä sillä kumpaa käyttää tosiaan on toisinaan merkitystä (cronin $PATH saattaa poiketa normaalisti käytössä olevasta, tai joskus voi olla eri versioita ohjelmasta asennettuna eri paikkoihin esim. /usr/local/bin, ja tällöin ajettava ohjelma riippuu paitsi järjestyksessä polussa, myös siitä käytetäänkö absoluuttista polkua vai ei)
-
No niin, nyt alkoi crontabbi totella komentoja. Eli se vaati ne kenoviivat jokaisen %-merkin eteen.
Eli näin:
* * * * * /usr/bin/avconv -y -loglevel debug -stimeout 2 -rtsp_transport tcp -i "rtsp://username:password@192.168.1.64:554/1" -q:v 9 -s 1920x1080 -vframes 1 -strftime 1 "/home/tarmo/cam/\%Y-\%m-\%d_\%H-\%M-\%S.png"
Mitenkäs tuota komentoa pitäisi muuttaa jos haluaisin tallennettavan tiedoston nimeksi päivämäärän sijaan esim. kuva_0001,kuva_0002,kuva_0003 jne?
Kiitokset kaikille tähän mennessä auttaneille :)
-
No niin, nyt alkoi crontabbi totella komentoja. Eli se vaati ne kenoviivat jokaisen %-merkin eteen.
Eli näin:
* * * * * /usr/bin/avconv -y -loglevel debug -stimeout 2 -rtsp_transport tcp -i "rtsp://username:password@192.168.1.64:554/1" -q:v 9 -s 1920x1080 -vframes 1 -strftime 1 "/home/tarmo/cam/\%Y-\%m-\%d_\%H-\%M-\%S.png"
Tuo ajetaan nyt joka minuutti, jos halusit sen 10min välin, niin kannattaa vaihtaa alkuun "*/10 * * * *" takaisin
Mitenkäs tuota komentoa pitäisi muuttaa jos haluaisin tallennettavan tiedoston nimeksi päivämäärän sijaan esim. kuva_0001,kuva_0002,kuva_0003 jne?
Suosittelisin käyttämään erillistä skriptiä, jos haluat jotain tämänkaltaista (rs antoikin jo ohjeita erillisen skriptin tekoon). Varmaan voidaan ehdotella toteutustapoja, jos päädyt tällaiseen ratkaisuun...mutta ainakin omasta mielestä kuvien jälkikäteinen tarkastelu/etsintä on luultavasti helpompaa päiväyksen kuin juoksevan numeroinnin perusteella.
-
Olet oikeassa, päivämäärän mukaan nimeäminen on tässä tilanteessa näppärintä. Kiitos avusta!
Mitä muuten tässä komennossa nämä lihavoidulla tekstillä olevat komennot tarkalleen ottaen tekevät?
avconv -y -loglevel debug -stimeout 2 -rtsp_transport tcp -i "rtsp://username:password@192.168.1.64:554/1" -q:v 9 -s 1920x1080 -vframes 1 -strftime 1 "/home/kuvat/ipkamera/%Y-%m-%d_%H-%M-%S.png"
-
-y meinaa että se ylikirjoittaa tarvittaessa samannimisen tiedoston mitään kysymättä
-loglevel debug meinaa että se näyttää kaiken mahdollisen logitiedon
-s meinaa kokoa eli resoluutiota
-q:v taitaa olla pakkauksen taso
-strftime liittynee tuohon että tiedostonimessä voi käyttää järjestelmän kellonaikoja ja päivämääriä
-
Kiitos tiedosta, niin vaan taas tuli opittua uutta :)
Mutta taas tuli mieleen uusi kysymys joka kuuluu näin:
Miten voin määrittää kansiolle (esim. /home/tarmo/cam/) maksimi koon, eli jos siihen kertyy vaikka 5 gb kuvia niin se alkaisi poistamaan vanhimpia kuvia uusien tieltä eikä kansion koko kasvaisi esim tuota 5 gb suuremmaksi vai onko kyseinen ominaisuus edes mahdollista toteuttaa? ???
-
https://askubuntu.com/questions/176480/limit-the-size-of-a-directory-by-deleting-old-files
tossa näyttää olevan samasta aiheesta
-
Kiitos jälleen kerran! :)
-
tuolta löytyvän skriptin kun muuttaa omaan käyttöönsä sopivaksi (hakemisto ainakin) ja laittaa crontabiin sopivalla aikavälillä pyörimään niin pitäisi toimia. itsellä ei ole kokemusta tuosta skriptistä joten en uskalla luvata mitään sen toimivuudesta, joku fiksumpi varmaan ymmärtää paremmin mitä se tekee ;D