Creare un filmato da una serie di immagini con AVCONV (ex FFMPEG)
Una prerogativa di quasi tutte le webcam IP di fascia madio\bassa è quella di non avere un sistema di salvataggio dello streaming su filmato ma solo di poter salvare le schermate ogni tanto e memorizzarle in un percorso remoto, magari via FTP.
Possiamo convertire queste immagini in un filmato in pochi passaggi tramite il programma avconv ( ex ffmpeg ):
1 |
sudo apt-get install ffmpeg |
Nonostante il nuovo nome del programma sia avconv si installa ancora con il vecchio nome per un discorso di retrocompatibilità, il programma stesso comunque se eseguito come ffmpeg avverte:
1 2 3 4 5 |
$ ffmpeg ffmpeg version 0.8.6-4:0.8.6-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers built on Apr 2 2013 17:00:59 with gcc 4.6.3 *** THIS PROGRAM IS DEPRECATED *** This program is only provided for compatibility and will be removed in a future release. Please use avconv instead. |
Innanzitutto impostiamo la webcam IP di nominare le foto nel formato image_YYYYMMDD_HHMMSS.jpg per avere il riferimento temporale, di scattare una foto ad esempio ogni 3 secondi e di salvarla in un percorso FTP ( ogni dispositivo ha le sue impostazioni ).
Se il percorso FTP remoto punta già alla nostra macchina abbiamo già i file in locale, altrimenti dobbiamo collegarci al server FTP per prelevare le immagini, per questo è possibile utilizzare curlftpfs che ci permette di montare un percorso FTP:
1 |
sudo apt-get install curlftpfs |
Questo script esegue tutte le operazioni di lettura delle immagini e di conversione in filmato mettendo nel nome i riferimenti temporali delle immagini:
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 56 57 58 |
#!/bin/bash # Percorso dove viene montato la cartella FTP remota PATHR="/percorso/locale" # Percorso dove verranno spostate le immagini da processare PATHIMG="/percorso/immagini" # Percorso dove salvare il filmato PATHMOV="/percorso/filmati" # Esegue il mount del percorso FTP curlftpfs ftp://utente:password@server/percorso/remoto $PATHR # Legge tutti i files da processare for fullfile in $PATHR/* do if [[ -f $fullfile ]]; then # Ottengo solo il nome del file escludendo il percorso file=$( /usr/bin/basename "$fullfile" ) array_files[${#array_files[*]}]=$file fi done # Ottiene il primo e l'ultimo file per reperire i riferimenti temporali FILEFROM=${array_files[0]} FILETO=${array_files[${#array_files[@]} - 1]} # Ottiene la parte YYYYMMDD_HHMMSS del primo file FILEEXT=(${FILEFROM//./ }) FILE=${FILEEXT[0]} EXT=${FILEEXT[1]} FILEPARTS=(${FILE//_/ }) FROM="${FILEPARTS[1]}_${FILEPARTS[2]}" # Ottiene la parte YYYYMMDD_HHMMSS dell'ultimo file FILEEXT=(${FILETO//./ }) FILE=${FILEEXT[0]} EXT=${FILEEXT[1]} FILEPARTS=(${FILE//_/ }) TO="${FILEPARTS[1]}_${FILEPARTS[2]}" # Sposta i files e li rinomina con un ID numerico progressivo x=1; for i in "${array_files[@]}"; do counter=$(printf %03d $x); /bin/mv $PATHR/$i $PATHIMG/"$counter".jpg x=$(($x+1)); done # Crea il filmato, il parametro -r 5 indica i FPS da usare, se omesso usa 25 /usr/bin/avconv -f image2 -r 5 -i $PATHIMG/%03d.jpg "${PATHMOV}/movie-${FROM}-${TO}.avi" # Rimuove le immagini /bin/rm $PATHIMG/* # Scollega il percorso remoto umount $PATHR |