Archivo

Entradas Etiquetadas ‘video’

Limitando el uso de Flash en Firefox

Miércoles, 20 de Julio de 2011 Gaspar Fernández 2 comentarios

Hace dos días leo en Usemos Linux un artículo sobre administrar el uso de Flash desde Firefox, aunque yo estaba preparando una recopilación parecida de extensiones que nos ayudarán para limitar el uso de esta tecnología.

Introducción

Debo destacar que Flash me parece una tecnología muy pesada, que encierra errores del pasado para asegurar retrocompatibilidad y eso se traduce en bajo rendimiento. Es multiplataforma, aunque a duras penas, y beneficia muchas veces a plataformas Windows.

Aunque tenemos alternativas, muchas veces se puede hacer lo mismo utilizando HTML+Javascript / Ajax o HTML5, también tenemos Silverlight / Moonlight (aunque el remedio no sea muy diferente a la enfermedad), a veces, tanto diseñadores como programadores se ponen en contra del mundo creando páginas con bastantes flash empotrados, por ejemplo, dificultando la navegación por la web, consumiendo ancho de banda y, a veces, consumiendo nuestro procesador haciendo que todo nuestro sistema nos vaya más lento.

I. Stop Autoplay

Es mi preferido, me permite, desactivar todos los elementos que se reproduzcan automáticamente, como música, vídeos empotrados, Flash o Silverlight, permitiendo reproducirlos cuando hacemos click sobre ellos.

Permite introducir máscaras para que no haya que pulsar sobre ciertos elementos y se reproduzcan automáticamente, pero yo prefiero hacer click si voy a reproducir.

Es muy útil para el primer caso descrito arriba, webs con muchos elementos flash que nos incomodan, nos permite pasar un poco de todos ellos ganando rendimiento y comodidad; por cierto, también es muy útil para juegos de Facebook donde te pones a aceptar regalos y cada vez que aceptas se carga el juego, con esto se acabaron los problemas.

Tiene cierto parecido con Flashblock, pero me gusta mucho más Stop Autoplay.

Lo podemos descargar desde aquí. Según dice el autor hubo problemas con votos negativos en la página de complementos de Mozilla y tuvo que retirarlo.

II. Low Quality Flash

Esta extensión hace que todos los elementos Flash se reproduzcan en baja resolución. Si tienes un ordenador con algunos años lo agradecerás…

Se puede descargar desde aquí.

Actualización 20/07/2011 10:16 — No funciona en Firefox 5, habrá que esperar un poco, o modificar el plugin a mano, creo que no hace nada que FF5 haya prohibido.

III. Flashtoggle y QuickJava

Nos permiten activar y desactivar Flash globalmente. Podemos desactivar Flash en cualquier momento, aunque para reactivarlo hace falta recargar la página.

QuickJava nos permite activar y desactivar Java / Javascript / Flash / Silverlight / Imágenes / CSS por lo que es mucho más completo.

Podemos bajarlos desde aquí: Flashtoggle / QuickJava

IV. Flash Resizer

Otra joya que nos permite ver un elemento Flash con menor o mayor tamaño del que viene en una web de una forma muy sencilla… redimensionándolo con el ratón.

Lo podemos bajar de su página oficial.

Algo más

Bueno, todo esto está muy bien, pero no podemos olvidarnos de Flash Video Replacer, extensión de la que ya hablé hace un año más o menos, que reemplaza el vídeo flash empotrado por un reproductor del sistema que sin duda irá más rápido y aprovechará mejor la aceleración hardware.

OpenShot: Revolucionando el vídeo digital en Linux

Lunes, 31 de Enero de 2011 Gaspar Fernández Sin comentarios

openshot_rotate_before

OpenShot es la revolución del vídeo digital (libre) en Linux. Hace unos meses cuando salió la versón 1.2 veíamos que el programa prometía; pero últimamente (durante este mes y parte del mes pasado) ha habido grandes novedades en el mundo OpenShot.

