皆さんこんにちは。どんぶラッコです。
皆さんは ffmpeg をご存知でしょうか。動画や音声を編集することができる便利なコマンドですね。
これをLaravel上で使えるようにしてくれるのが laravel-ffmpeg です。
詳しい導入手順などはこちらの記事がとても参考になりました!
こちらの記事と公式のドキュメントを読みながら進めていけば設定はさくっと完了するのですが、実際にライブラリを使ってコーディングをした時に「これどうしたらいいんだ?」というポイントがあったので、それを解説していこうと思います。
前提: ffmpeg コマンドの導入
このライブラリを使うには、ffmpeg
と ffprobe
コマンドが使えることが前提です!
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"
最後に、.env
にffmpeg
コマンドの位置を書いておきます。
FFMPEG_BINARIES=/usr/bin/ffmpeg
FFPROBE_BINARIES=/usr/bin/ffprobe
これで設定は完了です!
使い方
では、実際の使い方です。
今回は下記のコマンドを作ってみます。
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);
皆さんも挑戦してみてください!