init repo Android_Timelapse
This commit is contained in:
commit
b67a2d3431
79
NOTAS.md
Normal file
79
NOTAS.md
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
# TimeLapse
|
||||||
|
|
||||||
|
- Registro fotografico cada X tiempo, durante Y tiempo o Z cantidad de fotografias
|
||||||
|
|
||||||
|
### Fecha/Tiempo
|
||||||
|
|
||||||
|
**Formato:** `Dia-Mes-Año_hora:minutos`
|
||||||
|
```bash
|
||||||
|
FECHA = $(date +'%d-%h-%Y_%H:%M')
|
||||||
|
1-Feb-2022_02:12
|
||||||
|
```
|
||||||
|
|
||||||
|
**Diferencia** de fechas en segundos
|
||||||
|
```bash
|
||||||
|
LA_FECHA=$(( ($(date -d "2022-01-27" "+%s") - $(date -d "2022-01-22" "+%s") )))
|
||||||
|
```
|
||||||
|
|
||||||
|
**Agregar** segundos a **LA_FECHA**
|
||||||
|
```bash
|
||||||
|
LA_FECHA2=$((LA_FECHA+800))
|
||||||
|
echo ${LA_FECHA2}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Equivalencias** en segundos:
|
||||||
|
Otro | Segundos
|
||||||
|
-|-
|
||||||
|
1 Año | 31536000
|
||||||
|
1 Mes | 18144000
|
||||||
|
1 Semana | 604800
|
||||||
|
1 Dia | 86400
|
||||||
|
1 Hora | 3600
|
||||||
|
20 Min | 1200
|
||||||
|
15 Min | 900
|
||||||
|
10 Min | 600
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
> **Necesito tiempo(s)**
|
||||||
|
> Para no depender de función sleep para los intervalos,
|
||||||
|
> ya que el tiempo de ejecucion de las ordenes es variable
|
||||||
|
|
||||||
|
|
||||||
|
Variables de tiempo | Poblada por
|
||||||
|
-|-
|
||||||
|
Tiempo Actual | `$(date -d today +%s")` int: segundos
|
||||||
|
Intervalo | Argumento (int: segundos)
|
||||||
|
Duración intervalo, ó <br> Cantidad de fotos | Argumento (int: segundos o cantidad)
|
||||||
|
Tiempo Ultimo Lapso, <br> (post-ejecucion) | `$(date -d today +%s")` int: segundos
|
||||||
|
|
||||||
|
|
||||||
|
ej. Fotos cada 1 hora, durante medio día:
|
||||||
|
```bash
|
||||||
|
# Limite por cantidad de fotos
|
||||||
|
./foto.sh --int=3600 --cant=12
|
||||||
|
|
||||||
|
# Limite por tiempo
|
||||||
|
./foto.sh --int=3600 --fin=43200
|
||||||
|
```
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
Diferencia de tiempo entre intervalos:
|
||||||
|
```c
|
||||||
|
algún loop {
|
||||||
|
t_actual = "tiempo actual en segundos";
|
||||||
|
if (t_actual - t_loop_previo) >= intervalo_loop {
|
||||||
|
# alguna acción...
|
||||||
|
t_loop_previo = t_actual;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Video
|
||||||
|
|
||||||
|
- Crea video con las imagenes (en orden temporal)
|
||||||
|
```bash
|
||||||
|
ffmpeg -framerate 5 -pattern_type glob -i "*.jpeg" -c:v libx264 -crf 0 output.mp4
|
||||||
|
```
|
||||||
|
|
87
README.md
Normal file
87
README.md
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
# Timelapse
|
||||||
|
|
||||||
|
Utilidad para capturar fotografias a intervalos con un dispositivo Andriod,
|
||||||
|
utilizando [Termux](https://termux.com/), ssh, mogrify y rsync.
|
||||||
|
|
||||||
|
### 2 scripts:
|
||||||
|
* **timelapse_master** (opcional):
|
||||||
|
- Controla el script timelapse_host por medio de **ssh**.
|
||||||
|
- Permite importar imagenes del host.
|
||||||
|
* **timelapse_host**:
|
||||||
|
- Realiza la capturas segun argumentos.
|
||||||
|
- Este script debe correr en el dispositivo Android.
|
||||||
|
|
||||||
|
## Fotografias a intervalo
|
||||||
|
|
||||||
|
Registro fotografico cada 'X' tiempo, durante 'Y' tiempo o 'Z' cantidad de imagenes.
|
||||||
|
|
||||||
|
Las imagenes se guardan con el nombre (-n) como prefijo, seguido de la fecha.
|
||||||
|
`[NOMBRE]-[AÑO]-[MES]-[DIA]_[HH]:[MM]:[SS].jpeg`
|
||||||
|
> ej.
|
||||||
|
> * secuencia-2022-02-14_02:50:36.jpeg
|
||||||
|
|
||||||
|
Las imagenes se guardan en `~/BashCamera/[NOMBRE]_[DIA]-[MES]-[AÑO]_[HH]:[MM]/`
|
||||||
|
> ej.
|
||||||
|
> * secuencia-2022-02-14_02:50/
|
||||||
|
|
||||||
|
```bash
|
||||||
|
BashCamera/
|
||||||
|
└── secuencia_14-02-2022_02:50/
|
||||||
|
└── secuencia_2022-02-14_02:50:36.jpeg
|
||||||
|
```
|
||||||
|
----
|
||||||
|
## Ayuda
|
||||||
|
|
||||||
|
`timelapse_master --help`
|
||||||
|
```
|
||||||
|
Uso: timelapse [OPCS]
|
||||||
|
|
||||||
|
-h, --help - Muestra información de ayuda.
|
||||||
|
-C, --copia - Copia capturas del host en /tmp/BashCamera.
|
||||||
|
-d, --destino [opcional] - Directorio donde se guardan las capturas.
|
||||||
|
/tmp/BashCamera por defecto.
|
||||||
|
-H, --host - Nombre del host segun ~/.ssh/config.
|
||||||
|
-n, --nombre - Nombre prefijo de imagenes.
|
||||||
|
-i, --lapso - Tiempo entre capturas (segundos).
|
||||||
|
-f, --fin - Fin de la secuencia (segundos).
|
||||||
|
-c, --fotos - Cantidad de imagenes para finalizar (int).
|
||||||
|
invalida el fin de secuencia por tiempo.
|
||||||
|
-r, --rotar - Girar la imagen (90-180-270)
|
||||||
|
-v, --version - Muestra la fecha de la versión.
|
||||||
|
|
||||||
|
|
||||||
|
Ejemplos:
|
||||||
|
|
||||||
|
timelapse -H [host] -n [titulo] -r 90 -i 300 -f 18000
|
||||||
|
|
||||||
|
Solicita al host fotografias cada 5 minutos durante 5 horas.
|
||||||
|
Las imagenes son nombradas [titulo]_[AÑO]-[MES]-[DIA]_[HH:MM:SS]
|
||||||
|
y se guardan en //data/data/com.termux/files/home/storage/dcim/BashCamera/[titulo]/
|
||||||
|
Las imagenes se giran 90°.
|
||||||
|
|
||||||
|
timelapse -C [host] -d [DESTINO(opcional)]
|
||||||
|
|
||||||
|
Copia las capturas del host (rsync)
|
||||||
|
```
|
||||||
|
`timelapse_host --help`
|
||||||
|
```
|
||||||
|
Uso: timelapse [OPCS]
|
||||||
|
|
||||||
|
-h, --help - Muestra información de ayuda.
|
||||||
|
-n, --nombre - Nombre prefijo de imagenes.
|
||||||
|
-i, --lapso - Tiempo entre capturas (segundos).
|
||||||
|
-f, --fin - Fin de la secuencia (segundos).
|
||||||
|
-c, --fotos - Cantidad de imagenes para finalizar (int).
|
||||||
|
invalida el fin de secuencia por tiempo.
|
||||||
|
-r, --rotar - Modifica el angulo de la imagen (90-180-270)
|
||||||
|
-v, --version - Muestra la fecha de la versión.
|
||||||
|
|
||||||
|
|
||||||
|
Ejemplo:
|
||||||
|
|
||||||
|
timelapse -n [NOMBRE] -i 300 -f 18000 -r 90
|
||||||
|
|
||||||
|
Toma fotografias cada 5 minutos durante 5 horas.
|
||||||
|
Las imagenes son nombradas [NOMBRE]_[AÑO]-[MES]-[DIA]_[HH:MM:SS]
|
||||||
|
Las imagenes se giran 90°.
|
||||||
|
```
|
146
timelapse_host.sh
Executable file
146
timelapse_host.sh
Executable file
@ -0,0 +1,146 @@
|
|||||||
|
#!/data/data/com.termux/files/usr/bin/env bash
|
||||||
|
|
||||||
|
Progrm=timelapse
|
||||||
|
VersionStr='14-02-2022'
|
||||||
|
NOMBRE_BASE='timelapse'
|
||||||
|
DIR_BASE="/data/data/com.termux/files/home/storage/dcim/BashCamera/"
|
||||||
|
CONTADOR=0
|
||||||
|
T_ANTERIOR=0
|
||||||
|
T_FIN=0
|
||||||
|
ROTAR=0
|
||||||
|
ANGULO=0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Err(){
|
||||||
|
printf 'ERROR: %s\n' "$2" 1>&2
|
||||||
|
[ $1 -gt 0 ] && exit $1
|
||||||
|
}
|
||||||
|
|
||||||
|
Uso(){
|
||||||
|
while read; do
|
||||||
|
printf '%s\n' "$REPLY"
|
||||||
|
done <<-EOF
|
||||||
|
Uso: $Progrm [OPCS]
|
||||||
|
|
||||||
|
-h, --help - Muestra información de ayuda.
|
||||||
|
-n, --nombre - Nombre prefijo de imagenes.
|
||||||
|
-i, --lapso - Tiempo entre capturas (segundos).
|
||||||
|
-f, --fin - Fin de la secuencia (segundos).
|
||||||
|
-c, --fotos - Cantidad de imagenes para finalizar (int).
|
||||||
|
invalida el fin de secuencia por tiempo.
|
||||||
|
-r, --rotar - Modifica el angulo de la imagen (90-180-270)
|
||||||
|
-v, --version - Muestra la fecha de la versión.
|
||||||
|
|
||||||
|
|
||||||
|
Ejemplo:
|
||||||
|
|
||||||
|
timelapse -n [NOMBRE] -i 300 -f 18000 -r 90
|
||||||
|
|
||||||
|
Toma fotografias cada 5 minutos durante 5 horas.
|
||||||
|
Las imagenes son nombradas [NOMBRE]_[AÑO]-[MES]-[DIA]_[HH:MM:SS]
|
||||||
|
Las imagenes se giran 90°
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
if ! [ -n "$1" ]; then
|
||||||
|
Err 1 "'$0' Debes ingresar opciones. \"ej: --help\""
|
||||||
|
fi
|
||||||
|
|
||||||
|
#while [ -n "$1" ]; do
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
-v|--version)
|
||||||
|
printf '%s\n' "$VersionStr"; exit 0 ;;
|
||||||
|
-h|--help)
|
||||||
|
Uso; exit 0 ;;
|
||||||
|
-n|--nombre)
|
||||||
|
NOMBRE_BASE="$2"
|
||||||
|
shift # past argument
|
||||||
|
shift # past value
|
||||||
|
;;
|
||||||
|
-i|--lapso)
|
||||||
|
INTERVALO="$2" # Validar?!
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-f|--fin)
|
||||||
|
T_FIN="$2" # Validar?!
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-c|--fotos)
|
||||||
|
CONTADOR="$2" # Validar?!
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-r|--rotar)
|
||||||
|
ROTAR=1
|
||||||
|
ANGULO="$2" # Validar?!
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-*|--*)
|
||||||
|
Err 1 "Opción no valida: $1" ;;
|
||||||
|
*)
|
||||||
|
Err 1 'Argumento(s) invalido(s).' ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
[ -n "${INTERVALO}" ] || Err 1 "Debes Ingresar un intervalo"
|
||||||
|
[ "${INTERVALO}" -lt 15 ] && Err 1 "Intervalo de capturas debe ser >= 15"
|
||||||
|
[ ${CONTADOR} -eq 0 ] && [ ${T_FIN} -eq 0 ] && Err 1 "Debes ingresar un limite (tiempo o cantidad) (--help)"
|
||||||
|
[ ${ANGULO} -eq 0 ] && Err 1 "El angulo de giro debe ser: 90 - 180 - 270"
|
||||||
|
|
||||||
|
NOMBRE_DIR="${NOMBRE_BASE}_$(date +'%d-%m-%Y_%H:%M')"
|
||||||
|
DIR_BASE="${DIR_BASE}${NOMBRE_DIR}/"
|
||||||
|
mkdir -p "${DIR_BASE}"
|
||||||
|
|
||||||
|
captura(){
|
||||||
|
CAPTURA="${DIR_BASE}${NOMBRE_BASE}_$(date +'%Y-%m-%d_%H:%M:%S').jpeg"
|
||||||
|
termux-camera-photo "${CAPTURA}"
|
||||||
|
# Puede depender de un argumento y otra funcion. Por ahora queda así
|
||||||
|
if [ ${ROTAR} -gt 0 ]; then
|
||||||
|
mogrify -rotate "${ANGULO}" "${CAPTURA}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Limite por cantidad de capturas
|
||||||
|
if [ "${CONTADOR}" -gt 0 ]; then
|
||||||
|
while [ $CONTADOR -gt 0 ]; do
|
||||||
|
T_ACTUAL=$(date "+%s")
|
||||||
|
T_DIFF=$((T_ACTUAL-T_ANTERIOR))
|
||||||
|
if [ $T_DIFF -ge $INTERVALO ]; then
|
||||||
|
T_ANTERIOR=${T_ACTUAL}
|
||||||
|
captura
|
||||||
|
((CONTADOR--))
|
||||||
|
else
|
||||||
|
sleep 0.25
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
# Limite por tiempo
|
||||||
|
T_ACTUAL=$(date "+%s")
|
||||||
|
T_FIN=$((T_ACTUAL+T_FIN))
|
||||||
|
while [ ${T_ACTUAL} -le ${T_FIN} ]; do
|
||||||
|
T_ACTUAL=$(date "+%s")
|
||||||
|
T_DIFF=$((T_ACTUAL-T_ANTERIOR))
|
||||||
|
if [ $T_DIFF -ge $INTERVALO ]; then
|
||||||
|
T_ANTERIOR=${T_ACTUAL}
|
||||||
|
captura
|
||||||
|
else
|
||||||
|
sleep 0.20
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
#############################################
|
||||||
|
# PENDIENTE: #
|
||||||
|
# #
|
||||||
|
# VALIDACIONES #
|
||||||
|
# #
|
||||||
|
#############################################
|
144
timelapse_master.sh
Executable file
144
timelapse_master.sh
Executable file
@ -0,0 +1,144 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
Progrm=timelapse
|
||||||
|
VersionStr='14-02-2022'
|
||||||
|
NOMBRE_BASE='timelapse'
|
||||||
|
DIR_BASE="//data/data/com.termux/files/home"
|
||||||
|
DIR_PRGRM="${DIR_BASE}/.scripts/timelapse"
|
||||||
|
DIR_CAPT="${DIR_BASE}/storage/dcim/BashCamera"
|
||||||
|
DIR_DESTINO="/tmp"
|
||||||
|
CONTADOR=0
|
||||||
|
T_FIN=0
|
||||||
|
COPIA=0
|
||||||
|
ROTAR=0
|
||||||
|
ANGULO=0
|
||||||
|
|
||||||
|
Err(){
|
||||||
|
printf 'ERROR: %s\n' "$2" 1>&2
|
||||||
|
[ $1 -gt 0 ] && exit $1
|
||||||
|
}
|
||||||
|
|
||||||
|
Uso(){
|
||||||
|
while read; do
|
||||||
|
printf '%s\n' "$REPLY"
|
||||||
|
done <<-EOF
|
||||||
|
Uso: $Progrm [OPCS]
|
||||||
|
|
||||||
|
-h, --help - Muestra información de ayuda.
|
||||||
|
-C, --copia - Copia capturas del host en ${DIR_DESTINO}/BashCamera.
|
||||||
|
-d, --destino [opcional] - Directorio donde se guardan las capturas.
|
||||||
|
${DIR_DESTINO}/BashCamera por defecto.
|
||||||
|
-H, --host - Nombre del host segun ~/.ssh/config.
|
||||||
|
-n, --nombre - Nombre prefijo de imagenes.
|
||||||
|
-i, --lapso - Tiempo entre capturas (segundos).
|
||||||
|
-f, --fin - Fin de la secuencia (segundos).
|
||||||
|
-c, --fotos - Cantidad de imagenes para finalizar (int).
|
||||||
|
invalida el fin de secuencia por tiempo.
|
||||||
|
-r, --rotar - Girar la imagen (90-180-270)
|
||||||
|
-v, --version - Muestra la fecha de la versión.
|
||||||
|
|
||||||
|
|
||||||
|
Ejemplos:
|
||||||
|
|
||||||
|
timelapse -H [host] -n [titulo] -r 90 -i 300 -f 18000
|
||||||
|
|
||||||
|
Solicita al host fotografias cada 5 minutos durante 5 horas.
|
||||||
|
Las imagenes son nombradas [titulo]_[AÑO]-[MES]-[DIA]_[HH:MM:SS]
|
||||||
|
y se guardan en ${DIR_CAPT}/[titulo]/
|
||||||
|
Las imagenes se giran 90°.
|
||||||
|
|
||||||
|
timelapse -C [host] -d [DESTINO(opcional)]
|
||||||
|
|
||||||
|
Copia las capturas del host (rsync)
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
Importar() {
|
||||||
|
rsync -avzhP "${MAQUINA}:${DIR_CAPT}" "${DIR_DESTINO}"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
if ! [ -n "$1" ]; then
|
||||||
|
Err 1 "'$0' Debes ingresar opciones. \"ej: --help\""
|
||||||
|
fi
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
-v|--version)
|
||||||
|
printf '%s\n' "$VersionStr"; exit 0 ;;
|
||||||
|
-h|--help)
|
||||||
|
Uso; exit 0 ;;
|
||||||
|
-C|--copia)
|
||||||
|
MAQUINA="$2"
|
||||||
|
COPIA=1
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-d|--destino)
|
||||||
|
DIR_DESTINO="$2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-H|--host)
|
||||||
|
MAQUINA="$2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-n|--nombre)
|
||||||
|
NOMBRE_BASE="$2" # Validar?!
|
||||||
|
shift # past argument
|
||||||
|
shift # past value
|
||||||
|
;;
|
||||||
|
-i|--lapso)
|
||||||
|
INTERVALO="$2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-f|--fin)
|
||||||
|
T_FIN="$2" # Validar?!
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-c|--fotos)
|
||||||
|
CONTADOR="$2" # Validar?!
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-r|--rotar)
|
||||||
|
ROTAR=1
|
||||||
|
ANGULO="$2" # Validar?!
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-*|--*)
|
||||||
|
Err 1 "Opción no valida: $1" ;;
|
||||||
|
*)
|
||||||
|
Err 1 'Argumento(s) invalido(s).' ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
[ ${COPIA} -gt 0 ] && Importar
|
||||||
|
[ -n "${INTERVALO}" ] || Err 1 "Debes Ingresar un intervalo"
|
||||||
|
[ "${INTERVALO}" -lt 15 ] && Err 1 "Intervalo de capturas debe ser >= 15"
|
||||||
|
[ ${ANGULO} -eq 0 ] && Err 1 "El angulo de giro debe ser: 90 - 180 - 270"
|
||||||
|
[ ${CONTADOR} -eq 0 ] && [ ${T_FIN} -eq 0 ] && Err 1 "Debes ingresar un limite (tiempo o cantidad) (--help)"
|
||||||
|
|
||||||
|
if [ "${CONTADOR}" -gt 0 ]; then
|
||||||
|
# Limite por cantidad de capturas
|
||||||
|
ssh -f "${MAQUINA}" "${DIR_PRGRM} -n ${NOMBRE_BASE} -i ${INTERVALO} -c ${CONTADOR} -r ${ANGULO}"
|
||||||
|
else
|
||||||
|
# Limite por tiempo
|
||||||
|
ssh -f "${MAQUINA}" "${DIR_PRGRM} -n ${NOMBRE_BASE} -i ${INTERVALO} -f ${T_FIN} -r ${ANGULO}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#########################################################################
|
||||||
|
# PENDIENTE: #
|
||||||
|
# #
|
||||||
|
# LIMITE POR TIEMPO #
|
||||||
|
# sufixo s(egundos); m(inutos); h(oras); d(dias); S(emanas); M(eses) #
|
||||||
|
# #
|
||||||
|
# VALIDACION #
|
||||||
|
# #
|
||||||
|
#########################################################################
|
Loading…
Reference in New Issue
Block a user