Heroku: FFMpeg установлен, но работник php не может его найти

Контекст

У меня очередь RabbitMQ, содержащая AMQPMessage, эти сообщения ссылаются на видео, которое нужно обработать (вырезать по существу и также закодировать в x264)

Вот код, вызывающий проблему (довольно простой)

        $ffprobe = FFProbe::create([
            'ffmpeg.binaries'  => '/usr/bin/ffmpeg',
            'ffprobe.binaries' => '/usr/bin/ffprobe',
        ]);

Сообщение об ошибке

TL;DR : Error: "Unable to load FFProbe"

[2019-12-03 14:55:07] messenger.ERROR: Ошибка при обработке сообщения App \ Api \ Message \ AMQPvideoFFMPEG. Отправка для повтора №1 с задержкой 1000 мс. Ошибка: «Не удалось загрузить FFProbe» {«сообщение»: «[объект] (App \ Api \ Message \ AMQPvideoFFMPEG: {})», «class»: «App \ Api \ Message \ AMQPvideoFFMPEG», «retryCount»: 1 , «задержка»: 1000, «ошибка»: «Не удалось загрузить FFProbe», «исключение»: «[объект] (Symfony \ Component \ Messenger \ Exception \ HandlerFailedException (код: 0): невозможно загрузить FFProbe в / app / vendor / symfony / messenger / Middleware / HandleMessageMiddleware.php: 80, FFMpeg \ Exception \ ExecutableNotFoundException (код: 0): Невозможно загрузить FFProbe в / app / vendor / php-ffmpeg / php-ffmpeg / src / FFMpeg / Driver / .php: 50, Alchemy \ BinaryDriver \ Exception \ ExecutableNotFoundException (код: 0): Исполняемый файл не найден, предлагается: / usr / bin / ffprobe в / app / vendor / alchemy / binary-driver / src / Alchemy / BinaryDriver / AbstractBinary. php: 160) "} []

Конфигурация и тесты

На Heroku есть 2 динамометра:

- web $(composer config bin-dir)/heroku-php-nginx -C config/packages/dev/heroku_nginx.conf public/
- worker php bin/console messenger:consume ffmpeg 

На этой платформе у меня также есть 3 сборочных пакета, смотрите ниже, с этим конкретным buildpack :

с пользовательским пакетом сборки для ffmpeg

Чтобы убедиться, что все доступно, вот результаты моих проверок:

 heroku run "ffmpeg -version" -a project-dev 
Running ffmpeg -version on ⬢ project-dev... up, run.6134 (Hobby)
ffmpeg version N-67574-g9d6ad68 Copyright (c) 2000-2014 the FFmpeg developers
built on Nov 12 2014 11:35:09 with gcc 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)
configuration: --enable-static --disable-shared --disable-asm --extra-libs=-L/app/vendor/libs/lib --extra-cflags=-I/app/vendor/libs/include --prefix=/app/vendor/ffmpeg --enable-libfdk-aac --enable-nonfree --enable-libx264 --enable-gpl
libavutil      54. 11.100 / 54. 11.100
libavcodec     56. 12.100 / 56. 12.100
libavformat    56. 12.103 / 56. 12.103
libavdevice    56.  2.100 / 56.  2.100
libavfilter     5.  2.103 /  5.  2.103
libswscale      3.  1.101 /  3.  1.101
libswresample   1.  1.100 /  1.  1.100
libpostproc    53.  3.100 / 53.  3.100
 heroku run "ffprobe -version" -a projet-dev
