viernes, 29 de abril de 2016

Descargar vídeos flash en GNU/Linux (sin tener que instalar nada de nada)

Aunque flash cada día está más de capa caída (afortunadamente) y youtube por ejemplo ya funciona con html5; aún hay muchos vídeos en la red con ese anacrónico formato y problemático reproductor. Por ello y aunque ya hemos puesto alguna entrada sobre cómo descargar vídeos de youtube junto con los subtítulos, pero he visto una forma simple y fácil de descargar vídeos en flash sin tener que instalar nada de nada. Lo vi por casualidad navegando por la red en esta web, y se basa en dos comandos simples:

lsof |grep Flash

Que sirve para buscar el archivo de vídeo, mostrando algo de este estilo:

plugin-co 2925   kaos1204   42u      REG                8,6  1746126  141520 /tmp/FlashXXSccA9R (deleted)

Y cuando el archivo esté cargado al completo en el navegador ya se puede copiar fácilmente teniendo en cuenta los números resaltados de lo mostrado en el anterior comando de búsqueda, que dando así:

cp /proc/2925/fd/42 video.flv

Pero en los comentarios un tal «Vampire» programó un script en bash para usar este método de forma fácil y cómoda; y como me gustó, lo prové, va bien y no quiero perderlo, pues lo pongo aquí que lo uso como chuletario para cuando me haga falta jeje:

#!/bin/bash
timeSleep=100; #Modificar para el tiempo de espera en la comprovacion de descarga.
echo Herramienta para salvar videos flash de firefox.
echo Solo mantenga abiertos los videos que necesita salvar.
echo Buscando videos flash...
#findFile=$(lsof | grep -i flash | grep "deleted");
PID=$(ps -C plugin-container | grep "plugin" | awk -F" " '{print $1}');
findFile=$(lsof -p $PID | grep -i flash | grep "deleted");
echo
c=0;
while IFS= read -r; do
line="$REPLY";
folderFlash=$(echo $line | awk -F" " '{print $2}');
fileFlash=$(echo $line | awk -F" " '{print $4}');
copyNumber=${#fileFlash};
copyNumber=$(expr $copyNumber "-" 1);
fileFlash=${fileFlash:0:$copyNumber};
urlFiles[$c]="/proc/$folderFlash/fd/$fileFlash";
c=$((++c));
done<<<"$findFile"
echo Se han encontrado $c archivos de video flash;
c=0;
for fileURL in ${urlFiles[*]}; do
fileSizeOld[$c]=$(du -sL $fileURL | awk -F" " '{print $1}');
echo "Ubicacion: $fileURL Capacidad: ${fileSizeOld[$c]}";
c=$((++c));
done
echo
echo Esperando que la descarga de los archivos termine.
echo
vid=0;
while [ $c != 0 ]
do
sleep $timeSleep;
i=0;
while [ $i != $c ]
do
fileURL=${urlFiles[$i]};
if [ -e $fileURL ]
then
fileSizeNew=$(du -sL $fileURL | awk -F" " '{print $1}');
if [ ${fileSizeOld[$i]} != $fileSizeNew ]
then
fileSizeOld[$i]=$fileSizeNew;
echo El archivo $fileURL ahora contiene $fileSizeNew bytes.
i=$((++i));
else
echo La descarga del archivo $fileURL a concluido o se a dejado de descargar.
cp $fileURL "video$vid.flv";
echo El archivo $fileURL se a copiado a la direccion: $PWD/video$vid.flv;
vid=$((++vid));
for ((j=$i;j<=$c;j++)); do
urlFiles[$j]=${urlFiles[$j+1]};
fileSizeOld[$j]=${fileSizeOld[$j+1]};
done
c=$((--c));
fi
else
echo Se perdio el video $fileURL porque se ha cerrado la pagina de reproduccion.
for ((j=$i;j<=$c;j++)); do
urlFiles[$j]=${urlFiles[$j+1]};
fileSizeOld[$j]=${fileSizeOld[$j+1]};
done
c=$((--c));
fi
done
done
echo Pulse enter para continuar.
read


Yo le he modificado el tiempo de espera pero el resto es íntegro de Vampire ya que funciona bien tal y como está. Si a alguien le viene bien pues genial, yo al menos estoy seguro de que le daré buen uso jeje.

No hay comentarios:

Publicar un comentario