OpenShot está desarrollado en Python, ayudándose de la librería MLT (Media Lovin’ Toolkit) y GTK+2 y lo mejor es que no tiene demasiadas dependencias.

Si nos pasamos por el blog, podremos comprobar:

  • Grandes novedades y efectos como editor de vídeo, algunos de ellos bastante buenos ayudándose de la interfaz python de Blender 2.5.6 (no es estable aún).
  • Perfeccionamiento en efectos existentes (con la nueva versión de MLT, tenemos nuevos métodos de redimensionado y OpenShot lo aprovecha.
  • Mejoras en estabilidad y usabilidad.
  • ¡ Sistemas de partículas !
  • Canonical utiliza OpenShot para los montajes para la web.

Estamos deseando que se libere OpenShot 1.3 que trae todo esto y mucho más, y la repercusión que está teniendo esto se refleja en que han subido las donaciones en su web, los comentarios y los fans de Facebook.

Soy consciente de que aún queda mucho camino por recorrer para poder batir a programas comerciales (tipo Premiere, MediaStudio Pro, Avid, etc), pero ya es muy superior a otros como Windows Movie Maker. El proyecto está muy vivo y tiene muy buena salud. Desde aquí os animo a probarlo y a seguir muy de cerca las novedades. Estaremos atentos.

Now playing… para mplayer

Domingo, 14 de Noviembre de 2010 Gaspar Fernández Sin comentarios

screenshot-14-11-2010-201150Se trata de un script para bash que representará en pantalla información del archivo que se está reproduciendo al mismo tiempo que este se visualiza. Perfecto para un sistema mediacenter.

Requerimientos:

  • bash >=3.0
  • mplayer
  • xosd
  • utilidades de sistema utilizadas: date, sed, tr, cut, sleep

Entre sus características destaca la escritura de un archivo: $HOME/.videolog con los archivos que se reproducen. Uno de los posibles usos es la descarga de muchos vídeos de youtube en un directorio concreto, posterior visualización y borrado de cada uno de los archivos tras su visionado.

Además, si el archivo de audio o vídeo a reproducir contiene metadatos de Artista y Título, se visualizará la información de estos metadatos siempre que no estén en la lista negra (variable $ARTISTAS_PROHIBIDOS), en otro caso visualizaremos el nombre del archivo arreglado (eliminando las cadenas que aparecen en la variable FILENAME_RECORTADO, aquí podemos incluir extensiones o pequeñas anotaciones sobre la calidad o resolución de un vídeo).

Se recomienda modificar XOSD_OPTIONS_ARTISTA, XOSD_OPTIONS_TITULO, XOSD_OPTIONS_INFO y XOSD_OPTIONS_DURACION de acuerdo a los tipos de letra, colores y todo lo que se desee. Dejo una pequeña referencia de las opciones de osd_cat:

–pos Posición del texto: top(arriba), middle(en medio de la pantalla), bottom(abajo)
-A Alineación del texto: left(izquierda), center(centrado), right(derecha)
-c Color: puede ser en notación html #rrggbb o por su nombre
-s Offset o desplazamiento de la sombra
-o Offset o desplazamiento desde la parte superior o inferior de la pantalla
-d Tiempo en segundos que se mantendrá el texto en la pantalla
-f Tipo de letra. Para ver los tipos de letra disponibles ejecutar xfontsel.

Inicio del archivo: mplayernp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#!/bin/bash

##########################################################################
#
# MPLAYER NOW PLAYING version 0.1
# Copyright (C) 2010 by Gaspar Fernández <gaspy at totaki.com>
# http://totaki.com/poesiabinaria
#
##########################################################################

#   This program is free software: you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation, either version 3 of the License.

#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.

#   You should have received a copy of the GNU General Public License
#   along with this program.  If not, see <http://www.gnu.org/licenses/>.

XOSD_OPTIONS_ARTISTA="--pos=bottom -A left -c #fff -o -110 -s 2 -d 10 -f -*-utopia-*-*-*-*-*-520-*-*-*-*-*-*"
XOSD_OPTIONS_TITULO="--pos=bottom -A left -c #fff -o -100 -s 2 -d 10 -f -*-utopia-*-*-*-*-*-420-*-*-*-*-*-*"
XOSD_OPTIONS_INFO="--pos=bottom -A left -c #fff -s 2 -o -80 -d 10 -f -*-utopia-*-*-*-*-*-320-*-*-*-*-*-*"
XOSD_OPTIONS_DURACION="--pos=bottom -A left -c #fff -s 2 -o -60 -d 10 -f -*-utopia-*-*-*-*-*-220-*-*-*-*-*-*"

# Si precalculamos esto, damos velocidad
ESCAPE=`echo -e "\e"`

ARTISTAS_PROHIBIDOS=("virtualdub")
FILENAME_RECORTADO=(".avi" ".flv" ".mp3" ".mp4")

function print_info()
{
    artist="$1"
    title="$2"
    filename="$3"
    width="$4"
    height="$5"
    fps="$6"
    minutos="${7/./,}"      # Si nuestra locale es es_ES debemos sustituir puntos por comas
    segundos="${8/./,}"
    if [[ -n $artist ]]
    then
    artist_text=${info_val[$artist]}
    for proh in ${ARTISTAS_PROHIBIDOS[*]}
    do
        if [[ `echo $artist_text | tr [:upper:] [:lower:]` =~ $proh ]]
        then
        artist="";
        title="";
        break;
        fi
    done
    fi

    if [[ -n $artist ]]
    then
    echo $artist_text | osd_cat $XOSD_OPTIONS_ARTISTA &
    fi
    if [[ -n $title ]]
    then
    title_text=${info_val[$title]}
    echo $title_text | osd_cat $XOSD_OPTIONS_TITULO &
    else
    # Si no tenemos la codificación correcta configurada, esto puede saltar
#   fname=`basename "$filename"`
#   dname=`dirname "$filename"`
#   defname=`ls "$dname/$fname"*`
#   defname=`basename "$defname"`
    defname=`basename "$filename"`
    for recorte in ${FILENAME_RECORTADO[*]}
    do
        defname=${defname/$recorte/}
    done
    echo $defname | osd_cat $XOSD_OPTIONS_TITULO &
    fi
    if [[ -n $fps ]]
    then
    echo $width"x"$height"@"$fps | osd_cat $XOSD_OPTIONS_INFO &
    fi
    duracion=`printf "%1.0f:%1.0f" "$minutos" "$segundos"`
    echo $duracion | osd_cat $XOSD_OPTIONS_DURACION &

    echo "`date +"%d/%m/%Y %H:%M"` Media: $filename Dur: $duracion" >> $HOME/.videolog

}

function keyvalue()
{
    key=`echo "$1" | cut -d= -f1`
    value=`echo "$1" | cut -d= -f2`

    res[0]=$key;
    if [[ -n $value ]]
    then
    res[1]=$value;
    else
    res[1]="0";
    fi

    if [[ -n `echo $key | grep "ID_CLIP_INFO_NAME\|ID_CLIP_INFO_VALUE"` ]]
    then
    # Si tenemos un ID_CLIP_INFO_NAMEx o ID_CLIP_INFO_VALUEx extraemos el x
    info=(`echo $key | sed -n -e "s/\([a-zA-Z_]*\)\([0-9]*\)/\1\n\2/p"`)
   
    res[0]=${info[0]}
    res[2]=${info[1]}
    fi
    echo -e ${res[0]}"\n"${res[1]}"\n"${res[2]}"\n"


}

function tituladora()
{

artist="";
title="";
while read -n 200 dato 
do
    if [[ -n `echo $dato | grep ID_` ]] # Extraemos información de mplayer
    then
    OLD_IFS=$IFS;
    IFS="
"
;
    kval=( `keyvalue $dato` );
#   echo ${kval[0]} "********"
    IFS=$OLD_IFS

    case ${kval[0]} in
        "ID_FILENAME")
        filename="${kval[1]}"          
        ;;
        "ID_VIDEO_WIDTH")
        width=${kval[1]}
        ;;
        "ID_VIDEO_HEIGHT")
        height=${kval[1]}
        ;;
        "ID_VIDEO_FPS")
        fps=${kval[1]}
        ;;
        "ID_LENGTH")
        seconds=${kval[1]};
        # Extrae la duración en minutos y segundos
        duration=( `echo "scale=0; $seconds / 60; scale=0; $seconds % 60" | bc` )
        ;;
        "ID_CLIP_INFO_NAME")
        if [[ `echo ${kval[1]} | tr [:upper:] [:lower:]` == "artist" ]]
            then
