You are not logged in.

  • Login

1

Monday, July 14th 2008, 2:06pm

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!

2

Monday, July 14th 2008, 2:30pm

Hi Gnex,

hast Du es schon mit dieser Schritt-für-Schritt-Anleitung versucht?

3

Monday, July 14th 2008, 3:20pm

Hallo,

leider funktioniert es nicht.

Source code

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

4

Monday, July 14th 2008, 3:41pm

Laß dir mal die extrahierten Parameter zur Kontrolle per echo ausgeben.

Außerdem zum check phpinfo() abfragen, ob FFMPEG-PHP richtig eingebunden wurde.

5

Monday, July 14th 2008, 3:46pm

Hallo,

er zeigt mir nichts an.

PHP-Info: http://gnex.info/__phpinfo__.php

Soweit ich das sehe, ist es richtig eingebunden.



MfG

6

Monday, July 14th 2008, 4:15pm

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...

7

Monday, July 14th 2008, 4:22pm

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: http://gnex.info/beispiel/beispiel.php - Ist keine Ausgabe zu sehen.

Source code

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

8

Monday, July 14th 2008, 4:39pm

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.

This post has been edited 1 times, last edit by "McSush" (Jul 14th 2008, 4:47pm)


9

Monday, July 14th 2008, 4:46pm

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 ( )

10

Monday, July 14th 2008, 4:52pm

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 ;)

11

Monday, July 14th 2008, 5:00pm

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.

12

Monday, July 14th 2008, 8:02pm

Hallo,

leider gibt er immer noch den selben Fehler aus, obwohl ich im Interface Safe-Mod ausgestellt habe.

13

Tuesday, July 15th 2008, 6:06am

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:
http://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*

14

Tuesday, July 15th 2008, 4:41pm

Hallo,

das wurde alles gemacht.

15

Tuesday, July 15th 2008, 8:51pm

Hallo,

nach langem hin und her funktioniert es nun.

Frage nun: Wie kann ich z.B. mein Logo in die Videos einbinden?

16

Tuesday, July 15th 2008, 9:09pm

Heyho! Woran lag's denn nun? *neugierig guck*


Und auf die kurze Frage, kurze Antwort: keine Ahnung. ;)
Aber vielleicht weiß ja jemand anders Rat?

17

Tuesday, July 15th 2008, 9:13pm

Hallo,

OpenBaseDir war aktiviert. :)

18

Tuesday, July 15th 2008, 11:36pm

Frage nun: Wie kann ich z.B. mein Logo in die Videos einbinden?

Gibt eigentlich viel Literatur dazu im Internet. Das richtige Stichwort ist ffmpeg watermark evtl auch mit ffmpeg-php

19

Wednesday, July 16th 2008, 1:03pm

Hallo,

hatte schon gesucht, nichts passendes gefunden. Danke! :)

Social bookmarks