Help us understand the problem. What is going on with this article?

【Laravel】ffmpegで動画ファイルからサムネイル画像を取得してS3にアップロードする方法

More than 3 years have passed since last update.

概要

  • ユーザが動画ファイルをアップロードしてサイトで表示するようなサービスで、その動画のサムネイル画像を自動で指定したいときってありませんか?
  • そういう時、いちいち動画の中からサムネイル用画像を切り出すのってめんどくさいですよね
  • そこでFFMpegを使って、動画の1フレーム目を自動的に画像として取り出して、サーバにアップロードする機能を実装しました

FFmpegのインストール

FFmpegとは、動画や音声の変換や合成などの処理が可能なオープンソースのソフトウェアです。

インストール方法は下記の公式サイトで詳しく説明されているため、そこを参考にインストールしてみてください。
https://trac.ffmpeg.org/wiki/CompilationGuide

ちなみに自分はCentOS6系にインストールしたかったので、下記の記事を参考にさせていただきました。
CentOS6.xにFFmpegをインストールする - Code Life

インストールが終わると、ターミナルなどからffmpeg -versionのコマンドを実行して、きちんとインストールされたかどうかを確かめましょう。

Laravel FFMpegのインストール

インストールが終わったら、次はLaravelで使うための準備です。LaravelからFFmpegを使うためには、PHP-FFMpegのラッパーライブラリであるLaravel-FFMpegをインストールします。

ちなみにこのライブラリは、Laravel 5.1以上かつPHP 7.0, 7.1のみで動作するそうなので、バージョンには気をつけてください。

composer.jsonに下記のように一行を追加します。

composer.json
   "require": {
        "pbmedia/laravel-ffmpeg": "1.1.4"
    },

その後、composer updateを実行して、ライブラリをインストールしてください。
インストール後は、config/app.phpを下記のように編集します。

config/app.php
'providers' => [
    ...
    Pbmedia\LaravelFFMpeg\FFMpegServiceProvider::class,
    ...
];

'aliases' => [
    ...
    'FFMpeg' => Pbmedia\LaravelFFMpeg\FFMpegFacade::class
    ...
];

サムネイル画像の取得方法

これで準備は整ったので、あとは実装です!
基本的にライブラリの使い方は、GitHubのREADME.mdをみればわかるのですが、例えば、ローカルに保存した動画ファイルから、サムネイル画像を自動で取得し、S3にアップロードする処理を実装しようとすると、下記のようになります。

app/Http/Controllers/VideoController.php
<?php
namespace App\Http\Controllers;

use FFMpeg;

    public function upload_video()
    {
        // ローカルにある動画ファイルからサムネイル画像を取得し、S3にアップロード
        FFMpeg::fromDisk('local')
            ->open($file) // ローカル(storage/app)に保存したファイル名を指定
            ->getFrameFromSeconds(1)
            ->export()
            ->toDisk('s3')
            ->save('temp/thumbnail.jpg');
    }

getFrameFromSeconds(1)というのが、「動画の1フレーム目」を表しています。
これで簡単にサムネイル画像の取得とアップロードが実装できちゃいます。
他にも動画の形式の変換や、音声ファイルの変換もできるようなので、ぜひLaravelで実装したい方はお試しください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした