Search code examples
amazon-web-servicesffmpegamazon-elastic-beanstalk

Install ffmpeg on elastic beanstalk using ebextensions config


I'm attempting to install an up to date version of ffmpeg on an elastic beanstalk instance on amazon servers. I've created my config file and added these container_commands:

    container_commands:
        01-ffmpeg:
            command: wget -O/usr/local/bin/ffmpeg http://ffmpeg.gusari.org/static/64bit/ffmpeg.static.64bit.2014-03-05.tar.gz
            leader_only: false
        02-ffmpeg:
            command: tar -xzf /usr/local/bin/ffmpeg
            leader_only: false
        03-ffmpeg:
            command: ln -s /usr/local/bin/ffmpeg /usr/bin/ffmpeg
            leader_only: false

Command 01 and 03 seems to work perfectly but 02 doesn't seem to work so ffmpeg doesn't unzip. Any ideas what the issue might be?

Thanks, Helen


Solution

  • A kind person at Amazon helped me out and sent me this config file that works, hopefully some other people will find this useful:

    # .ebextensions/packages.config
    packages:
      yum:
        ImageMagick: []
        ImageMagick-devel: []
    commands:
      01-wget:
        command: "wget -O /tmp/ffmpeg.tar.xz https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz"
      02-mkdir:
        command: "if [ ! -d /opt/ffmpeg ] ; then mkdir -p /opt/ffmpeg; fi"
      03-tar:
        command: "tar xvf /tmp/ffmpeg.tar.xz -C /opt/ffmpeg"
      04-ln:
        command: "if [[ ! -f /usr/bin/ffmpeg ]] ; then ln -sf /opt/ffmpeg/ffmpeg-4.2.2-amd64-static/ffmpeg /usr/bin/ffmpeg; fi"
      05-ln:
        command: "if [[ ! -f /usr/bin/ffprobe ]] ; then ln -sf /opt/ffmpeg/ffmpeg-4.2.2-amd64-static/ffprobe /usr/bin/ffprobe; fi"
      06-pecl:
        command: "if [ `pecl list | grep imagick` ] ; then pecl install -f imagick; fi"
    

    Edit:
    The above code works for me today 2020-01-03, in Elastic Beanstalk environment Python 3.6 running on 64bit Amazon Linux/2.9.17.
    https://johnvansickle.com/ffmpeg/ is linked from the official ffmpeg site.
    (The former static build from Gusari does not seem available anymore.)

    Warning:
    The above will always download the latest release when you deploy. You're also depending on johnvansickle's site being online (to deploy), and his URL not changing. Two alternative approaches would be:

    • Download the .tar.xz file to your own CDN, and let your deployment download from your own site. (That way, if John's site has a moment of downtime while you're deploying, you're unaffected. And you won't be surprised by the ffmpeg version changing without you realising.)
    • Specify a version number like https://johnvansickle.com/ffmpeg/old-releases/ffmpeg-4.2.2-amd64-static.tar.xz.