Piero V.

Motion: videosorveglianza con Raspberry Pi

Questo weekend io e la mia famiglia abbiamo avuto un impegno, per cui siamo stati tutti via, lasciando la casa vuota.

Allora, ho pensato di sfruttare la mia Raspberry Pi 3, che da tempo era rimasta inutilizzata, per creare un mini sistema di sorveglianza.

Cercando su Internet, ho trovato subito un programmino molto semplice da configurare, ma anche alquanto efficace, chiamato motion.

Si interfaccia con le webcam e può registrare un video qualora rilevi del movimento. Inoltre, può eseguire dei comandi quando il movimento inizia e finisce, permettendo interessanti integrazioni. Infine, mette a disposizione anche uno stream del video stesso tramite HTTP. L’unico neo è che gli stream sono solo video, senza audio, anche qualora la webcam fosse dotata di un microfono.

Visto che usa l’API V4L2 (Video For Linux 2), può funzionare su tutti i sistemi Linux, non solo con la Raspberry. Io stesso, con la mia Raspberry, ho provato sia su Debian, che su Raspbian. Qualora vogliate comprare un single-board computer da adibire allo scopo, la lista dei dispositivi supportati da Armbian potrebbe esservi utile. … [Leggi il resto]

Download video in streaming flash con Python

Un tempo su Linux si poteva trovare un video guardato in streaming direttamente nella directory /tmp.

In seguito, con degli aggiornamenti, flash scaricava il video sempre lì, ma veniva eliminato, anche se fisicamente presente.

Per ritrovarlo bastava trovare il processo dell’implementazione flash del browser, solitamente con ps aux | grep flash e così si trovavano i possibili pid.

Andando a vedere nella directory /proc/pid/fd, si trovavano tanti link, uno di questi a un file tipo /tmp/Flash.... In seguito si poteva trattare quel link come se fosse un file normale, quindi riprodurlo, passarlo a mencoder o ffmpeg etc… Se volevate copiarlo dovevate aspettare che il browser avesse finito di scaricare il video!

In seguito sembrava essere scomparsa anche questa possibilità, ma oggi mi sono accorto che è tornata, quindi vi lascio un breve file in python che permette di trovare automaticamente i vari file:

#!/usr/bin/env python
import os

for pid in os.listdir('/proc'):
	if not pid.isdigit():
		continue

	fdpath = '/proc/' + str(pid) + '/fd'
	try:
		fd = os.listdir(fdpath)
	except:
		continue

	for fid in fd:
		try:
			# Not a link? Raise exception
			fname = os.readlink(fdpath + '/' + fid)
			fname = fname.strip()

			if fname.lower().find('/tmp/flash') == 0:
				fname = fname.split(' ')[0]
				print fdpath + '/' + fid + ' => ' + fname

		except:
			continue

Questo script è stato scritto molto velocemente: cerca di andare in tutti i pid e di trovare i vari link. Se contengono la parola flash stampa il link e la destinazione. So che si potrebbe fare una cosa migliore ma in questo caso preferisco fare lo script kid 😊 .

Lo rilascio nel pubblico dominio.

Comunque se volete scaricare video da siti come youtube ed altri, vi consiglio di non adottare questo metodo ma di usare direttamente youtube-dl, che è fantastico!

Contenuti internet in TV? Non siamo pronti

Tutte le nuove TV ormai possono connettersi ad internet per usufruire di contenuti online.

Anche la mia Sony Bravia può farlo e mi sono accorto che ci sono anche video dimostrativi del 3D, così ne ho approfittato per usare un po’ questa funzionalità, visto che con la TV mi hanno venduto anche il kit.

Alla fine erano solo video dimostrativi di breve durata (inferiore ai 5 minuti), però ogni video andava spesso in caricamento.

Sarà stato che il 3D in teoria c’è solo a 1080p e perciò richiede più banda ma la mia alla fine è una connessione che rientra più o meno nella media italiana e non è possibile utilizzare servizi di streaming così: se fosse stato un film non avrei proprio accettato tutte queste interruzioni.

Unire file video

Capita di voler unire dei file video, ecco come fare.

Useremo il software mencoder, dal pacchetto di mplayer.

Cominciamo con lo scrivere il comando mencoder, quindi mettiamo i nomi dei file da unire in ordine con cui bisogna unirli, quindi verrà fuori:

mencoder miofile1.ext miofile2.ext miofilen.ext

Poi dobbiamo specificare i codec. Se i due file hanno lo stesso codec possiamo fare semplicemente copy sia per l’audio che per il video, altrimenti dobbiamo speficare il codec. In questo caso supponiamo che il codec sia lo stesso (per semplicità, se è diverso vi consiglio di vedere la manpage di mencoder).

mencoder miofile1.ext miofile2.ext miofilen.ext -oac copy -ovc copy

oac serve per l’audio (penso stia per “Output Audio Codec”), mentre ovc è il video (penso sia “Output Video Codec”).

Infine specifichiamo il file di uscita precededuto da -o. Quindi il comando finale sarà:

mencoder miofile1.ext miofile2.ext miofilen.ext -oac copy -ovc copy -o miofile.ext

Come tempo che ci metterà dipende dal vostro computer e dal codec usato.