Se 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> # https://poesiabinaria.net # ########################################################################## # 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
Pingback: Bitacoras.com /
Pingback: BlogESfera.com /