Lambda内でFFmpegを使用して、S3内の動画ファイルを加工する方法に関してまとめていきます。実際に手を動かして実装していただきやすいように、1つ1つ手順をスクショや実際のコードを交えながら説明していきます。LambdaとFFmpegの使い方はある程度わかった上で説明していきます。わかっていない人は、別記事でそれぞれまとめていますので、参考にしてみてください。Lambdaに関してはこちらの記事でまとめています。コンソール画面の使い方、関数の作成方法、S3のトリガーの設定、テストの実行方法、ログの見方などの基本的な使い方は、わかっている前提で書いていきますので、もしわからない場合は以下の記事で説明しています。Lambdaに関してまとめていきます。初心者でも理解しやすいように、1つ1つ手順をスクショを交えて整理しながらサンプル機能を実装していきます。...FFmpegに関してFFmpegに関しては、以下の記事で使い方や各OSごとのインストール方法などまとめています。FFmpegで動画変換!各OSごとのインストール方法と使い方まとめFFmpegは動画を変換、編集などできるフリーソフトでターミナルで動かします。動画の切り取り、トリミング、クロップ、形式変換、速さを変える、画像を合成、などコマンドを使いこなせさえすれば基本的に幅広く可能です。今回はそのFFmpegの使い方を初心者でもわかるように紹介していきます。...HomebrewでMacにFFmpegをインストールする方法と使い方FFmpegは動画を変換、編集などできるフリーソフトでターミナルで動かします。この記事ではMacOSにHomebrewを使ってFFmpegをインストールする方法とFFmpegの使用方法を紹介します。6系,7系にFFmpegをインストールする手順FFmpegは動画を変換、編集などできるフリーソフトでターミナルで動かします。今回はFFmpegをCentOS6系、CentOS7系にインストールする方法をまとめていきます。...【windows】FFmpegをインストールする手順FFmpegは動画を変換、編集などできるフリーソフトでコマンドプロンプトで動かします。この記事ではこのFFmpegをWindowsにインストールする手順を1つずつスクショも交えながら紹介していきます。10.x画面はMacで説明していきますが、ほぼAWSのコンソール画面内でできるので、Windowsでも問題なくできるかと思います。FFmpegのダウンロードFFmpegの公式ページを開きます。↓「Download」をクリックしましょう。Builds」の一覧になりますが、特に指定がなければどれでも問題ないかと思います。左上のものを選択しました。クリックするとダウンロードが開始します。↓ダウンロードしたものを解凍すると以下のようになるかと思います。この中にあるFFmpegの実行ファイルを使用します。Lambda関数の作成ここからはLambda関数を作成していきます。10.xで作成していきました。実際のコードはこちらになります。今回は、S3に動画ファイルがアップロードされた際に、gifファイルに変換したものをS3の同じ階層にアップロードするというようなものになっています。${bucket}.`;};コードの部分ごとの説明は後ほど書いていきます。Lambdaに関してまとめていきます。初心者でも理解しやすいように、1つ1つ手順をスクショを交えて整理しながらサンプル機能を実装していきます。...こちらの記事で扱った内容ではコードはコンソール画面内で編集できましたが、今回はFFmpegの実行ファイルもアップロードしないといけないので、「コードエントリタイプ」は「.zipファイルダウンロード」で行います。先程のNode.jsのコードは別で編集しておきます。実行ファイルを含めたアップロードの手順を説明していきます。↓適当な場所に以下のような構成のフォルダを作成します。先程ダウンロードしたFFmpegの実行ファイルはbinフォルダ以下に設置します。index.jsの内容は先程のコードになっています。↓その階層のファイルを全て選択した状態で圧縮をします。↓「アーカイブ.zip」が作成されました。この作成されたzipファイルをアップロードします。あるミスとして、これらのファイルを束ねている上の階層のフォルダを圧縮してしまうとエラーになってしまうので注意です。その他の設定S3にトリガーを設定し、S3へのアクセス権限のあるロールを設定しましょう。タイムアウトの時間はデフォルトでは3秒ですが、おそらく足りないので適宜十分な時間を設定しておきましょう。コードの説明さて、先程のコードを1つずつ説明していきます。関数が呼び出されたらexports.handlerの中身が呼ばれるので上から順番に見ていきます。今回はS3へのファイルのアップロードをトリガーとしているので、eventにイベントの情報が格納されています。ここからファイルがアップロードされた、バケット名とキー名(ファイルパスとファイル名を組み合わせたもの)を取得し、それをもとにファイルの拡張子とファイル名を整理しています。sampleとなるようにしています。拡張子やファイル名は、あとでFFmpegのコマンドで使うために整理しています。S3のファイルのダウンロード取得したバケット名とキー名をパラメータに渡すことでそのファイルをダウンロードします。});ダウンロードしたファイルをtmp以下に一時的に保存この後の流れとして、ダウンロードしたファイルをFFmpegのコマンドで変換しますが、その際にuploaded_dataのままでは実行しづらいので、tmpフォルダ以下に設置します。Node.js公式のモジュールのfsを使用していきます。fsを使用できるようにこちらで予め読み込んでいます。require('fs');以下のようにして、tmp以下にダウンロードされたファイル名と同じ名前で一時的に保存します。実際にFFmpegのコマンドを実行していきます。以下のようにすることで、ターミナルで叩くのと同様に実行できるようにexecSyncを使えるようにしていきます。require('child_process').execSync;次に、アップロードしたFFmpegの実行ファイルを実際に使えるようにパスを通す必要があります。以下がそのためのコードです。':/var/task/bin';上記を記述することで、execSync関数でコマンドを実行することが出来ます。以下のようにしました。-y');ターミナルで実行するのと同様のコマンドになるように引数に渡します。今回は先程tmp以下に保存したファイルを、gifに変換したものを同様にtmp以下に出力するようにしています。サンプルなので簡単な例にしていますが、この部分を置き換えれば様々な変換にも対応できるかと思います。Node.jsでFFmpegを使うライブラリはありますが、やりたいことに対して書き方がわからない時があったので、execSyncで行うことにしています。出力ファイルをS3にアップロードFFmpegコマンドで出力されたgifファイルをS3にアップロードできるように、tmp以下に出力したものを取り出せるようにしていきます。先ほどと同様にfsを使っています。Error(error);});これを利用して以下のようにして、S3にアップロードをしています。});アップロード先はKeyで指定することができます。変換した結果は、outputフォルダ以下にアップロードするようにしています。このような流れで実装しました。LambdaでFFmpegを使用する流れをまとめていきました。今回のように実行ファイルも含めてアップロードして実行することもできるので、やれることの幅がとても広いと感じました。Lambdaを他のパターンでも使用していけるようにしていきたいです。当サイトはエックスサーバーで運営しています。方はこちらの記事を参考にしてください。仮想通貨1【windows】FFmpegをインストールする手順2FFmpegで動画変換!各OSごとのインストール方法と使い方まとめ3【簡単】MacにHomebrewをインストールする方法と基本的な使い方4HomebrewでMacにFFmpegをインストールする方法と使い方5macOSにXcodeをインストールしよう6BootCampでMacにWindows10をインストールする7〜初心者でもわかるswift入門〜基本文法からiOSアプリを開発するまで8【swift入門】apiを叩いてTableViewに表示させる9【Xcode】ファイル追加削除するときの注意10【入門】Reactチュートリアルをやりながら実践入門お問い合わせこちらからお願いいたします。