Ошибка ffmpeg MAMP "dyld: Библиотека не загружена"

Я использую ffmpeg для Mac OSX 10.7.3 в MAMP с помощью команды PHP exec(), у меня есть абсолютный путь, заданный для вызова ffmpeg, например.

/opt/local/bin/ffmpeg -i "/sample.avi"

Но я получаю следующую ошибку -

dyld: Library not loaded: /opt/local/lib/libjpeg.8.dylib  Referenced from: /opt/local/lib/libopenjpeg.1.dylib  Reason: Incompatible library version: libopenjpeg.1.dylib requires version 13.0.0 or later, but libJPEG.dylib provides version 12.0.0

N.B. ffmpeg был установлен через Macports.

Он работает из командной строки.

Что делать?

ИЗМЕНИТЬ

Я снова открыл это - изначально мысль shell_exec() решила проблему, но на самом деле ее следует называть по-другому - и я не осознал, пока не расследую дальше. Вот мой код с использованием shell_exec и все еще выдающий ошибку выше:

 $cmd = '/opt/local/bin/ffmpeg -h';
 $cmd = escapeshellcmd($cmd) . ' 2>&1';
 $output = shell_exec($cmd);
 var_dump($output);

Ответ 1

Проблема заключается в том, что DYLD_LIBRARY_PATH установлен в MAMP, и я установил ffmpeg через macports.

Это может быть не самое лучшее исправление, но теперь оно работает и работает:

В файле /Applications/MAMP/Library/bin/envvars и прокомментируйте следующие строки, как показано ниже:

#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#export DYLD_LIBRARY_PATH

и перезапустите Apache

Ответ 2

Комментировать строку #DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" будет работать в краткосрочной перспективе, но это может сломать другие вещи, поскольку вы удаляете строку, которую использует MAMP, чтобы сообщить серверу, где он хранит свои библиотеки.

Лучшим решением было бы изменить строку на это:

DYLD_LIBRARY_PATH="/usr/local/lib:/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"

так что вы просто добавляете /usr/local/lib: к уже заданному пути. Это говорит Apache, чтобы сначала посмотреть в /usr/local/lib, а затем, если это не сработает, посмотрите /Applications/MAMP/Library/lib.

Итак, если вы установите что-то через, скажем, Brew, и есть две версии, он будет выглядеть в том, который вы установили с помощью Brew, прежде чем он будет использовать все, что пришло с MAMP, что, скорее всего, будет устаревший. Но если это что-то, что появилось только с MAMP, что вы не устанавливали отдельно или не являетесь MAMP-специфичным, вы не будете его нарушать.