#           echo "ARTISTA CAPTURADO "${kval[2]};
            artist=${kval[2]} # Donde encontramos el artista
        else
            if [[ `echo ${kval[1]} | tr [:upper:] [:lower:]` == "title" ]]
            then
            title=${kval[2]} # Donde encontramos el artista
#           echo "TITULO CAPTURADO"
            fi
        fi
        ;;
        "ID_CLIP_INFO_VALUE")
        # Almacenamos el valor obtenido
#       echo "ALMACENO EN "${kval[2]} "ESTO" ${kval[1]} "**" ${kval[0]} ${kval[2]} = ${kval[1]}
        info_val[${kval[2]}]="${kval[1]}"
        ;;
    esac
#   echo ${info_val[@]}
    else
    # Si encontramos caracteres de control....
    if [[ $dato =~ $ESCAPE ]]
    then

        # Tal vez podamos comentar esto para dar velocidad --- INICIO
        if [[ $dato =~ "Position" ]]
        then       
        printf "%s\n" "$dato"
        else
        printf "%s" "$dato"
        fi
        # Tal vez podamos comentar esto para dar velocidad --- INICIO
    else
        if [[ ${dato:0:3} == "AO:" ]] # Aquí empieza el Audio... saltaremos tanto para archivos de audio como
                                      # para vídeos / películas... que también tengan audio
        then
        # Empieza la reproducción
        sleep 1 && print_info "$artist" "$title" "$filename" "$width" "$height" "$fps" "${duration[0]}" "${duration[1]}"
        fi

        echo $dato;
    fi
    fi
