FFMPEG in PHP

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • FFMPEG in PHP

    Hallo,

    folgendes Problem:

    Ich biete meinen Usern eine eigene Galerie an (selber programmiert). Nun soll es auch möglich sein, Videos hochzuladen. Soweit so gut. Der Upload ist kein Problem, doch nun kommt es: Wie kann ich mithilfe von PHP-FFMPEG die Videos in FLV-Dateien umwandeln? FFMPEG und PHP-FFMPEG sind installiert.

    Hat jemand ein Codebeispiel für mich? mit der Funktion system() oder exec() funktioniert es nicht.



    Danke im Vorraus!
  • Hallo,

    leider funktioniert es nicht.

    PHP-Quellcode

    1. <?php
    2. // Set our source file
    3. $srcFile = "/var/kunden/webs/--/beispiel/beispiel.wmv";
    4. $destFile = "/var/kunden/webs/--/beispiel/clock.flv";
    5. $ffmpegPath = "/usr/bin/ffmpeg";
    6. $flvtool2Path = "/bin/flvtool++";
    7. // Create our FFMPEG-PHP class
    8. $ffmpegObj = new ffmpeg_movie($srcFile);
    9. // Save our needed variables
    10. $srcWidth = makeMultipleTwo($ffmpegObj->getFrameWidth());
    11. $srcHeight = makeMultipleTwo($ffmpegObj->getFrameHeight());
    12. $srcFPS = $ffmpegObj->getFrameRate();
    13. $srcAB = intval($ffmpegObj->getAudioBitRate()/1000);
    14. $srcAR = $ffmpegObj->getAudioSampleRate();
    15. // Call our convert using exec()
    16. exec($ffmpegPath . " -i " . $srcFile . " -ar " . $srcAR . " -ab " . $srcAB . " -f flv -s " . $srcWidth . "x" . $srcHeight . " " . $destFile . " | " . $flvtool2Path . " -U stdin " . $destFile);
    17. // Make multiples function
    18. function makeMultipleTwo ($value)
    19. {
    20. $sType = gettype($value/2);
    21. if($sType == "integer")
    22. {
    23. return $value;
    24. } else {
    25. return ($value-1);
    26. }
    27. }
    28. ?>
    Alles anzeigen
  • hm, seh ich auch so.

    ok, klingt vielleicht doof, aber meist sind's die trivialen fehler, die sich lange halten, weil man nicht mehr dran denkt:

    bist du sicher, daß die pfade

    $srcFile = "/var/kunden/webs/--/beispiel/beispiel.wmv";
    $destFile = "/var/kunden/webs/--/beispiel/clock.flv";
    $ffmpegPath = "/usr/bin/ffmpeg";
    $flvtool2Path = "/bin/flvtool++";

    korrekt sind?
    (ich hab halt noch nie "webs/--/" als absoluten pfad gesehen, was natürlich nix bedeutet...)

    außerdem gib ne ausgabe-variable bei exec an und laß sie dir mit print_r() ausgeben.

    also,
    exec('befehl',$output);
    print_r($output);


    ...der fehler muß doch zu finden sein...
    Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Jeder glaubt, er hätte genug davon.
    --------------------------------------------------(Rene Descartes)
  • Hallo,

    $srcFile = "/var/kunden/webs/TimMichael/beispiel/beispiel.wmv";
    $destFile = "/var/kunden/webs/TimMichael/beispiel/clock.flv";
    $ffmpegPath = "/usr/bin/ffmpeg";
    $flvtool2Path = "/bin/flvtool++";

    sind so richtig. Ich nutze momentan noch sysCP.


    // Edit: gnex.info/beispiel/beispiel.php - Ist keine Ausgabe zu sehen.

    PHP-Quellcode

    1. <?php
    2. // Set our source file
    3. $srcFile = "/var/kunden/webs/TimMichael/beispiel/beispiel.wmv";
    4. $destFile = "/var/kunden/webs/TimMichael/beispiel/clock.flv";
    5. $ffmpegPath = "/usr/bin/ffmpeg";
    6. $flvtool2Path = "/bin/flvtool++";
    7. // Create our FFMPEG-PHP class
    8. $ffmpegObj = new ffmpeg_movie($srcFile);
    9. // Save our needed variables
    10. $srcWidth = makeMultipleTwo($ffmpegObj->getFrameWidth());
    11. $srcHeight = makeMultipleTwo($ffmpegObj->getFrameHeight());
    12. $srcFPS = $ffmpegObj->getFrameRate();
    13. $srcAB = intval($ffmpegObj->getAudioBitRate()/1000);
    14. $srcAR = $ffmpegObj->getAudioSampleRate();
    15. // Call our convert using exec()
    16. exec($ffmpegPath . " -i " . $srcFile . " -ar " . $srcAR . " -ab " . $srcAB . " -f flv -s " . $srcWidth . "x" . $srcHeight . " " . $destFile . " | " . $flvtool2Path . " -U stdin " . $destFile,$output);
    17. print_r($output);
    18. // Make multiples function
    19. function makeMultipleTwo ($value)
    20. {
    21. $sType = gettype($value/2);
    22. if($sType == "integer")
    23. {
    24. return $value;
    25. } else {
    26. return ($value-1);
    27. }
    28. }
    29. ?>
    Alles anzeigen
  • ok, langsam greife ich nach nem Strohhalm.

    Garkeine Fehlermeldungen sind halt doof.
    Daß bei der Ausgabe der Variablen (z.B. $srcWidth ) nichts herauskam,
    ist wenigstens ein Anhaltspunkt, wenngleich ein ziemlich vager.
    Fertiger Server bedeutet aber für gewöhnlich, daß der Indianer direkt für ne Produktiv-Umgebung
    konfiguriert wurde, was unter anderem heißt, daß Fehlermeldungen unterdrückt werden.

    Also oben ins PHP-Script:

    error_reporting(E_ALL);


    und hoffen....

    [EDIT]

    Ich seh gerad in der phpinfo(), daß der Safe-Mode auf ON steht ... das könnte eine Fehlerquelle sein.
    Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Jeder glaubt, er hätte genug davon.
    --------------------------------------------------(Rene Descartes)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von McSush ()

  • Aha, wenigstens etwas:

    Notice: ffmpeg_movie::__construct() []: Header: 4FD11A01 in /var/kunden/webs/TimMichael/beispiel/beispiel.php on line 9

    Notice: ffmpeg_movie::__construct() []: Profile 1: frmrtq_postproc=7, bitrtq_postproc=29 LoopFilter=0, MultiRes=0, FastUVMC=0, Extended MV=0 Rangered=0, VSTransform=1, Overlap=1, SyncMarker=0 DQuant=1, Quantizer mode=0, Max B frames=0 in /var/kunden/webs/TimMichael/beispiel/beispiel.php on line 9
    Array ( )
  • jo, also meine starke Vermutung ist,
    daß beim Erstellen des Objektes der Konstruktor der Klasse auf die Film-Datei zugreifen wollte, ihm dies jedoch verweigert wurde.
    Warum? save_mode = on , eventuell ansonsten noch ein Rechte-Problem, wenn ftp und apache 2 verschiedene User sind.
    Dann halt chmod 777 und dann heißt's hoffentlich: Film ab ;)
    Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Jeder glaubt, er hätte genug davon.
    --------------------------------------------------(Rene Descartes)
  • Hallo,

    ich habe meinem Technischen Leiter bezüglich Safe-Mode bescheit gesagt. Ich denke, dass er das bis nachher gemacht hat (ich bin jetzt zu Faul dafür xD).

    Also soweit ich noch weiß, sind das die gleichen User und Schreibrechte sind gesetzt. Was mich nur wundert: Der Grundordner des neuen Gnex hat 777-Rechte, aber das WBB3 kann die Option-PHP-datei nicht abändern.

    Hast Du nicht Lust bei Gnex mitzumachen? Würde mich über eine PN freuen. :)

    Vielen Dank für deine Hilfe; werde mich auf jedenfall heute Abend oder Morgen Nachmittag nochmal melden, obs funktioniert oder nicht.
  • uff, also ...
    die ffmpeg-php ist richtig installiert, wissen wir..
    auf die mpeg-datei kann zugegriffen werden, wissen wir auch...

    ein heißer tipp von google:
    wiki.dreamhost.com/index.php/FFmpeg

    die 15 abarbeitungspunkte ...
    haste alles gemacht?


    ....
    hm, chmod 775 für's bin, lib und tmp-verzeichnis ...
    bin ich der Einzige, dem das komisch vorkommt? *grübel*
    Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Jeder glaubt, er hätte genug davon.
    --------------------------------------------------(Rene Descartes)