Laravel

Laravel で ffmpeg を使う! laravel-ffmpegの使い方

皆さんこんにちは。どんぶラッコです。

皆さんは ffmpeg をご存知でしょうか。動画や音声を編集することができる便利なコマンドですね。

これをLaravel上で使えるようにしてくれるのが laravel-ffmpeg です。

詳しい導入手順などはこちらの記事がとても参考になりました!

こちらの記事と公式のドキュメントを読みながら進めていけば設定はさくっと完了するのですが、実際にライブラリを使ってコーディングをした時に「これどうしたらいいんだ?」というポイントがあったので、それを解説していこうと思います。

前提: ffmpeg コマンドの導入

このライブラリを使うには、ffmpegffprobe コマンドが使えることが前提です!

ffmpeg -version が動作するか確認してください。

ffmpeg -version   
ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
built with Apple clang version 12.0.0 (clang-1200.0.32.27)

ない場合はインストールが必要です。

mac に直接いれる場合は homebrew を使ってインストールできます。

brew install ffmpeg

Linuxサーバに導入する場合は様々な方法があります。

私の場合、 FFmpeg Static builds を利用して設定しました ( 参考記事 )

wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz
tar xvfJ ffmpeg-git-amd64-static.tar.xz
sudo cp -av ffmpeg-git-20201128-amd64-static/ffprobe /usr/local/bin/
sudo cp -av ffmpeg-git-20201128-amd64-static/ffmpeg /usr/local/bin/

インストール・セットアップ

では、公式の手順に則り設定をしていきましょう。

まずは composer を使ってインストール。

composer require pbmedia/laravel-ffmpeg

インストール完了後、config/app.php に設定を追加。

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

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

そして、 vendor:publish コマンドを実行します。

php artisan vendor:publish --provider="ProtoneMedia\LaravelFFMpeg\Support\ServiceProvider"

最後に、.envffmpegコマンドの位置を書いておきます。

FFMPEG_BINARIES=/usr/bin/ffmpeg
FFPROBE_BINARIES=/usr/bin/ffprobe
どんぶラッコ
どんぶラッコ
コマンドのパスは which ffmpeg で確認してね!

これで設定は完了です!

使い方

では、実際の使い方です。

今回は下記のコマンドを作ってみます。

ffmpeg -i input.webm -af "adelay=10s|10s" output.webm

inputのファイルはLaravel内のstorageに、outputしたファイルは AWS S3 にアップロードされるように設定します。

すると、こんな感じになります。

// エイリアスを貼ってない場合は useに記述
use ProtoneMedia\LaravelFFMpeg\Support\FFMpeg;

...

$audioFilePath = Storage::disk('local')->put('input', 'input.webm');

FFMpeg::open($audioFilePath)
    ->addFilter(['-af', 'adelay='.$marginMs.'|'.$marginMs])
    ->export()
    ->toDisk('s3')
    ->inFormat(new \FFMpeg\Format\Video\WebM)
    ->save($audioFilePath);
どんぶラッコ
どんぶラッコ
オプションは addFilter を使って表現するのがポイントですね!

皆さんも挑戦してみてください!

ABOUT ME
どんぶラッコ
ECコンサルタント、システムエンジニアを経て、quintet株式会社CTOに就任。普段はNuxt.jsやLaravelを使用しています。

\面白いと思ったら/

記事のシェア & Twitter のフォロー をお願いします!

@proglearn
一緒によく読まれている記事

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です