done
}
mplayer -identify $@ | tituladora

Por último, para utilizar este programa, podemos crear un alias a mplayer:

alias mplayer=”mplayernp”

Para finalizar dejo algúnos ejemplo de uso (son válidos también para mplayer, ya que mplayernp pasa los comandos tal cual a mplayer:

1
2
# Para reproducir archivos dentro de un directorio con orden aleatorio y en pantalla completa
mplayernp -fs `ls /directorio/*.avi | sort -R`

Vídeo de la foto: El Hombre de Negro - Greenfield

Vídeo digital: Secuencias de imágenes

Jueves, 16 de Septiembre de 2010 Gaspar Fernández Sin comentarios

Esta vez voy a presentar algunos ejemplos de uso de ffmpeg con secuencias de imágenes. Para empezar a trabajar con vídeo digital desde GNU/Linux.

Crear vídeo a partir de una secuencia de imágenes

Es una buena técnica el hecho de trabajar con secuencias de imágenes para crear un vídeo. Podemos, por ejemplo utilizar la potencia de Imagemagick (I, II, III, IV) para modificar el color de la imagen, etiquetarlas o darle algún tratamiento. O incluso para manejar transparencias en vídeo de una forma controlada. Para las secuencias de imágenes es conveniente utilizar un formato de imagen sin pérdidas como png, pnm, o jpg sin pérdidas (ojo, no jpg normal).

Para hacer la conversión podemos utilizar esta orden:

$ ffmpeg -f image2 -i directorio/imag%d.png -r 25 -vcodec mpeg4 video.avi

Elegimos como entrada un formato de imágenes y las exportaremos a 25 fps, con el codec mpeg4 y el archivo se llamará video.avi. Todas las imágenes estarán dentro de directorio y se llamarán imag0.png, imag1.png, imag2.png, …

Siempre depende el codec que vayamos a utilizar, si queremos enviarlo por Internet, o grabarlo en algún soporte como montaje definitivo podemos utilizar el formato mpeg4, theora, h264, vp8, etc; si queremos grabarlo en DVD podemos escoger mpeg2, aunque si vamos a utilizarlo como parte de nuestro proceso de montaje podemos usar dv o algún codec sin pérdidas como ljpeg, jpegls, v210, etc; el objetivo, para montaje es utilizar un formato sin comprimir o comprimido sin pérdidas.

Creando un vídeo sólo con una imagen

En ocasiones, puede ser necesario crear un archivo de vídeo que sólo contenga una imagen. ¿ Por qué ? Podemos crear algún script que haga algún efecto con ese vídeo, una transición, o podemos unirlo a un vídeo, para hacer de cortinilla de inicio o cierre.

Para ello hacemos lo siguiente:

$ ffmpeg -loop_input -f image2 -i imagen.png -vframes 50 -r 10 -vcodec libtheora video.avi

Donde grabaremos 50 frames con la imagen imagen.png a 10 fotogramas por segundo y con el codec theora. Aunque, en lugar de especificar los fps podemos especificar el tiempo que queremos que dure (en hh:mm:ss.[xxx], es decir, horas, minutos, seguntos, centésimas):

$ ffmpeg -loop_input -f image2 -i imagen.png -t 00:00:5.50 -r 10 -vcodec libtheora video.avi

Donde grabaremos un vídeo de 5 segundos y medio con la misma imagen.

Pasando un vídeo a secuencia de imágenes

Ahora tratamos de hacer la primera conversión, de vídeo a imágenes, intentando escoger el codec adecuado. Aunque podemos utilizar jpg, vamos a exportar a png para dar más calidad a las imágenes:

$ ffmpeg -i video.avi -f image2 -vcodec png video/frame_%d.png

Grabaremos los distintos fotogramas del video (video.avi) en el directorio video y con archivos llamados frame_1.png, frame_2.png, frame_3.png…

Reproducir vídeos de youtube desde Firefox con mplayer

Viernes, 18 de Junio de 2010 Gaspar Fernández 3 comentarios

flvideoreplacer-logoHace unas horas descubrí esta fantástica extensión para Firefox. Su misión es cambiar los reproductores flash de Vimeo y Youtube entre otros por un reproductor de medios compatible (en mi caso, yo uso el plugin de mplayer). Los vídeos por fin se reproducen de forma fluida y la búsqueda dentro de los mismos es mucho más rápida que desde flash.

Ahora por fin, no se pone el ventilador de mi ordenador a gritar (al menos el ventilador de la CPU) cuando intento reproducir algo a pantalla completa.

La extensión podemos encontrarla aquí: FlashVideoReplacer o en la web de Mozilla Addons

Mientras va imponiéndose HTML5, está bien dejar de depender un poco de Flash…

Descargar automáticamente todos los programas de Redes

Domingo, 9 de Mayo de 2010 Gaspar Fernández Sin comentarios

neuron
Apenas veo la televisión, pero hay ciertos programas que son interesantes y merecen la pena como Redes. Y tampoco me gusta verlos desde la web ya que Flash es muy lento, y me gusta tener lo que veo echar hacia atrás y hacia alante (como hace mplayer) y verlo cómodamente.

Para ello, lo más cómodo es descargarlos, pero cómo descargarlos si tengo que bajarlos uno a uno (y son muchos), y tengo que mirar dónde está el archivo de vídeo (lo primero que nos podemos bajar a mano es una archivo de metadatos que nos dirá dónde está el vídeo), es una tarea muy lenta para hacerla a mano. ¿ Por qué no automatizar el proceso ?

Vemos que desde la web de Redes para la Ciencia nos podemos descargar los programas desde 2008 (lástima que los anteriores no estén disponibles en vídeo desde esta web), y éstos están alojados en Smartplanet (blip.tv). Con estos datos, he confeccionado este script (aún en beta, no es muy estable, ni está optimizado, pero nos hace el apaño).

Si observamos los pasos intermedios de este script, y vemos el fichero de metadatos por dentro, veremos cómo podemos ver más información, descargar el archivo en mov o mp4 (a gusto del consumidor), también encontramos un resumen del programa; os invito a hacer pruebas y comentarlas en este post.

Una posible mejora a corto plazo, sería poner en orden la variable get_years y que, si descubre que varios capítulos han sido descargados, no intente bajar más (a la hora de descargar el último capítulo también con el script), o incluso almacenar en un archivo el número del último capítulo descargado, para así buscar el siguiente en la siguiente ejecución… todo se andará; por ahora, os dejo el script así, que con un poco de cuidado funciona bien.

Y otra cosa más, con un poco de suerte, para el año que viene, sólo tendremos que añadir a la variable get_years el link del blog con los enlaces a los capítulos del año 2011.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#/bin/bash

get_years="http://www.redesparalaciencia.com/programas-2009 http://www.redesparalaciencia.com/programas-de-2008 http://www.redesparalaciencia.com/programas-2010"

for i in $get_years
do
    echo Descargando $i ...
    wget -q -O /tmp/listado_year $i
    echo Descargado
    # Hay algunas URLS que salen con ../
    caps_year=`cat /tmp/listado_year | grep 'href' | grep '>Redes [0-9]' | sed -e 's/\.\.\//http:\/\/www\.redesparalaciencia\.com\//g' -n -e 's/\(.*\)href=\"\([^\"]*\)\"\(.*\)/\2/p'`
#   caps_year=`cat /tmp/listado_year | grep 'href' | grep '>Redes [0-9]' | grep -o '"http://[a-zA-Z0-9.\/\-]*"' | cut -d\" -f2`
    for j in $caps_year
    do
        echo Descargando metadatos del episodio...
        wget -q -O /tmp/episodio $j
        episodio=`grep -o 'http://blip.tv/rss/flash/[0-9]*' /tmp/episodio`
        wget -O /tmp/metadatos $episodio
        echo Metadatos descargados
        video=`awk -F "\"" '/media\:content/ {print $2}' /tmp/metadatos | grep flv`
        titulo=`sed -n 's/<media:title>\(.*\)<\/media:title>/\1/p' /tmp/metadatos`
        if [ -r "$titulo.avi" ] || [ -r "$titulo.flv" ]
            then
            echo "Episodio $titulo ya existe. Descartando."
        else
            echo "Descargando episodio... $titulo"
# Podemos quitar el -q para ver cómo va la descarga.
            wget -q -O "$titulo.flv" $video
            echo "Recomprimiendo episodio..."
            ffmpeg -i "$titulo.flv" -vcodec msmpeg4v2 -b 1200k -acodec mp2 -ab 128k "$titulo.avi"
        fi
    done
done

Requerimientos: wget, sed, awk, ffmpeg (si queréis recomprimir los programas) y algunos gigas libres de disco duro (unos 20 o así si queremos recomprimir).

Notas:

  • La compresión no está muy optimizada, tal vez comprimamos con más bitrate del que debemos, pero bueno. Si no queremos comprimir, basta con comentar la línea de ffmpeg, aunque si queremos verlo en algún reproductor debemos dejarla. El codec de audio (acodec), es mp2, ya que el mp3 no me funcionaba bien, libmp3lame debe estar instalado y ffmpeg compilado con soporte para él, aún así, probad antes).
  • Soy consciente de que hay demasiado sed, awk y scripts de sobra, pero fue un script rápido y tampoco importa mucho el tiempo que pasemos parseando los metadatos.
  • No hay control de errores, si falla algo y el script se vuelve loco… yo no garantizo nada :)
  • Por ahora, si un archivo no se baja del todo, debemos eliminarlo para que se baje de nuevo por completo.

Espero que disfrutéis del programa.

Foto: MikaNet (Flickr)

Visita otras webs de la red