/** * サムネイル自動作成 * * @param Model $model モデル * @param array $video Video * @param array $convert 動画変換後ファイルデータ * @return void */ private function __generateThumbnail(Model $model, $video, $convert) { // 編集時サムネイルありの場合、自動作成しない $thumbnailSize = Hash::get($video, $model->alias . '.' . Video::THUMBNAIL_FIELD . '.size'); if (!empty($thumbnailSize)) { return; } // 元動画 $convertPath = $model->UploadFile->uploadBasePath . $convert['UploadFile']['path'] . $convert['UploadFile']['id'] . DS; $realFileName = $convert['UploadFile']["real_file_name"]; $videoName = explode('.', $realFileName)[0]; $tmpFolder = new TemporaryFolder(); $convertedFilePath = $tmpFolder->path . DS . $videoName . '.jpg'; // --- サムネイル自動作成 // 例) ffmpeg -i /var/www/html/movies/play/20130901_072755.mp4 -ss 1 -vframes 1 -f image2 /var/www/html/movies/play/20130901_072755.jpg // サムネイルは変換後のmp4 から生成する。mts からサムネイルを生成した場合、灰色画像になりうまく生成できなかった。ファイル形式によりサムネイル生成に制限がある可能性があるため。 // コマンドインジェクション対策 $strCmd = Video::FFMPEG_PATH . ' -i ' . escapeshellarg($convertPath . $videoName . '.mp4') . ' ' . Video::FFMPEG_THUMBNAIL_OPTION . ' ' . escapeshellarg($convertedFilePath); exec($strCmd, $arrImage, $retImage); // 変換エラー時 if ($retImage != 0) { $this->log('[' . __METHOD__ . '] ' . __FILE__ . ' (line ' . __LINE__ . ') ffmpeg thumbnail generat error', LOG_DEBUG); $this->log([$strCmd, $arrImage, $retImage], LOG_DEBUG); // return はしない } else { // サムネイルのファイル保存 /** @see AttachmentBehavior::attachFile() */ $model->attachFile($video, Video::THUMBNAIL_FIELD, $convertedFilePath); } }