Para saber la duración de un vídeo en un script y usar esa información para tabajar con ella, podemos usar ffmpeg, avconf o un script de Gaspar Fernández disponible desde su web: https://poesiabinaria.net/2016/02/como-extraer-duracion-fotogramas-bitrate-y-fps-de-un-video-para-nuestros-scripts/
Y como en el script el autor indica claramente:
# Do whatever you want with this code.
Vamos a darle uso a esa libertad y usarlo para evolucionar su uso:
Almacenar la duración de un vídeo en una variable
Antes de nada, deberemos copiar al directorio de trabajo ese script y darle permisos de ejecución:
chmod + vinfo.sh
Con esto ya podremos invocarlo desde nuestros scripts y recoger la duración de los vídeos en variables:
duracion=$(./vinfo.sh duration $video)
Extraer algunos fotogramas por minuto de una serie de vídeos
Queremos hacer uno o más vídeos a partir de los brutos tomados en un evento, los típicos recursos que se utilizan mucho en las noticias, en los resúmenes de los eventos o para promocionar un evento a partir de los eventos anteriores. Y además, como nos encanta trabajar con ImageMagick queremos extraer fotogramas para luego meterle efectos y hacer más espectaculares esos clips.
Pues aquí tenemos una posible solución:
#!/bin/bash # Script que recorre un directorio con brutos de vídeo# Por cada minuto de duración del vídeo extrae de un punto aleatorio# tres bloques de 200 fotogramas cada uno# Guardará esos bloques en un nuevo directorio empaquetados en subdirectorios# cuyo nombre será igual al nombre del bruto donde se ha extraído sin extensióndirectoriooriginales="halloween"directoriodestino="fotogramas-"$directoriooriginalesfor i in $(ls $directoriooriginales)do # Quita la extensión del nombre del fichero original # para que el directorio se llame igual # y tener así una referencia en caso de tener que volver a usar el original sinextension=${i%.*} # Calcula la duración del vídeo duracion=$(./vinfo.sh duration $directoriooriginales/$i) horas=${duracion:0:2} minutos=${duracion:3:2} # Extrae los fotogramas y almacénalos en directorios numerados # consecutivamente con el mismo nombre que el vídeo origina + numeral let numeral=1 for min in $(seq 0 $minutos) do for tercios in $(seq 1 3) do let seg=$(shuf -i 0-59 -n 1) mkdir $directoriodestino/$sinextension$numeral ffmpeg -i $directoriooriginales"/"$i -ss 00:$min:$seg -vframes 200 $directoriodestino/$sinextension$numeral/captura%03d.png let numeral++ done donedone
Otros usos de este script:
Buscar una canción que se ajuste al tamaño de un vídeo para usarla como banda sonora
Recortar una canción para que se ajuste a la duración de un vídeo
Crear una pista de vídeo a partir de una cartela que se ajuste a la duración de un podcast



Hola
puedes usar lo siguiente:
ffmpeg -i VIDEO | sed -n “s/.* Duration: \([^,]*\), start: .*/\1/p”
te dará por ejemplo la siguiente salida 00:00:39.48
o lo siguiente:
ffmpeg -i VIDEO | sed -n “s/.* Duration: \([^,]*\), start: .*/\1/p” | cut -d “.” -f 1
cuya salida sería 00:00:39
Espero que les sirvan
Saludos