ffmpeg: symbol lookup error: ffmpeg: undefined symbol: frame_hook_process

Andi22

New Member
Hallo,

wenn ich einen FFMPEG Befehl über PHP exec() ausführen will bekomme ich folgenden Fehler über das Output Array:

Code:
FFmpeg version SVN-r16683, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: --enable-shared --enable-swscale --enable-gpl --prefix=/usr
  libavutil     49.14. 0 / 49.14. 0
  libavcodec    52.11. 0 / 52.25. 0
  libavformat   52.24. 1 / 52.32. 0
  libavdevice   52. 1. 0 / 52. 2. 0
  libswscale     0. 6. 1 /  0. 7. 1
  built on Jan 19 2009 14:43:34, gcc: 4.1.2 20061115 (prerelease) (SUSE Linux) Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press [q] to stop encoding
ffmpeg: symbol lookup error: ffmpeg: undefined symbol: frame_hook_process

Das komische ist nur - wenn ich denselben Befehl, der über exec ausgeführt wird, direkt in Putty in die Kommandozeile eingebe, dann funktionierts - also was kann hier falsch sein - ich bin für jeden noch so kleinen Tipp dankbar. Der einzige Unterschied der bei der Ausführung zwischen Kommandozeile direkt und PHP besteht ist wahrscheinlich der User - einmal root und einmal wwwrun. Die Fehlermeldung an sich sagt ja, dass er irgendein Symbol nicht findet. Dieses frame_hook_process ist anscheined Teil von libavformat - http://lxr-itec.uni-klu.ac.at/ffmpeg/source/libavformat/framehook.c#L94

Googlen brachte mich auch nicht weiter.

Folgender Befehl wird ausgeführt:

Code:
ffmpeg -i /srv/www/vhosts/xxx.de/httpdocs/testvideo.avi -b 512k -ar 22050 -ab 64k -y -f flv /srv/www/vhosts/xxx.de/httpdocs/testvideo.flv
 
Last edited by a moderator:
Ich hab die Lösung selbst gefunden :)

Das Problem war, dass FFMPEG schon einmal auf dem Server installiert war und zwar in /usr/bin/ffmpeg - Da ich in PHP nur den Befehl exec("ffmpeg ...") eingegeben habe ohne genaue Pfadangabe, benutzt PHP /usr/bin/ffmpeg - also eine alte Installation und damit gab es dann die Probleme mit dem Symbol lookup error, da diese lib nicht mehr gefunden wurde, weil sie von einer neuen Installation überschrieben/gelöscht wurde. Die neue Installation befindet sich unter /usr/local/bin/ffmpeg und die benutzte die Shell, beim ausführen des Kommandos "ffmpeg ..."

Damit erklärt sich auch warum es über die Shell direkt funktioniert hat und über PHP der gleiche Befehl nicht.

Zur Lösung in PHP exec einfach den Pfad zu ffmpeg mit angeben, also:

Code:
exec("/usr/local/bin/ffmpeg ...")
 
Back
Top