A) Vídeo
1- Script para lanzar omxplayer con nuestras opciones habituales
pi@bot ~ $ sudo touch /usr/local/bin/play
pi@bot ~ $ sudo chmod 777 /usr/local/bin/play
pi@bot ~ $ sudo nano /usr/local/bin/play
#!/bin/bash
seg=0
sub=""
vid=""
OPTS=""
while (( $# ))
do
case $1 in
-s )
seg=$(($2+$seg))
shift
;;
-m )
seg=$((($2 * 60)+$seg))
shift
;;
-*)
OPTS="$OPTS $1"
;;
*)
ext="${2##*.}"
if [ "$ext" == "srt" ]; then
sub="$1"
else
vid="$1"
fi
;;
esac
shift
done
if [ "$vid" == "" ] || [ ! -f "$vid" ]; then
echo "Debe pasar un video como parámetro"
exit 1
fi
if [ $seg -eq 0 ]; then
seg=""
else
seg="--pos ${seg}"
fi
if [ "$sub" == "" ]; then
sub="${vid%%.*}.srt"
fi
if [ -f "$sub" ]; then
sub="--subtitles $sub"
else
sub=""
fi
# Cambiar opcion local por hdmi si se quiere usar la salida de audio digital
omxplayer -o local --blank --vol -300 ${seg} ${OPTS} ${vid} ${sub}
Ejemplos de uso:
pi@bot ~ $ play video.avi
pi@bot ~ $ play video.avi sub.srt
pi@bot ~ $ play -s 10 -m 2 video.avi
2- Crear script para buscar vídeos en youtube y meneame, y reproducir medios online
pi@bot ~ $ sudo apt-get install youtube-dl
...
pi@bot ~ $ sudo youtube-dl -U
...
pi@bot ~ $ sudo touch /usr/local/bin/ytb
pi@bot ~ $ sudo chmod 777 /usr/local/bin/ytb
pi@bot ~ $ sudo nano /usr/local/bin/ytb
#!/usr/bin/perl -w
use XML::Simple;
use LWP::Simple;
use HTML::Entities;
use utf8; # en este programa hay caracteres escritos en utf8
use open OUT => ':utf8'; # la salida del programa será en utf8
use open ':std'; # la salida STDOUT (el print()) también será en utf8
# Cambiar opcion local por hdmi si se quiere usar la salida de audio digital
my $omx="omxplayer -o local --blank --vol -300";
my $fuente=0;
my $respuesta=0;
my $suerte=0;
sub ask{
local $| = 1; # activate autoflush to immediately show the prompt
print "¿Reproducir / Descargar? (r/d): ";
chomp($respuesta = <STDIN>);
$respuesta=lc($respuesta);
return ($respuesta eq "r") || ($respuesta eq "d");
}
sub play {
my ($url,$cmd) = @_;
if ($respuesta eq "d") {
$cmd = "youtube-dl --continue --no-overwrites --restrict-filenames --sub-lang es,en -o '~/Download/%(title)s-%(extractor)s_%(id)s.%(ext)s' " . $url . " --exec '" . $omx . " {}'";
} else {
$url =`youtube-dl --max-quality 35 -g "$url"`;
$url =~ s/^\s+|\s+$//g;
return if (!$url);
$cmd= ($omx . " \"" . $url . "\"");
}
#print $cmd . "\n";
exec($cmd) if $suerte == 1;
system($cmd);
}
sub spc {
my ($txt) = @_;
$txt =~ s/\s\s+/ /g;
$txt =~ s/\.\.+/\./g;
$txt =~ s/ +/ /g;
$txt =~ s/^ +| +$//g;
return $txt;
}
sub cln {
my ($link,$title,$des) = @_;
$link=~ s/\&.*//;
$title = spc($title);
return ($link,$title) if (!$des);
$des=decode_entities($des);
$des =~ s/^.+\/><p>|<\/p>.+$//g;
$des =~ s/<[^>]+>/ /g;
$des = spc($des);
if ($fuente == 0) {
$des =~ s/^\Q$title\E\s*//ig;
$des =~ s/\.? *From: .+ Views:[ \d ]+ ratings Time: (\d+:\d+(:\d+)?) .+$//;
$des =~ s/^ +| +$//g;
$title= $1 . " - " . $title if ($1);
}
return ($link,$title,$des);
}
die "Ha de pasar como mínimo un parametro" unless $#ARGV >=0;
my $url=undef;
my $filtro=undef;
my $lk="link";
while(@ARGV && $ARGV[0] =~ m/^-/) {
$_=shift(@ARGV);
if ($_ eq "-m" ) {
$fuente=1;
} elsif ($_ eq "-s") {
$suerte=1;
} elsif ($_ eq "-d") {
$respuesta="d";
}
}
if ($#ARGV == 0 && $ARGV[0] =~ m/^https?:\/\//) {
$suerte=1;
play($ARGV[0]);
die;
}
if ($fuente == 1) {
$lk="meneame:url";
if (@ARGV) {
$url="https://www.meneame.net/rss/search?w=links&p=title&s=published&q=" . join("+",@ARGV);
} else {
$url="https://www.meneame.net/rss?q=youtube&w=links&p=url&s=published&h=&o=date";
}
} else {
$url="http://gdata.youtube.com/feeds/base/videos?v=2&alt=rss&q=" . join("+",@ARGV);
}
my $content = get($url);
my $xml =XMLin($content, ForceArray => ['item']);
my @r = @{ $xml->{channel}->{item} };
if ($fuente == 1) {
@r = grep {
$_->{'meneame:comments'} > 20 &&
$_->{'meneame:url'} =~/(youtube|vimeo)\.com|youtu\.be/;
} @r;
}
print "No hay resultados\n" and exit unless (@r);
my $count=0;
foreach my $ult (@r) {
print "\n" if $count++;
my ($l,$t,$d) = cln($ult->{$lk}, $ult->{title}, $ult->{description});
print (($t . "\n" . $d . "\n" . $l . "\n") =~ s/\n\n+/\n/gr);
play($l) if $suerte || ask();
}
Ejemplos de uso:
pi@bot ~ $ ytb show must go on
04:15 - Queen - 'The Show Must Go On' (Music Video)
The official 'The Show Must Go On' music video. Taken from Queen - 'Innuendo'
http://www.youtube.com/watch?v=4ADh8Fs3YdU
¿Reproducir / Descargar? (r/d): r
Video codec omx-h264 width 352 height 264 profile 66 fps 24.941999
Audio codec aac channels 2 samplerate 44100 bitspersample 16
Subtitle count: 0, state: off, index: 1, delay: 0
V:PortSettingsChanged: 352x264@24.94 interlace:0 deinterlace:0 par:1.00 layer:0
have a nice day ;)
pi@bot ~ $ ytb http://www.youtube.com/watch?v=1hiasK3oE3k
Video codec omx-h264 width 640 height 360 profile 578 fps 25.000000
Audio codec aac channels 2 samplerate 44100 bitspersample 16
Subtitle count: 0, state: off, index: 1, delay: 0
V:PortSettingsChanged: 640x360@25.00 interlace:0 deinterlace:0 par:1.00 layer:0
Stopped at: 00:00:03
have a nice day ;)
pi@bot~ $ ytb -d http://www.youtube.com/watch?v=4ADh8Fs3YdU
[youtube] Setting language
[youtube] Confirming age
[youtube] 4ADh8Fs3YdU: Downloading webpage
[youtube] 4ADh8Fs3YdU: Downloading video info webpage
[youtube] 4ADh8Fs3YdU: Extracting video information
[youtube] 4ADh8Fs3YdU: Encrypted signatures detected.
[youtube] 4ADh8Fs3YdU: Downloading js player vflzDhHvc
[download] Destination: /home/pi/Download/Queen_-_The_Show_Must_Go_On_Music_Video-youtube_4ADh8Fs3YdU.mp4
[download] 100% of 13.13MiB in 00:07
[exec] Executing command: omxplayer -o local --blank --vol -300 '/home/pi/Download/Queen_-_The_Show_Must_Go_On_Music_Video-youtube_4ADh8Fs3YdU.mp4'
Video codec omx-h264 width 352 height 264 profile 66 fps 24.941999
Audio codec aac channels 2 samplerate 44100 bitspersample 16
Subtitle count: 0, state: off, index: 1, delay: 0
V:PortSettingsChanged: 352x264@24.94 interlace:0 deinterlace:0 par:1.00 layer:0
Stopped at: 00:00:01
have a nice day ;)
pi@bot ~ $ ytb -m
Marine sobrevive a un disparo en la cabeza gracias a su casco de kevlar
Vídeo de como un marine sobrevive a un disparo en la cabeza de un francotirador talibán. El disparo se produce en el 0:45.
https://www.youtube.com/watch?v=gBjUv_T9CYU
¿Reproducir / Descargar? (r/d):
Joan March financió a Franco porque en la República solo podía hacer negocios desde la cárcel
"Joan March, los Negocios de la Guerra" es el primer documental que se realiza sobre este personaje misterioso y secreto conocido popularmente como "el banquero de Franco".
https://www.youtube.com/watch?v=K92g9DU2JqM
¿Reproducir / Descargar? (r/d):
Notas:
- Si no se contesta nada (pulsar enter sin más) se muestra el próximo resultado
- Si se contesta d descarga el video por completo antes de reproducir, y si ya estaba descargado usa la copia local
- Si se llama al comando con el modificador -m hace la búsqueda sobre meneame.net
- Si se llama al comando con el modificador -s reproduce directamente el primer resultado sin preguntar
- Si se le pasa una url reproduce directamente ese vídeo
B) Imágenes
pi@bot ~ $ apt-get install fbi
...
pi@bot ~ $ fbi -a *.jpg
C) Musica
pi@bot ~ $ sudo apt-get install moc
...
pi@bot ~ $ cd .moc
pi@bot ~/.moc $ cp /usr/share/doc/moc/examples/config.example.gz .
pi@bot ~/.moc $ gzip -d config.example.gz
pi@bot ~/.moc $ mv config.example config
pi@bot ~/.moc $ nano config
...
Allow24bitOutput = yes
...
pi@bot ~ $ mocp
Si no se oye el audio y se quiere usar la salida analogía jack probar con:
pi@bot ~ $ amixer cset numid=3 1
Si el control del volumen por defecto no funciona probar lo siguiente:
...
ExecCommand1 = "amixer set PCM 100- > /dev/null" #decrementa 1%
ExecCommand2 = "amixer set PCM 100+ > /dev/null" #incrementa 1%
ExecCommand3 = "amixer set PCM 1000- > /dev/null" #decrementa 10%
ExecCommand4 = "amixer set PCM 1000+ > /dev/null" #incrementa 10%
ExecCommand9 = "amixer cset numid=1 -- 80% > /dev/null" #pone el audio al 80%
ExecCommand10 = "amixer cset numid=1 -- 0% > /dev/null" #pone el audio al 0%
...
y usa F1, F2, F3, F4, F9 y F10 para gestionar el volumen.
BONUS: Problema con las eñes y tildes en los subtitulos al usar omxplayer
Comprobamos el tipo de fichero y si es ISO-8859 lo convertimos a utf-8 con iconv
pi@bot ~ $ file sub_ori.srt
sub_ori.srt: ISO-8859 text, with CRLF line terminators
pi@bot ~ $ iconv --from-code=iso-8859-1 --to-code=utf-8 sub_ori.srt -o sub_fix.srt
Fuentes: diverteka, hackingthesystem4fun.blogspot.com.es, jeffskinnerbox.wordpress.com, v1.corenominal.org, www.raspberrypi.org