Laravel

Docker × LaravelでFFMpegを使う方法を使う方法

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

オススメ本
Web技術を勉強するなら、かなりオススメの雑誌です。毎月新しい発見があります。ついに最終号・・・、みなさん買いましょう!!
読んで損することはない名著。命名で悩むことが多い人はこの本がオススメです。

⇨ Laravel 記事の目次はこちら

Docker で Laravel の環境構築したときに FFMpeg を使う方法についてまとめました。

FFMpeg を使う方法

アプリケーションコンテナの Dockerfile

FROM php:7.4-fpm-buster
RUN apt-get update
RUN apt-get install -y ffmpeg

アプリケーションコンテナで composer を使ってインストール

// appコンテナ(アプリケーションコンテナ)に入る
docker compose exec app bash
// pbmedia/laravel-ffmpegをインストール
composer require pbmedia/laravel-ffmpeg

config/app.php に追記する

providers と、aliases の配列に、追記します。

// config/app.php

'providers' => [
    ...
    ProtoneMedia\LaravelFFMpeg\Support\ServiceProvider::class,
    ...
];

'aliases' => [
    ...
    'FFMpeg' => ProtoneMedia\LaravelFFMpeg\Support\FFMpeg::class
    ...
];

config を変更したら

コマンドで

php artisan config:cache

して反映させましょう。

これで、Docker で構築した Laravel プロジェクト内で、FFMpeg が使えるようになりました。

実装環境

docker-compose のバージョン

version: "3"

アプリケーション用コンテナの Dockerfile

FROM php:7.4-fpm-buster

もし、FFMpeg や FFprobe が見つからないエラーが発生したら?

binary が見つからない等のエラーが出た場合は、

バイナリデータの場所を特定する

アプリケーションコンテナに入って、which コマンドで探します。

//「app」コンテナの場合
docker compose exec app bash
which ffmpeg
// /usr/bin/ffmpegと出力されたと仮定する

config でパスを指定する

app コンテナで

php artisan vendor:publish --provider="Pbmedia\LaravelFFMpeg\FFMpegServiceProvider"

これによって、config/laravel-ffmpeg.php が生成され、内容は

<?php

return [
    'default_disk' => 'local',

    'ffmpeg' => [
        'binaries' => env('FFMPEG_BINARIES', 'ffmpeg'),
        'threads' => 12,
    ],

    'ffprobe' => [
        'binaries' => env('FFPROBE_BINARIES', 'ffprobe'),
    ],

    'timeout' => 3600,
];

このように書かれています。

なので、環境変数でバイナリーのパスを入力します。

docker-compose.yml

app コンテナの enviroment に追記します。

    environment:
      //追記
      - FFMPEG_BINARIES=/usr/bin/ffmpeg
      - FFPROBE_BINARIES=/usr/bin/ffprobe

追記したら、ビルドしなおします。

docker compose up -d --build

以上で使えるようになるはずです。

実装方法

やりたい圧縮方法圧縮方法にもよりますが、基本形は

use FFMpeg

~~~~~~

FFMpeg::fromDisk('local')
    ->open('movie.mp4')

    ->exportForHLS()
    ->setSegmentLength(10)

    ->toDisk('local')
    ->save('movie2.mp4');

こんな感じで、

  1. 元ファイルを指定
  2. 圧縮や編集の指定
  3. 出力先の指定

をすれば OK です。

色々やろうと思えば、圧縮や編集の指定のところが長くなると思います。

どんなことができるかについては、ドキュメントを参照してみてください。

⇨ ドキュメント

まとめ

以上です。誰かの参考になればと思います。

このブログは広告のクリックによって支えられています。ありがとうございます。

それでは!

人気記事

PHP7.4 + Laravel6 のプロジェクトを AWS EC2 にデプロイする

【laravel-breadcrumbs】Laravel でパンくずリストを実装する