Giter Club home page Giter Club logo

heroku-buildpack-ffmpeg's Introduction

Heroku Buildpack with FFmpeg

Practically all FFmpeg buildpacks we have found simply contain static binaries in their repository and not much else. This is an issue regarding maintainability and security. This is why this buildpack exists. It provides a way from official FFmpeg source code to binaries accessible via PATH environment variable in Heroku slug running your application.

You might ask why not to use some Heroku Add-on or other third-party service like typical Heroku user? We think they are expensive, slow or limited for what we need.

Usage

Add buildpack to your existing app:

heroku buildpacks:add https://github.com/kontentcore/heroku-buildpack-ffmpeg

If you want to see changes immediately, create an empty commit:

git commit --allow-empty -m 'Add FFmpeg buildpack'

See for yourself:

git push heroku master
# …
heroku run ffmpeg -version
# Running ffmpeg -version on ⬢ kc-ffmpeg... up, run.2925 (Hobby)
# ffmpeg version 4.1.1 Copyright (c) 2000-2019 the FFmpeg developers
# built with gcc 7 (Ubuntu 7.3.0-27ubuntu1~18.04)
# configuration: --prefix=/app/.ffmpeg --enable-nonfree --enable-gnutls
# libavutil      56. 22.100 / 56. 22.100
# libavcodec     58. 35.100 / 58. 35.100
# libavformat    58. 20.100 / 58. 20.100
# libavdevice    58.  5.100 / 58.  5.100
# libavfilter     7. 40.101 /  7. 40.101
# libswscale      5.  3.100 /  5.  3.100
# libswresample   3.  3.100 /  3.  3.100

As you can ffmpeg and other FFmpeg binaries are accessible via PATH environment variable.

Behind the Scenes

We utilize only bin/compile script expected by Heroku Buildpack API. In this phase we download pre-build binaries from AWS S3 for specified FFmpeg version and Heroku stack. Building FFmpeg from sources during this phase is something that would be great but it is not implemented.

Heroku stack your app is running on is something you have to configure yourself.

Desired FFmpeg version cat be set by FFMPEG_VERSION config var. It defaults to whatever we have seen as the last stable version which is 4.1.1 as of this writing.

The AWS S3 bucket can be overridden by setting FFMPEG_S3_BUCKET config var. It defaults to kc-heroku-buildpack-binaries. We expect to find binary archives with these keys: ffmpeg/$STACK/$FFMPEG_VERSION.tar.xz.

Building Binary Archives

We use Docker with Heroku-18 build image. It is simple and straightforward.

The code itself should build FFmpeg on Cedar-14 but it requires more complicated setup. We have no need for it, so we do not support it.

Run the following to build and publish binary archive:

docker build -t heroku-buildpack-ffmpeg .
docker run \
  -e "AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id)"
  -e "AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key)" \
  heroku-buildpack-ffmpeg

We use AWS CLI in the example above, but you can use anything that suits you. However, AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY are required. There are other environment variables which affect the build process and were described before:

  • FFMPEG_S3_BUCKET
  • FFMPEG_VERSION

heroku-buildpack-ffmpeg's People

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.