/** * 動画変換 * * @param Model $Model モデル * @param array $data received post data * @param array $video Video * @param array $noConvert File * @param int $roomId rooms.id * @return mixed Array on success, false on error * @throws InternalErrorException */ private function __convertVideo(Model $Model, $data, $video, $noConvert, $roomId) { // --- 動画変換 // アップロードファイルの受け取りと移動 $noConvertPath = $noConvert['File']["path"]; $noConvertSlug = $noConvert['File']["slug"]; $noConvertExtension = $noConvert['File']["extension"]; // サムネイル名は動画名で末尾jpgにしたものをセット $videoName = explode('.', $noConvert['File']["name"])[0]; // アップロード済みのvideoFileの入力値を、$dataから除外 unset($data[$Model->alias]['videoFile']); // mp4は変換しない if ($noConvertExtension != "mp4") { // 例)ffmpeg -y -i /var/www/html/movies/original/MOV_test_movie.MOV -acodec libmp3lame -ab 128k -ar 44100 -ac 2 -vcodec libx264 -r 30 -b 500k MOV_test_movie.mp4 // 動画変換 // 動画変換実施(元動画 > H.264) コマンドインジェクション対策 $strCmd = Video::FFMPEG_PATH . ' -y -i ' . escapeshellarg($noConvertPath . $noConvertSlug . '.' . $noConvertExtension) . ' ' . Video::FFMPEG_OPTION . " " . escapeshellarg($noConvertPath . $noConvertSlug . '.mp4') . ' 2>&1'; exec($strCmd, $arr, $ret); // 変換エラー時 if ($ret != 0) { $this->log("--- ffmpeg H.264 変換エラー", 'debug'); $this->log($strCmd, 'debug'); $this->log($arr, 'debug'); $this->log($ret, 'debug'); return false; } // Filesテーブルに変換後動画を登録。Delete->Insert $data[Video::VIDEO_FILE_FIELD]['File']['type'] = 'video/mp4'; $data[Video::VIDEO_FILE_FIELD]['File']['mimetype'] = 'video/mp4'; $data[Video::VIDEO_FILE_FIELD]['File']['path'] = '{ROOT}' . 'videos' . '{DS}' . $roomId . '{DS}' . $video['Video']['id'] . '{DS}'; $data[Video::VIDEO_FILE_FIELD]['File']['name'] = $videoName . '.mp4'; $data[Video::VIDEO_FILE_FIELD]['File']['alt'] = $videoName . '.mp4'; $data[Video::VIDEO_FILE_FIELD]['File']['extension'] = 'mp4'; $data[Video::VIDEO_FILE_FIELD]['File']['tmp_name'] = $noConvertPath . $noConvertSlug . '.mp4'; $data[Video::VIDEO_FILE_FIELD]['File']['size'] = filesize($noConvertPath . $noConvertSlug . '.mp4'); // ファイルチェック 変換後動画ファイル if (!($data = $Model->validateVideoFile($data, Video::VIDEO_FILE_FIELD, $Model->alias, 'mp4_id', 0))) { $this->log($Model->validationErrors, 'debug'); return false; } // ファイルの登録 変換後動画ファイル $data = $Model->saveVideoFile($data, Video::VIDEO_FILE_FIELD, $Model->alias, 'mp4_id', 0); // 元動画 ファイルのみ削除 $file = new File($noConvertPath . $noConvertSlug . '.' . $noConvertExtension); $file->delete(); } return $data; }