Sauver une vidéo en ligne via son browser Aucune extension nécessaire

, par MiKaël Navarro

Des fois, lorsque vous êtes en train de visualiser des vidéos sur youtube ou d’autres sites, vous souhaiteriez les enregistrer pour les regarder ultérieurement. Vous avez sûrement entendu parlé de l’extension DownloadHelper pour Firefox qui permet cela ; Mais, vous ne souhaitez pas installer d’extension sur votre version de Firefox ou vous utilisez un autre navigateur.
L’astuce ci-dessous vous expliquera comment sauver une vidéo quelque soit le navigateur que vous utilisez...

Astuce

Tout d’abord trouver le process id du browser :

$ ps xfa | grep firefox  # or grep any other browsers' name

Disons, que l’on obtient 12279. Notez que l’on peut avoir plusieurs résultats, seul le process id du binaire est util ici.

Ensuite lister les fichiers ouvert par le processus :

$ ls -lU /proc/12279/fd

Le nom du fichier est le numéro du file descriptor, c’est un lien symbolic vers le fichier réel :

#                       NAME   REAL FILE
lrwx------ 1 grp usr ... 59 -> socket:[3372642]
lrwx------ 1 grp usr ... 62 -> /home/gektop/.mozilla/firefox/u824gy5z.default/signons.sqlite
lrwx------ 1 grp usr ... 70 -> /tmp/moz_media_cache (deleted)
lrwx------ 1 grp usr ... 73 -> /home/gektop/.mozilla/firefox/u824gy5z.default/places.sqlite-journal
lrwx------ 1 grp usr ... 74 -> /tmp/FlashZzxRDM
lrwx------ 1 grp usr ... 75 -> /var/tmp/etilqs_5I5bzLh21aIoh4a (deleted)

Maintenant remarquez le fichier "/tmp/Flash ??????". Dans l’exemple précédent /tmp/FlashZzxRDM. C’est réellemnt un fichier .flv qui peut être ouvert avec mplayer :)

La dernière étape est de simplement copier / renommer ce fichier, après que la browser l’ai entièrement lu.

Scripting

#! /bin/bash

# find currently playing flash video and save it
# based on suggestion at
# http://www.linuxjournal.com/content/save-online-video-browser-no-extensions

# my standard place to store videos
VIDEO_DIR="$HOME/tma/Videos/"

if [ $# -eq 1 ]; then
 # get pid of firefox
 FF_PID=`pidof firefox`
 
 # get name of flash file
 FLASH_FILE=`ls -lU /proc/$FF_PID/fd | grep tmp | awk '{print $10}'`

 # get rid of /tmp/ in front of FLASH_FILE
 FLASH_FILE=`echo $FLASH_FILE | sed -e 's?/tmp/??'`

 # store flash file in VIDEO_DIR
 cp /tmp/$FLASH_FILE $VIDEO_DIR/$1.flv

else
 echo 'Usage: grab_flash_sh (w/o extension)'

fi
 
exit 0