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;
}
}
参考記事
Re:Re:Re:a-blog cmsでmp4ファイルのサムネイルを作成する校正オプション
テストです。に対する返信です。に対する返信です。
投稿者名 テスト 三郎