Example #1
0
 /**
  * 動画変換
  *
  * @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;
 }