a-blog cmsでmp4ファイルのサムネイルを作成する校正オプション

Webサイトで動画を掲載するときはYoutubeやVimeo、商用用途のものだとJSTREAMやBrightcoveなどの動画配信サービスを利用すると良いですが、容量がそれほど多くないものや、ユーザからの投稿を受け付ける場合はmp4ファイルを直接掲載することもあります。

a-blog cmsでmp4ファイルを掲載する場合、ffmpegを使用してサムネイル(videoタグのposter画像)を自動生成する校正オプションを作成しました。参考元サイトのプログラムほぼそのままですが、ffmpegをインストールする手順がまとまっているところが少なかったので、覚え書きしておきます。

サーバにFFMPEGをインストールする

# cd /usr/local/bin
# mkdir ffmpeg
# cd ffmpeg
# wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
# tar -xf ffmpeg-release-amd64-static.tar.xz
# ln -s /usr/local/bin/ffmpeg/ffmpeg-4.3.1-amd64-static/ffmpeg /usr/bin/ffmpeg

HTMLソースに校正オプションを適用

<a href="%{ARCHIVES_DIR}{movie_file@path}"><img src="%{ARCHIVES_DIR}{movie_file@path}[movieThumbnail]" alt=""></a>

/extension/acms/Corrector.php

    /**
     * movieThumbnail
     * FFMPEGでサムネイルを作成する。入力時のエラーチェックは呼び出す前に終わらせる。
     *
     * @param string $path - mp4ファイルのパス(001/202108/c0e829f0a0d864742d2fa2c7973ae416d9d447771b55dcf479d26e45beb30f43.mp4)
     * @return string      - JPGのパス(001/202108/c0e829f0a0d864742d2fa2c7973ae416d9d447771b55dcf479d26e45beb30f43.jpg)
     */
    public function movieThumbnail($path){

      // mp4の絶対パスを取得
      $real_path = __DIR__ . '/../../archives/' . $path;

      // JPEGのパスを定義
      $jpeg_path = str_replace('.mp4', '.jpg', $path);
      $real_jpeg_path = str_replace('.mp4', '.jpg', $real_path);

      // JPEGがない場合に実行
      if( !file_exists($real_jpeg_path) ){
        // オプションの指定
        $command_ffmpeg    = "ffmpeg"; // /usr/local/bin/
        $command_video     = " -i " . $real_path;
        $command_extension = " -f image2"; 
        $command_vframes   = " -vframes 1"; // サムネイル化するフレーム
        $command_ss        = " -ss 1"; // サムネイル化する時間
        $command_size      = " -s 640x360"; // サムネイルのサイズ
        $command_img       = " " . $real_jpeg_path;

        // コマンドを実行
        $command = $command_ffmpeg . $command_video . $command_extension . $command_vframes . $command_ss . $command_size . $command_img . " 2>&1";
        exec($command, $output, $result);

        // エラーがなければJPEGのパスを返す
        if($result != 0){
          return "Error" . $command;
        } else {
          return $jpeg_path;
        }
      } else {
        return $jpeg_path;
      }
    }

参考記事


関連記事

この記事のハッシュタグ から関連する記事を表示しています。

コピペでOK!a-blog cmsで使える校正オプション

a-blog cmsでPNGからJPGに変換する校正オプション