Descarga de vídeos Flash, Parte 1

Para guardar un vídeo flash, de una de esas webs estilo Youtube que se han multiplicado como conejos, una forma muy fácil y que ha funcionado durante mucho tiempo es buscar el video entre los archivos temporales y/o la caché del navegador, dependiendo de la versión de Flash instalada.
Sin embargo en Linux, con las últimas versiones, el vídeo no se encuentra en ninguno de los dos sitios.

El truco: el archivo sí que se guarda en el directorio temporal, pero se borra una vez abierto. Es una de las características de Linux: un archivo abierto puede ser borrado "virtualmente", a todos los efectos parecerá que se ha borrado pero mientras siga abierto se podrá acceder a él normalmente; cuando se cierre, el archivo se borrará de verdad.

Es una forma de crear archivos temporales auto destructibles, que se borran una vez se cierra el programa que los está usando.
El plugin de Flash usa este método, lo cual hace parecer que el archivo de vídeo que se está reproduciendo no está disponible en el disco duro. Sin embargo no es así.

Linux proporciona un método para acceder a los archivos abiertos por un proceso, lo cual nos permite hacer una copia antes de cerrar el reproductor: el sistema de archivos /proc.
Dentro de /proc hay un directorio para cada proceso, y dentro de cada uno de ellos hay un directorio que contiene enlaces a todos los archivos abiertos por el proceso. Podemos usar esos enlaces para acceder a los archivos sin problema.

El proceso es simple, primero reproducimos el vídeo en navegador, es importante no cerrar la página del vídeo y en algunos casos interesa no acabar la reproducción. En la mayoría de reproductores Flash una barra de otro color nos indicará cuánto del vídeo se ha descargado, por lo tanto bastará con reproducir hasta que se llene la barra y luego pausar el vídeo. A continuación buscaremos el enlace en /proc:

Paso 1. Obtenemos el identificador de proceso. En la mayoría de navegadores deberemos buscar el proceso del navegador. Si usamos Google Chrome (o Chromium) deberemos buscar el proceso del plugin flash ya que son procesos separados:

$ pidof firefox-bin # Firefox
4725

En este caso el identificador es 4725

$ ps -ef | grep libflashplayer # Google Chrome
toni  18393 12796 0 17:55 pts/0 00:05:28 /opt/google/chrome/chrome --type=plugin --plugin-path=/usr/lib/flashplayer-square/libflashplayer_square.so --lang=ca --plugin-data-dir=/home/toni/.config/google-chrome/Default --channel=16248.0x6d16e00.377218180

En este caso el identificador es 18393

Paso 2. Accedemos a la lista de archivos abiertos por firefox. La lista será larga pero encontrar los vídeos Flash es fácil porque todos se llaman "FlashXXXXXXXX" donde las X son letras al azar
$ cd /proc/4725/fd
$ ls -l | grep Flash........
lrwx------ 1 toni toni 64 29 mar 17:48 77 -> /tmp/FlashXXUR50Bl (deleted)

Es decir, el archivo "77" (/proc/4725/fd/77) enlaza con un video borrado del disco. Ahora podemos copiar ese archivo. Copiar, ya que es un enlace blando no podemos ni moverlo ni enlazarlo. Por eso es importante haber dejado que se llene la barra (que se descargue por completo), ya que al copiarlo sólo copiaremos la parte descargada hasta ese momento.

$ cp 77 ~/video.flv

Si hemos dejado descargar el archivo por completo tendremos una copia del vídeo 🙂


En la segunda parte, descarga de vídeos sólo en streaming (protocolo rtmp).