Resumir un vídeo largo, script
jueves, 29 de diciembre de 2011Me 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.
rumm
#1/ 31 de December/2011 a 00:05:28
Otros comentarios de «rumm»
El script está en Python?
Hace tiempo que quiero ponerme a aprender algun lenguaje "fácil" de programación.
¿Alguna sugerencia de materiales para empezar con Python?
Trebol-a
#2/ 31 de December/2011 a 00:30:54
Otros comentarios de «Trebol-a»
No sé si me pregunta si el script está escrito en Python o si lo tengo hecho en Python.
Es Bash y para este tipo de operaciones de consola consistentes básicamente en mandar ordenes a un tercero es mucho más rápido y sencillo que Python.
Pero si quieres iniciarte en alguno de estos dos, no lo dudes y hazlo con Python es infinitamente más versatil (tienes librerias para hacer la cosa mas insospechada), tienes más documentación y ejemplos de todo tipo y es más exportable a otras plataformas (Windows).
Es un poco antipático el tema de la tabulación en las funciones y al principio andar instalando librerias y extensiones hasta para hacer una multiplicación toca un poco las narices, pero una vez tienes instaladas las librerias básicas y algunas extras haces lo que quieras en 4 lineas.
Mira este ejemplo para llamar por telefono desde una consola
rumm
#3/ 02 de January/2012 a 02:21:55
Otros comentarios de «rumm»
La pregunta era sobre si estaba escrito en Python.
La programación la tengo un poco atravesada, pero he oido cosas buenas acerca de Python y me lo planteaba como lenguaje para hacer una toma de contacto.
Y ya por pedir, que no quede. Alguna idea para introducirme en los rudimentos de la programación (sospecho que la tengo atravesada debido a algunas malas explicaciones de algun mal profesor), por si aun puedo retomar el "buen" camino programador, a mis años. :P
Trebol-a
#4/ 02 de January/2012 a 11:08:38
Otros comentarios de «Trebol-a»
No sé como estará en Windows, pero si estás en Linux practicar Python en una consola y realizar operaciones simples es tan facil como abrir un terminal y escribir "Python" a partir de ahí el terminal es un interprete python en el que puedes consultar la documentación con "help(urllib)", por ejemplo.
En la web tienes hay tambien varias consolas interactivas (http://shell.appspot.com/) y multitud de ejemplos. El propio Google Code tiene multitud de apliciones y miniapplets en python y montón de documentacion (http://code.google.com/intl/es/appengine/docs/python/gettingstarted/) para hacer applicaciones que conecten con Youtube, subir vídeos, hacer búsquedas en Google, calendario, etc.... si será por falta de ideas: http://code.google.com/hosting/search?q=label%3aPython :)
rumm
#5/ 03 de January/2012 a 01:08:19
Otros comentarios de «rumm»
Python adjudicado entonces.
Gracias por las ideas.
21 de December, 2024 @ 18:39