Me han pasado unos amigos unos «encargitos al más puro estilo 100% Pringao Extreme. El más engorroso de todos es tratar de aprovechar unos vídeos antiguos para colgar en la web.

El problema es que son unos vídeos extremadamente largos (+1 hora) y con muy mala calidad (fueron grabados a principios de los 80 en super8 y digitalizados vaya usted a saber como/donde) y con un interés digamos que bajo-muy bajo para quien no sale en ellos, (especialmente si la duración del vídeo se prolongo muchos minutos).
Como no tenía ganas de comerme (gratis) la edición de vídeo extralarga que supondría seleccionar, cortar, mover, montar, editar… etc.. he tomado una decisión salomónica: que lo decida el azar.

Así es que me hice un script rapidito que mediante mencoder trocea un vídeo a intervalos y genera otro vídeo que vendría a ser un resumen del original con partes escogidas al azar.
Como no hay recodificación de vídeo/audio el proceso dura un instante (de un vídeo de 1Gb obtenemos un resumen de 35Mg en unos 15 segundos). Por si alguien le interesa, el script:
#!/bin/bash
echo "Cambiar a $(pwd)"
cd "$(pwd)"

if [ -f "$1" ]; then
nombre=$(basename "$1")
nombreUnico=$(echo "$nombre" | md5sum | cut -d " " -f1)
prefijo=${nombre/.*/}
sufijo=${nombre/*./}
identificacion=$(mplayer -identify "$1" -vo none -ao none)
clear
echo "La identificación dice que:"
duracion=$(echo "$identificacion" | grep "ID_LENGTH" | cut -d "=" -f2); duracion=${duracion/.*/}
while [ "$yn" != "s" ]; do
echo "Video dura $duracion segundos"
echo "---------------------------------"
read -p "Indica la duración de los fragmentos que se van a extraer (en segundos): " duracionFragmento
read -p "Indica el número de fragmentos de $duracionFragmento segudos que quieres obtener: " numeroFragmentos
echo
echo -n "Obtendriamos un vídeo de $numeroFragmentos fragmentos x $duracionFragmento segundos = "; longitudResumen=$(echo "scale=0; $duracionFragmento * $numeroFragmentos" | bc) ; echo " $longitudResumen segundos en total"
echo "scale=0; ($duracion - $longitudResumen)/($numeroFragmentos-1)"
longitudIgnora=$(echo "scale=0; ($duracion - $longitudResumen)/($numeroFragmentos-1)" | bc )
echo "Se ignoraría fragmentos de $longitudIgnora segundos"

read -p "Es esto lo que quieres? [sn]" yn
done
reinicioSalto=$(expr $duracionFragmento + $longitudIgnora)
contador=0
for inicio in $(seq 1 $reinicioSalto $duracion); do
echo "Obtener $duracionFragmento segundos a partir del segundo $inicio"
let contador++
indice=$(printf "%02d" $contador)

mencoder "$1" -ss $inicio -endpos $duracionFragmento -ovc copy -oac copy -o "$nombreUnico""-parte_$indice.""$sufijo"
done
mencoder $nombreUnico*".$sufijo" -oac copy -ovc copy -o "$prefijo""_resumen.""$sufijo"
find . -type f -name "$nombreUnico*$sufijo" -delete

else
echo "El primer argumento debe ser un archivo de vídeo válido"
echo "\"$1\" no cumple ese requisito"
exit
fi

Si se copia esto un archivo (videopartes.sh) y se ejecuta:

  • Obtienen la duración en seg del vídeo pasado como primer argumento
  • Solicita duración S (en segundos) deseada de los fragmentos F
  • Solicita Numero de fragmentos F deseados
  • Solicita confirmación y con esos datos obtiene del vídeo original fragmentos F de videos de duración S distribuidos a intervalos regulares
  • A continuación ensambla esos fragmentos en un nuevo vídeo con idéntica codificación video/audio
  • Se eliminan los fragmentos
  • No hay transiciones, ni fades, ni efecto ninguno. El vídeo original no es alterado

Ejemplo: Un vídeo dado de 2000 segundos. Obtener 25 fragmentos de 6 segundos.
Resultado: vídeo de 150 segundos tomando 6 segundos de imagen cada 74 segundos de vídeo

Otro día os enseño el resultado de esta edición-extra-rápida y algún fragmento de estos vídeos que son auténtica arqueología moderna de la espeleología Murciana.