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

Я использую ffmpeg на Mac OSX 10.7.3 в MAMP с помощью команды exec() PHP, у меня есть абсолютный путь для вызова 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 

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

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

Что делать?

РЕДАКТИРОВАТЬ

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

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

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

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

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

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

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

Комментирование строки #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-специфичным, вы не будете его нарушать.

Убедитесь, что PHP- exec использует ту же оболочку, что и вы, когда используете командную строку.

Вероятно, shell_exec .

См. Также php shell_Exec не работает, пока команда работает в оболочке .