Назад | Перейти на главную страницу

FFMPEG работает в консоли, но не работает в PHP-скрипте в Ubuntu

У меня есть это приложение, в котором мне нужно преобразовать видео файлы в MP4, а затем сжать его. Я пытаюсь использовать FFMPEG, чтобы это работало. Пробовал командные строки в консоли, и он отлично работает

Преобразование

ffmpeg -i teste.avi teste.mp4

Сжатие

ffmpeg -i teste.mp4 -acodec mp2 teste.mp4

Но когда я делаю то же самое в сценарии PHP, он начинает кричать, что что-то называется GLIBCXX не установлен. Это ошибка:

ffmpeg: /opt/lampp/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/lib/i386-linux-gnu/libjack.so.0)
ffmpeg: /opt/lampp/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /usr/lib/i386-linux-gnu/libjack.so.0)
ffmpeg: /opt/lampp/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /usr/lib/i386-linux-gnu/libjack.so.0)
ffmpeg: /opt/lampp/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /usr/lib/i386-linux-gnu/libzmq.so.3)
ffmpeg: /opt/lampp/lib/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /usr/lib/i386-linux-gnu/libzmq.so.3)
ffmpeg: /opt/lampp/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/lib/i386-linux-gnu/libopencv_core.so.2.4)
ffmpeg: /opt/lampp/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /usr/lib/i386-linux-gnu/libopencv_core.so.2.4)
ffmpeg: /opt/lampp/lib/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /usr/lib/i386-linux-gnu/libopencv_core.so.2.4)

Это мой сценарий

$r = shell_exec("ffmpeg -i $file_path $output_path 2>&1"); //convert
$r = shell_exec("ffmpeg -i $file_path -acodec mp2 $file_path 2>&1"); //compress

Я запускаю скрипт на Ubuntu

@редактировать Я могу запустить, например, shell_exec ('ls')

Вы используете сервер XAMPP, поэтому все внутри него работает с библиотеками, которые поставляются с ним. Проблема в том, что теперь вы пытаетесь запустить программу, которая использует системные библиотеки и в среде, которая была настроена для использования определенной другой библиотеки. У вас есть два варианта:

  • Установите стек LAMP в свой Ubuntu из репозитория. tasksel делает это легким. Таким образом, PHP будет работать в той же среде, что и ffmpeg.
  • Установка LD_LIBRARY_PATH к глобальным значениям внутри вашего PHP-скрипта везде, где вы собираетесь запускать ffmpeg. Вы можете найти эти значения, если запустите ldconfig -v | grep \/.

Чтобы исправить это, я зашел в / usr / lib, поискал libstdc ++ (в этом каталоге есть более новые версии) и скопировал его в / opt / lampp / lib.

Я сделал резервную копию исходного файла и вставил новый файл и БУМ! Это сработало! :)

Надеюсь, это сработает и для вас.