Kdysi jsem tu psal, jak zkopírovat flash videa z cache flashplayeru a nedlouho potom se to změnilo a přestalo to fungovat. Zdálo se mi, že je to komplikovanější a byl jsem líný hledat co s tím, nutně jsem to nepotřeboval a z youtube se dá stahovat pohodlně pomocí pluginů, když už je třeba. Nicméně to stále mnoho lidí zajímá a tak jsem se na to dnes při snídani podíval...
A bylo to jednoduché. Díky nástroji fatrace jsem vystopoval procesy, které flash video přehrávají a zjistil, že se vlastně nic moc nezměnilo. Dřív stačilo najít v procesech plugin libflashplayer.so a bylo vymalováno, dnes to stačí jen na Chromium, ostatní to již řeší jinak. Chrome situaci komplikuje ještě tím, že má zamknutý adresář /proc/$pid/fd. Jinak tedy vše při starém, videa se ukládají do /tmp, ale do smazaných souborů, tak tam nejsou vidět. Dostat se k nim dá přes proces, který s nimi pracuje.
Výsledky jsem tedy opět shrnul do skriptu, který umí dohledat všechna flash videa momentálně otevřená v prohlížečích Opera, Firefox, Chromium a Chrome a zkopírovat je do adresáře, který si ve skriptu definujete, ve výchozím stavu je to na uživatelovu Plochu do adresáře flv. Videa přehrávaná Chrome je třeba obsloužit s právy nejvyššího a tak jsem přidal možnost skript spustit s přepínačem -g, který zajistí, že se potřebné úkony uskuteční pod rootem a budete dotázáni na heslo. Pod rootem zkopírovaným souborům jsou automaticky změněna práva i vlastník/skupina na výchozí hodnoty, aby s nimi uživatel mohl nakládat normálním způsobem. Ve skriptu řeším možná duplicitní jména výsledných souborů jen do té míry, že nemohou kolidovat jména z různých procesů. Skript jsem si nazval flv, umístil do ~/bin, takže ho můžu spouštět odkudkoli jako příkaz a pokud bych chtěl vytáhnout něco z Chrome, napíšu a spustím flv -g.
flv
Vyzkoušejte a případně mi napšte, jak to dopadlo. Psal jsem to na U12.10 s aktuálními browsery, s Firefoxem na U13.04 to také fungovalo. Také nezapomeňte, že ne všechna flash videa na webu jdou takto vydolovat, ne vždy probíhá kešování celého souboru.
A bylo to jednoduché. Díky nástroji fatrace jsem vystopoval procesy, které flash video přehrávají a zjistil, že se vlastně nic moc nezměnilo. Dřív stačilo najít v procesech plugin libflashplayer.so a bylo vymalováno, dnes to stačí jen na Chromium, ostatní to již řeší jinak. Chrome situaci komplikuje ještě tím, že má zamknutý adresář /proc/$pid/fd. Jinak tedy vše při starém, videa se ukládají do /tmp, ale do smazaných souborů, tak tam nejsou vidět. Dostat se k nim dá přes proces, který s nimi pracuje.
Výsledky jsem tedy opět shrnul do skriptu, který umí dohledat všechna flash videa momentálně otevřená v prohlížečích Opera, Firefox, Chromium a Chrome a zkopírovat je do adresáře, který si ve skriptu definujete, ve výchozím stavu je to na uživatelovu Plochu do adresáře flv. Videa přehrávaná Chrome je třeba obsloužit s právy nejvyššího a tak jsem přidal možnost skript spustit s přepínačem -g, který zajistí, že se potřebné úkony uskuteční pod rootem a budete dotázáni na heslo. Pod rootem zkopírovaným souborům jsou automaticky změněna práva i vlastník/skupina na výchozí hodnoty, aby s nimi uživatel mohl nakládat normálním způsobem. Ve skriptu řeším možná duplicitní jména výsledných souborů jen do té míry, že nemohou kolidovat jména z různých procesů. Skript jsem si nazval flv, umístil do ~/bin, takže ho můžu spouštět odkudkoli jako příkaz a pokud bych chtěl vytáhnout něco z Chrome, napíšu a spustím flv -g.
flv
#!/bin/bash # Skript kopíruje všechna flash videa, kerá nalezne v cache prohížečů # Opera, Firefox, Chromium a Chrome do zvoleného adresáře dir="`xdg-user-dir DESKTOP`/flv" # adresář do kterého se videa zkopírují mkdir -p "$dir" pgrep -f '([o]perapluginwrapper|[p]lugin-container|[c]hrome.*ppapi|[l]ibflashplayer\.so)'| while read pid; do if [ -z $1 ]; then ls -go /proc/$pid/fd/| awk '/Flash/{print $7}'| while read file; do tfile="$dir/$pid$file.flv" cp "/proc/$pid/fd/$file" "$tfile" [ -e "$tfile" ] && echo "Vytvořen soubor $tfile" done elif [ $1 = "-g" ]; then sudo ls -go /proc/$pid/fd/| awk '/Flash/{print $7}'| while read file; do tfile="$dir/$pid$file.flv" sudo cp "/proc/$pid/fd/$file" "$tfile" [ -e "$tfile" ] && echo "Vytvořen soubor $tfile" sudo chown $USER:$USER "$tfile" sudo chmod 664 "$tfile" done fi done
Vyzkoušejte a případně mi napšte, jak to dopadlo. Psal jsem to na U12.10 s aktuálními browsery, s Firefoxem na U13.04 to také fungovalo. Také nezapomeňte, že ne všechna flash videa na webu jdou takto vydolovat, ne vždy probíhá kešování celého souboru.
Jak je mým zvykem, vyhodil jsem první verzi skriptu zmrzačenou, nyní by již měl fungovat a vypsat i vytvořené soubory.
OdpovědětVymazatRádo se stalo, doufám, že nebudeš zklamán :)
OdpovědětVymazatdir=~/pavel
OdpovědětVymazatnebo
dir="$HOME/pavel"
Tildu bash v uvozovkách neexpanduje a uvozovky jsou třeba jen tehdy, když je v expandovaném výrazu nějaká mezera, takže je tam z principu mám, protože plochu můžeš mít teoreticky kdekoliv a koneckonců zrovna tak home ;)
Nehledej v tom nic zákeřnýho, je to normální cesta ;)
OdpovědětVymazatdir="/home/pavel/nejaky_adresar/flv"
dir="$HOME/nejaky_adresar/flv"
pokud
$ echo $HOME
/home/pavel
$ echo ~
/home/pavel