Récupérer une vidéo flash (Youtube/Dailymotion/…) en 2 commandes.

Voilà un « vieux » hack que j’utilise depuis des lustres, j’aurais pu le partager depuis longtemps ^^’
Testé sur Firefox et Chromium, ne fonctionne que sur Firefox.

1. Dans votre navigateur lancez la vidéo, puis lancez la commande suivante. Elle permet de récupérer tout les fichiers ouverts par libflashplayser.so (dans le processus sandbox plugin-container de firefox). En « greppant » « Fl », on récupère la vidéo que Flash est en train de recevoir et d’enregistrer dans /tmp, que celui-ci marque comme deleted pour qu’on ne voit rien dans /tmp !

lsof -p $(pgrep -f flash) | grep Fl

Récupérez le numéro de processus et le numéro du descripteur de fichier.

2. Enregistrer le flux (qui est en fait stocké dans /tmp) avec tail. « -c +0 » pour commencer du début.

tail -c +0 /proc/$PID/fd/$FID > test.flv

Un exemple complet :

lsof -p $(pgrep -f flash) | grep Fl
> plugin-co 6721 benpro   15u   REG               0,27 52137275   611934 /tmp/FlashXXaRl44C (deleted)
tail -f -c +0 /proc/6721/fd/15 > /tmp/test.flv

Quand la vidéo est fini, control+c, et voilà 🙂
On peut aussi faire un cp, mais si la vidéo se finit sur votre navigateur, souvent, la vidéo est supprimé ! Le tail permet d’éviter cela.

9 replies on “Récupérer une vidéo flash (Youtube/Dailymotion/…) en 2 commandes.”

  1. Merci pour cette astuce. Cependant, c’est étrange car ça ne fonctionne que partiellement pour mon cas : j’ai réussi à capturer un flux venant d’un lecteur jwplayer, mais impossible sur youtube, dailymotion, le “grep Fl” ne trouve rien..
    La version du plugin shockwave Flash est la 11.2 r202, cela peut être vient de là.
    Des idées ?

  2. Franchement, je ne suis pourtant pas bête, mais votre description est incompréhensible, expéditive et incompréhensible.
    Aux neuneu comme moi, faut tout expliquer étape par étape.
    Au lieu de quoi, vous donnez les choses à une vitesse folle, comme si vous vous parlez à vous même.

    Exemple :

    “Dans votre navigateur lancez la vidéo, puis lancez la commande suivante. Elle permet de récupérer”

    La lancer où, la “commande suivante” ?

    Puis vous continuez :

    “En « greppant » « Fl », on récupère la vidéo…”

    Vous parlez à qui ? A des savants ?!

    Le comble, c’est ça :

    “Récupérez le numéro de processus et le numéro du descripteur de fichier.”

    Essayez d’être clair svp;

  3. Chez moi, il n’y a que “mem” à la place d’un nombre, du coup je ne sais jamais lequel choisir… Mais merci pour l’astuce, ça fait réfléchir aux possibilités du système.

  4. C’est la même chose pour moi :
    lsof -p $(pgrep -f flash) | grep -i fl
    plugin-co 18501 tux mem REG 254,3 17410532 2627115 /usr/lib/mozilla/plugins/libflashplayer.so

    ls /proc/18501/fd -l
    total 0
    lrwx—— 1 tux tux 64 27 janv. 20:08 0 -> /dev/pts/0
    lrwx—— 1 tux tux 64 27 janv. 20:08 1 -> /dev/pts/0
    lr-x—— 1 tux tux 64 27 janv. 20:08 10 -> pipe:[1556437]
    l-wx—— 1 tux tux 64 27 janv. 20:08 11 -> pipe:[1556437]
    lrwx—— 1 tux tux 64 27 janv. 20:08 12 -> socket:[1557420]
    lr-x—— 1 tux tux 64 27 janv. 20:08 13 -> /home/tux/.mozilla/firefox/idqrwl05.default/cert8.db
    lr-x—— 1 tux tux 64 27 janv. 20:08 14 -> /home/tux/.mozilla/firefox/idqrwl05.default/key3.db
    lr-x—— 1 tux tux 64 27 janv. 20:08 15 -> /etc/vdpau_wrapper.cfg
    lrwx—— 1 tux tux 64 27 janv. 20:08 2 -> /dev/pts/0
    lrwx—— 1 tux tux 64 27 janv. 20:27 21 -> /home/tux/.cache/event-sound-cache.tdb.be24bc38822a1faa20825c124a2eca64.i686-pc-linux-gnu
    lrwx—— 1 tux tux 64 27 janv. 20:08 3 -> socket:[1556362]
    lrwx—— 1 tux tux 64 27 janv. 20:08 4 -> anon_inode:[eventfd]
    lr-x—— 1 tux tux 64 27 janv. 20:08 5 -> pipe:[1557416]
    l-wx—— 1 tux tux 64 27 janv. 20:08 6 -> pipe:[1557416]
    lrwx—— 1 tux tux 64 27 janv. 20:08 7 -> anon_inode:[eventpoll]
    lrwx—— 1 tux tux 64 27 janv. 20:08 8 -> socket:[1556435]
    lrwx—— 1 tux tux 64 27 janv. 20:08 9 -> socket:[1556436]

    Cette solution ne semble plus d’actualité.

    Merci quand même.

  5. Vous n’avez pas respecter la casse, il faut grepper Flash et pas flash, ne surtout pas mettre grep -i du coup. Sinon ça casse tout, car ça grep sur le plugin flashplayer (/usr/lib/mozilla/plugins/libflashplayer.so) au lieu de par exemple /tmp/FlashXXpCd7G8.

    Dans un mode plus barbare (et plus long à cause du lsof sur tout le système) « lsof | grep Fl » suffira.

Comments are closed.