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ón
directoriooriginales="halloween"
directoriodestino="fotogramas-"$directoriooriginales
for 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
done
done
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