Running ffprobe -version on ⬢ projet-dev... up, run.2357 (Hobby)
ffprobe version N-67574-g9d6ad68 Copyright (c) 2007-2014 the FFmpeg developers
built on Nov 12 2014 11:35:09 with gcc 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)
configuration: --enable-static --disable-shared --disable-asm --extra-libs=-L/app/vendor/libs/lib --extra-cflags=-I/app/vendor/libs/include --prefix=/app/vendor/ffmpeg --enable-libfdk-aac --enable-nonfree --enable-libx264 --enable-gpl
libavutil      54. 11.100 / 54. 11.100
libavcodec     56. 12.100 / 56. 12.100
libavformat    56. 12.103 / 56. 12.103
libavdevice    56.  2.100 / 56.  2.100
libavfilter     5.  2.103 /  5.  2.103
libswscale      3.  1.101 /  3.  1.101
libswresample   1.  1.100 /  1.  1.100
libpostproc    53.  3.100 / 53.  3.100

Все хорошо !

Отказ от ответственности

Этот код хорошо работает на другой платформе (обрабатывается kubernetes), поэтому может потребоваться некоторая корректировка с помощью heroku. Но не могу найти.

Почему возникает эта ошибка, поскольку в моей конфигурации нет ошибок? Что мне здесь не хватает?


person Greco Jonathan    schedule 03.12.2019    source источник


Ответы (1)


Измените на:

    $ffprobe = FFProbe::create([
        'ffmpeg.binaries'  => '/app/vendor/ffmpeg_bundle/ffmpeg/bin/ffmpeg',
        'ffprobe.binaries' => '/app/vendor/ffmpeg_bundle/ffmpeg/bin/ffprobe',
    ]);

Вы использовали /usr/bin/, но ваши файлы там не находились.

  • Сценарий отредактировал ваш PATH, чтобы включить $HOME/vendor/ffmpeg_bundle/ffmpeg/bin, а для --prefix установлено значение /app/vendor/ffmpeg, поэтому я подозреваю, что это расположение файлов.

  • Запустите whereis ffmpeg. Если ffmpeg находится в вашем PATH, он даст вам местоположение.

  • Зачем использовать ffmpeg с 2014 года? Разработка ведется очень активно, поэтому вы упускаете тысячи обновлений. Кроме того, я рекомендую по возможности избегать компиляции без --disable-asm (то же самое для x264).

person llogan    schedule 03.12.2019
comment
Привет, спасибо, ты уверен насчет продавца? У вас есть права на журналы строительства heroku, я видел, что ffmpeg установлен в другом месте, но его нет у поставщиков, я протестирую оба пути и вернусь к вам, спасибо за вашу помощь - person Greco Jonathan; 03.12.2019
comment
@GrecoJonathan Не уверен, потому что это обоснованное предположение, но его должно быть достаточно легко проверить. - person llogan; 03.12.2019
comment
на heroku отображается только ffmpeg_module / ... по этой ссылке github .com / foxtrapplimited / heroku-buildpack-ffmpeg / blob / master / у нас есть полный путь, но я сомневаюсь, что мне следует вставить в указанный вами код - person Greco Jonathan; 03.12.2019
comment
И вы правы насчет версии buildpack, я буду использовать другой buildpack с последней сборкой, мне просто нужно сначала исправить путь - person Greco Jonathan; 03.12.2019
comment
@GrecoJonathan Я ничего не знаю ни о героку, ни о сборочных пакетах. Я просто смотрел на вашу конфигурацию ffmpeg. Сценарий добавляет $HOME/vendor/ffmpeg_bundle/ffmpeg/bin:$HOME/vendor/ffmpeg_bundle/libs/bin в ваш PATH, чтобы вы могли искать в этих двух каталогах исполняемые файлы. Или запустите whereis ffmpeg. Вам просто нужно осмотреться. Так как это испортило ваш PATH, вы можете просто попробовать 'ffmpeg.binaries' => 'ffmpeg', - person llogan; 03.12.2019
comment
На самом деле спасибо за все ваши комментарии и помощь, где я показал мне, что реальный путь моей установки ffmpeg был здесь: / app / vendor / ffmpeg_bundle / ffmpeg / bin / ffmpeg Хорошее предположение, спасибо - person Greco Jonathan; 04.12.2019