Du bist nicht angemeldet.

#1 31.10.2011 15:19:39

Army
Mitglied

[gelöst] Kurz ne Frage bzgl bash

Hi

Ich hab ne schöne Kommandozeile, die mir ermöglicht, Videos, die im Moment durch das Flash-Plugin geladen werden, mit dem Mplayer abzuspielen bzw zu speichern.
(abspielen)

for f in $(file /proc/$(pidof luakit)/fd/*|gawk '/\/tmp\/Flash/ {print $1}'); do mplayer ${f%:}; done

(speichern}

for f (${$(file /proc/$(pidof luakit)/fd/*|gawk '/\/tmp\/Flash/ {print $1}')//:}){mplayer -dumpstream -dumpfile flash-recording $f}

(So muss das aussehen, wenn man Luakit benutzt, bei anderen Browsern muss es etwas anders aussehen)

Ich hätts jetzt aber gern so, dass ein ausführbares Skript diese Kommandozeile für mich ausführt. Also versuch ich das so

#!/bin/bash
for f in $(file /proc/$(pidof luakit)/fd/*|gawk '/\/tmp\/Flash/ {print $1}'); do mplayer ${f%:}; done

Das funktioniert aber nicht.

Wo ist da der Fehler?

Beitrag geändert von Army (31.10.2011 19:21:35)

Offline

#2 31.10.2011 15:29:03

Kinch
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

Army schrieb:

Das funktioniert aber nicht.

Ich weiß echt nicht, wie oft ich diese Frage schon in meinem Leben gestellt habe: Was heißt „Funktioniert nicht”?

P.S.:

Bei der Z-Shell würde ich das einfach so machen:

mplayer /tmp/Flash*(om[1])

Beitrag geändert von Kinch (31.10.2011 15:29:52)

Offline

#3 31.10.2011 15:33:53

Pjotr
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

Gibt es da denn irgendeine Fehlermeldung? Ich hab das Skript gerade ausprobiert und bei mir läuft es wunderbar.


Edit: mal wieder zu spät...
Aber @Kinch, wie soll das funktionieren? Die Files befinden sich doch seit einigen Flash Updates nicht mehr in /tmp...

Beitrag geändert von Pjotr (31.10.2011 15:35:59)

Offline

#4 31.10.2011 15:35:39

zico
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

Mal 'nen ganz dummer Schuss ins Blaue:
Hat das Script eigentlich das Recht ausgeführt zu werden (+x)?

Offline

#5 31.10.2011 15:42:19

Kinch
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

Pjotr schrieb:

Aber @Kinch, wie soll das funktionieren? Die Files befinden sich doch seit einigen Flash Updates nicht mehr in /tmp...

Also bei mir landen die noch in /tmp. Darüberhinaus macht Armys Lösung  haargenau das gleiche. Wenn auch deutlich komplexer als nötig wäre.

Beitrag geändert von Kinch (31.10.2011 15:44:49)

Offline

#6 31.10.2011 15:46:30

portix
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

Kinch schrieb:
Pjotr schrieb:

Aber @Kinch, wie soll das funktionieren? Die Files befinden sich doch seit einigen Flash Updates nicht mehr in /tmp...

Also bei mir landen die noch in /tmp. Darüberhinaus macht Armys Lösung  haargenau das gleiche. Wenn auch deutlich komplexer als nötig wäre.

Eigentlich landen die schon länger nicht mehr in /tmp wenn man eine aktuelle Version benutzt, man kann das flashplugin aber mit sed oder perl patchen, so dass die Dateien nicht gelöscht werden.

Offline

#7 31.10.2011 15:50:45

Kinch
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

portix schrieb:

Eigentlich landen die schon länger nicht mehr in /tmp wenn man eine aktuelle Version benutzt, man kann das flashplugin aber mit sed oder perl patchen, so dass die Dateien nicht gelöscht werden.

Wo landen die denn?

Gelöscht werden die bei mir nur, wenn das Video geschlossen wird. Aber braucht man keinen Patch um sie davor zu bewahren, ein 'ln' tut's auch^^

Ich schreibe mir aber meistens Seiten-Abhängige Skripte, die die Dateien automatisch runterladen und ordentlich benennen und integriere die dann in den Browser.

Offline

#8 31.10.2011 19:21:19

Army
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

Scheiße, sorry, Anfängerfehler, dass ich so wenig Details gebe!!! War vorhin etwas in Eile, aber das ist keine ausreichende Begründung.

Und nochmal Scheiße, ich hab den Fehler gefunden... *grummel*:
Ich hatte in der zshrc die Zeile als alias drin mit dem gleichen Namen wie die ausführbare Datei. Als alias funktionierte es nicht, also hab ichs als ausführbares Skript versucht, den alias aber nicht gelöscht. Ein "which flash-mplayer" hat das Rätsel gelöst... Wie so oft, nachdem man um Hilfe bittet, findet mans selbst raus... big_smile

Naja, zumindest kennt ihr jetzt ne sehr coole Kommandozeile wink


Die Kommandozeile hab ich übrigens von https://bbs.archlinux.org/viewtopic.php?id=114790 Da seht ihr dann auch die Begründung, warum man das so machen muss und wie mans mit dem Firefox machen muss.

Beitrag geändert von Army (01.11.2011 09:04:55)

Offline

#9 01.11.2011 01:11:42

portix
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

Kinch schrieb:

Gelöscht werden die bei mir nur, wenn das Video geschlossen wird. Aber braucht man keinen Patch um sie davor zu bewahren, ein 'ln' tut's auch^^

Dann scheinst du ein anderes flashplugin zu benutzen, bei der aktuellen 64-bit
Variante aus den Repos wird bei mir nichts in /tmp gespeichert. Offenbar wird
direkt nach dem Start des Videos ein unlink auf die Datei in /tmp ausgeführt,
entfernt man im flashplayer den Aufruf von unlink, dann bleiben die Videos in
/tmp.

Offline

#10 01.11.2011 08:17:56

Kinch
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

@portix

Ja könnte sein, dass ich eine andere Flash-Version benutzt.

Verstehe; das mit dem Unlink ist ganz schön clever. Aber dann frage ich mich, warum Armys Lösung funktioniert. Die Zeile macht doch auch nichts anderes, als nach geöffneten Dateien mit dem Schema /tmp/Flash zu suchen und die dann an mplayer zu übergeben.

Offline

#11 01.11.2011 09:18:18

Pjotr
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

Unter /proc/pid/fd werden alle Dateien gelistet, die der Prozess geöffnet hat. Und unlink mach folgendes:
"unlink() deletes a name from the file system. If that name was the last link to a file and no processes have the file open the file is deleted and the space it was using is made available for reuse."

Also wird die Datei aus /tmp gelöscht, unter /proc/pid/fd bleibt aber ein Verweis stehen. Und erst wenn dieser auch weg ist, wird die Datei gelöscht.

Siehe auch die Manpages von proc und unlink wink

Beitrag geändert von Pjotr (01.11.2011 09:18:44)

Offline

#12 01.11.2011 09:22:41

portix
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

Das liegt wahrscheinlich daran, dass das flashplugin unlink aufruft. Unlink
entfernt zunächst nur den Link aus dem Dateisystem, die Datei wird aber erst
gelöscht wenn kein Prozess mehr darauf zugreift.
Aus der manpage von unlink:

man unlink schrieb:

... unlink() shall remove the link named by the pathname pointed to by path and
shall decrement the link count of the file referenced  by  the link.

When  the  file's link count becomes 0 and no process has the file open, the
space occupied by the file shall be freed and the file shall no longer be
accessible.

Edit: zu langsam.

Beitrag geändert von portix (01.11.2011 09:23:08)

Offline

#13 01.11.2011 09:29:33

Kinch
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

Hey,

danke für die Antwort.

Ich sehe meinen Fehler; ich dachte file würde den Link auflösen und der Pfad der an mplayer übergeben wird, wäre der tatsächliche Pfad der Datei.

Offline

#14 01.11.2011 11:24:14

SiD
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

Army schrieb:

Naja, zumindest kennt ihr jetzt ne sehr coole Kommandozeile wink

Jo, danke, die ist echt ganz cool. smile

Offline

#15 01.11.2011 11:39:59

SiD
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

hm, in der Zeile zum aufnehmen

for f (${$(file /proc/$(pidof luakit)/fd/*|gawk '/\/tmp\/Flash/ {print $1}')//:}){mplayer -dumpstream -dumpfile flash-recording $f}

ist irgendwo ein Fehler, bekomme

Syntaxfehler beim unerwarteten Wort `('

bin jetzt nicht so der Shell/Bash Experte, wo steckt denn da der Fehler?

Beitrag geändert von SiD (01.11.2011 11:40:43)

Offline

#16 01.11.2011 13:06:33

Army
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

Es kann auch bissl anders aussehn, probiers mal so

for f in $(file /proc/$(pidof luakit)/fd/*|gawk '/\/tmp\/Flash/ {print $1}');do mplayer -dumpstream -dumpfile flash-recording ${f%:};done

Im Prinzip ist es ja dasselbe wie wenn du das Video abspielen willst, nur dass halt der Mplayer dann speichern soll. Also ändert sich nur der Mplayer-Teil in der Kommandozeile.

Beitrag geändert von Army (01.11.2011 13:08:17)

Offline

#17 01.11.2011 14:00:55

SiD
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

Ok, funktioniert, aber der mplayer speichert dann nur soviel wie Flash bis zum Ausführungszeitpunkt des Scripts runtergeladen hat.
Man muss also warten bis Das komplette Video im Cache bzw. /tmp ist. Und bei mehreren Videos im Cache würde so nur das jeweils letzte erhalten bleiben, da ja immer in die Datei flash-recording gespeichert wird.

Da habe ich mir überlegt, ich könnte dann auch einfach "cp" nehmen und habe mir was gebastelt.

#!/bin/bash

# saving Flash files from cache to SAVEDIR/
#
# https://bbs.archlinux.de/viewtopic.php?pid=272955#p272955
# https://bbs.archlinux.org/viewtopic.php?id=114790


SAVEDIR=/home/michi/zoich

for f in $(file /proc/$(pidof plugin-container)/fd/* | awk '/Flash/ {print $1}'); do 
#for f in $(file /proc/$(pidof plugin-container)/fd/* | gawk '/\/tmp\/Flash/ {print $1}'); do 
  F=$(ls -l ${f%:} | awk '{print $11}')
  echo "saving ${F#/tmp/} in $SAVEDIR "   
  cp ${f%:} $SAVEDIR/flash-recording-${F#/tmp/}
done

echo "done :)"

Es funktioniert auch mit einem etwas kürzeren "awk" statt "gawk" Aufruf. Jedenfalls mit den von mir getesteten Videos von YouTube.
Oder könnte es da bei anderen Seiten Probleme geben?

P.S.
Das Herausfiltern des Namens für die Varible $F geht bestimmt auch eleganter, aber wie gesagt, bin nicht so der Shell Experte. wink

Offline

#18 01.11.2011 14:42:30

Army
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

SiD schrieb:

Ok, funktioniert, aber der mplayer speichert dann nur soviel wie Flash bis zum Ausführungszeitpunkt des Scripts runtergeladen hat.
Man muss also warten bis Das komplette Video im Cache bzw. /tmp ist.

Ja!

SiD schrieb:

Und bei mehreren Videos im Cache würde so nur das jeweils letzte erhalten bleiben, da ja immer in die Datei flash-recording gespeichert wird.

Ja das verbessere ich noch, ist aber echt einfach, siehe dein Skript. Brauch ich aber eigentlich nie, ich benutz eh so wenig Flash wie möglich, daher lad ich nie mehr als 1 Video. Aber hast schon was schönes gebastelt hier smile (wie gut das letztlich geschrieben ist weiß ich auch nicht, glaub ich kann noch weniger als SiD big_smile )

Offline

#19 19.12.2011 00:56:45

SiD
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

hmm, das script funktioniert hier auf einmal nicht mehr, haben die was geändert?

for f in $(file /proc/$(pidof plugin-container)/fd/* | gawk '/\/tmp\/Flash/ {print $1}'); do 
  mplayer ${f%:} 
done

Beitrag geändert von SiD (19.12.2011 00:57:18)

Offline

#20 19.12.2011 19:19:46

Vain
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

Hmm, works for me.

Wie sehen denn deine Links aus? Sprich, zeig’ mal eins hiervon oder besser gleich beides:

ls -al /proc/$(pidof plugin-container)/fd/*
file /proc/$(pidof plugin-container)/fd/*

Offline

#21 19.12.2011 19:25:10

SiD
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

geht jetzt (nach einem reboot wieder), kein plan was da los war

Offline

#22 16.01.2012 19:13:29

SiD
Mitglied

Re: [gelöst] Kurz ne Frage bzgl bash

Gibts auch sowas was das bei Live Streams wie z.B. auf justin.tv funktioniert?

Scheinbar wird da nichts zwischengespeichert, jedenfalls nicht so das es das Script wie es jetzt ist findet.

Wäre cool wenn das auch ginge. wink

Beitrag geändert von SiD (16.01.2012 19:13:56)

Offline

Schnellantwort auf dieses Thema

Schreibe deinen Beitrag und versende ihn
Deine Antwort

Fußzeile des Forums