php exec() - befehl für ffmpeg mit variablen

G

giovanni

Guest
Hallo,

ich habe auf meiner Box ffmpeg installiert, das hat auch soweit ganz gut funktioniert.
Nun möchte ich die per php exec() Thumbnails extrahieren, was soweit auch klappt.
Nun zum eigentlichen Problem, die Namen der Thumbnails sollen dynamisch generiert werden
und den selben Namen wie das Videofile tragen.

Der Name wir einwandfrei generiert und steht als Variable $rand2 zur Verfügung.
Mein exec()-Befehl sieht folgendermaßen aus:

CODE
exec('ffmpeg -r 0.05 -s 800×600 -i test.avi -vframes 1 %d.jpg');



Damit klappt es auch, das Thumb wird als 1.jpg gespeichert...

ich möchte jetzt nur das '%d' durch die Variable '$rand' ersetzen, hab schon alles versucht, aber es funktioniert nicht...
Hab versucht die Files und Pfade alle in Variable zu setzen und an den enstprechenden Stellen in den Befehl einzufügen, auch nur das ".$rand2." oder '.$rand2.'
und so weiter und so weiter...alles ohne Erfolg...
mad.gif


Hat jmd eine Idee wie ich das sinnvoll lösen kann ?

Gruss
gio
 
QUOTE (giovanni @ So 26.10.2008, 13:27)
CODE
exec('ffmpeg -r 0.05 -s 800×600 -i test.avi -vframes 1 %d.jpg');



Ich habe ja eigentlich nicht viel Ahnung von PHP, da ich das nicht täglich nutze.

Aber %d steht in so ziemlich allen Programmiersprachen immer für einen numerischen Ausdruck.

Nach dieser Liste (die größtenteils auch für .NET gelten dürfte), muß das minimal %s heißen.

Allerdings könnte es sein, daß man diesen exec-Befehl damit dynamisch zusammenbauen muß. Aktuell ist mir nicht ganz klar, wo der Wert für dieses %d herkommt.
 
So weit ich das verstehe, nummeriert er mit %d einfach durch....
je nachdem wieviel frames ich haben will...
Ich möchte aber das %d komplett weglassen und meine vorher generierte Variable $rand2
als Filename verwenden...
Aber ich bekomme Sie einfach nicht eingebaut....

der fertige Befehl sollte dann so irgendwie aussehen

CODE
$rand2="12423423"; <-- wird per timestamp generiert, was auch problemlos klappt...
exec('ffmpeg -r 0.05 -s 800×600 -i test.avi -vframes 1 '.$rand2.'.jpg');



 
...du bist schon auf dem richtigen weg.

CODE
exec("ffmpeg -r 0.05 -s 800×600 -i \"test.avi\" -vframes 1 \"".$rand2.".jpg\"");



...ungetestet, aber so habe ich es in einem script von mir verwendet.

Grüße
Oli
 
...Danke Oli für die Anregung,
Das ganze bringt folgendes Ergebnis:

mit %d.jpg geht es alles, sobald ich die Variable einsetze,
kommt kein Thumb raus...

ich hab jetzt mal ne variable $outfile eingefügt und
die File-Endung und alles andere da reingepackt und an die entsprechende Stelle im befehl eingefügt.
Allerdings mit ebenso wenig erfolg...
mad.gif


CODE
$rand2="12423423";
$outfile="$rand2.jpg";

echo $outfile; <-- gibt mir alles so wie es sein soll aus....

exec(" ffmpeg -r 0.05 -s 800×600 -i \"0ot01.avi\" -vframes 1 \"".$outfile."\" ");




Das ist doch zum Mäusemelken...
 
...hast du schonmal versucht, den Befehl direkt auf der Console einzugeben?

Dort bekommt man dann in den meisten Fällen auch eine Fehlermeldung. Also einfach mal:

QUOTE
echo "ffmpeg -r 0.05 -s 800×600 -i \"test.avi\" -vframes 1 \"".$rand2.".jpg\"";



und genau das dann auf der Console eingeben...und schauen was passiert.

Grüße
Oli
 
QUOTE (giovanni @ So 26.10.2008, 14:39)mit %d.jpg geht es alles, sobald ich die Variable einsetze,
kommt kein Thumb raus...

Du kannst in %d keinen String reinsetzen, sondern bloß Zahlen.
 
ok, werd ich testen, allerdings meine Frage noch dazu, woher kennt er aus der Konsole raus die Variable ?

so der test spuckt mir folgendes aus:

CODE

ffmpeg -r 0.05 -s 800×600 -i "0ot01.avi" -vframes 1 "...jpg"




@jürgen:

wenn ich %d.jpg als outputfile setzte, nummeriert er automatisch die jpgs, startend bei 1...
ich entferne dann %d komplett und setzte an der Stelle $rand2, d.h. aus %d.jpg -> $rand2.jpg
 
gibt was neues...

habe jetzt mal nur aus spass hinter das $rand2 noch das %d gehängt...
sprich,

CODE
$rand2="11112";
$outfile="$rand2%d.jpg";
exec(" ffmpeg -r 0.05 -s 800×600 -i \"0ot01.avi\" -vframes 1 \"".$outfile."\" ");



und siehe da...der filename ist nun 111121.jpg , also $rand2 + %d...
nu blick ich gar nicht mehr durch...warum geht es mit %d aber nicht ohne...
 
so, habs mit ner Kombination aus der Variable und %d gelößt...
das thumbnail heisst jetzt einfach $rand2_%d.jpg -> 11112_1.jpg usw...

würde jetzt ganz gerne noch ne Abfrage einbauen ob das Erstellen des thumbs erfolgreich war...
hat einer eine Idee welcher ansatz bei dem php exec() Befehl sinnvoll wäre?

mfg
 
Zurück
Oben