PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bash-script für mplayer



Eremit
10-11-2002, 11:32
hallo,
ganz einfaches problem. ich möchte ein video mit dem mplayer abspielen und diesen auf den tv-ausgang geben. dazu sollen die schwarzen balken automatisch entfernt werden. diese bekomme ich raus wenn ich folgendes eingebe:
mplayer -vop scale -zoom -xy 640 $1 -ss 00:00:10 -frames 50 -vop cropdetect=24 | grep vop >> autocrop.txt

in der datei autocrop.txt steht dann unter anderem so etwas drin:
A: 601,2 V: 601,1 A-V: 0,087 ct: 0,138 15030/15030 8% 17% 1,3% 0 0 99%Mcrop area: X: 24..603 Y: 110..405 (-vop crop=580:296:24:110)

problem a)
brauche nun genau den inneren teil der klammer. besser werden noch die 4 einzelnen werte da drin.

problem b)
der mplayer beendet sich nicht selber. wie sage ich ihm, dass er sich nach z.b. 5 sekunden schliessen oder killen soll? vielleicht habe ich auch eine variable vom mplayer übersehen oder kann man ihn anders dazu bringen nach dem abspielen sich zu beenden?

problem c)
ich rufe das ganze dann so auf:
X -screen TV :1 -ac & sleep 2; DISPLAY=:1 mplayer -screenw 800 -screenh 600 -stop_xscreensaver $2 $1 && kill `ps aux | awk '/X\ -screen/ {print $2}' `
parameter 2 = die -vop-parameter von oben
parameter 1 = abzuspielende datei

nun wird das programm als user gestartet. der xerver bekommt aber die von root. diese kann dann natürlich nicht der user killen. welche möglichkeiten habe ich da?

vielleicht weiss hier jemand rat?!?

Eremit

Eremit
10-11-2002, 13:29
problem b) konnte ich halbwegs lösen.
mplayer ... &
sleep 4 && killall -9 mplayer

weiss jemand rat zu problem a?
irgendwie muss das doch mit grep und awk zu lösen sein. nur wie?

Eremit

fork
10-11-2002, 15:15
> sleep 4 && killall -9 mplayer

Damit hast Du wohl den useless-use-of-kill -9 -Award (http://groups.google.com/groups?oi=djq&as_usubject=useless+use+kill&num=25) verdient.

Zu Problem b)
Da hilft Perl ganz gut:
perl -e 'foreach(<>) { /\([^)]*=([0-9]*):([0-9]*):([0-9]*):([0-9]*)\)/ and print "$1\n";}' autocrop.txt

Das gibt Dir die erste Zahl aus. Für die nächsten 3 ändere einfach das $1 am Ende in $2,$3 oder $4

Eremit
10-11-2002, 17:20
danke für die hilfe.

mit dem kill-befehl hast du wohl recht. ;) ist auch nur eine notlösung.

dein perl-script funktioniert. allerdings brauche ich jetzt das ergebnis in eine bzw. in die 4 variablen. die eingabe ist eine andere variable und nicht mehr die datei. die eingabevariable hat folgenden inhalt:
crop=350:162:2:64)

die parameter in denen der wert gespeichert werden soll heissen:
wert1, wert2, ..., wert4

wie löse ich das nun?

Eremit

Eremit
10-11-2002, 17:30
aha. war doch ganz leicht. habe es selbst lösen können.

jetzt habe ich nur noch das problem mit dem mplayer. wie kann ich den nach einer gewissen zeit oder spiellänge schliessen?

Eremit

fork
10-11-2002, 17:36
keine Ahnung

Eremit
10-11-2002, 17:39
ist jedenfalls eine klare antwort. ;)

danke für die hilfe mit dem script.

Eremit

Eremit
10-11-2002, 18:03
ein kleines problem hat das script noch.
es schlägt fehl bzw. eine variable wird leer wenn eine zahl nur einstellig ist. also:
350:200:2:60
funktioniert leider nicht. wie muss ich es abändern?

Eremit

fork
10-11-2002, 21:21
> funktioniert leider nicht. wie muss ich es abändern?
Solange da nur Zahlen zwischen den Doppelpunkten stehen funktiniert das, dein Muster hab' ich selbst bei mir getestet. Wenn da aber ein Leerzeichen oder etwas anderes ist was keine Zahl ist funktionierts nicht. Das folgende Muster ist vielleicht etwas robuster

/\([^=]*=([^:]*):([^:]*):([^:]*):([^)]*)\)/

Erklärung:

/ Beginn des Suchmusters
\( eine Klammer
[^=] ein Zeichen das kein "="-Zeichen ist
* beliebig viele von dem letzten
= ein "="-Zeichen
( Anfang einer Gruppe(nur eine logische Marke)
[^:] ein Zeichen das kein Doppelpunkt ist
* beliebig viele von dem letzten
) Ende der Gruppe(nur eine logische Marke)
...