루젠소프트 로고

216.73.216.34 TODAY : 2,075

기술문서

 > 

PHP

PHP 또는 웹사이트에서 동영상 해상도 확인하는 방법

PHP 또는 웹사이트에서 동영상 해상도 확인하는 방법
평점 10.0 라이센스 free
사용자평점 10.0 운영체제
다운로드 11 파일크기 0
제작사 LUZENSOFT 등록일 2025-06-05 15:56:34
조회수 34
- 설명
  1. FFmpeg 사용 (가장 강력하고 정확한 방법): FFmpeg은 오디오/비디오 파일을 처리하는 데 가장 강력하고 널리 사용되는 오픈 소스 도구입니다. 서버에 FFmpeg이 설치되어 있다면, PHP에서 exec() 함수를 통해 FFmpeg 명령어를 실행하여 동영상 메타데이터를 추출할 수 있습니다.

    • 서버 환경: FFmpeg이 서버에 설치되어 있어야 합니다.

    • PHP exec() 함수: PHP에서 외부 명령어를 실행할 수 있어야 합니다 (보안상 비활성화된 경우가 많음).

    FFmpeg 명령어 예시:이 명령어를 실행하면 동영상 파일의 모든 정보가 터미널에 출력되고, 여기서 해상도(예: 1920x1080) 정보를 파싱할 수 있습니다.PHP 

    <?php
    function getVideoDimensionsFFmpeg(string $filePath): ?array
    {
        if (!file_exists($filePath)) {
            return null;
        }
    
        // FFmpeg 경로를 정확히 지정하거나 PATH 환경 변수에 등록되어 있어야 합니다.
        // Windows: 'ffmpeg -i "' . $filePath . '" -hide_banner'
        // Linux/macOS: 'ffmpeg -i ' . escapeshellarg($filePath) . ' -hide_banner'
        $command = 'ffmpeg -i ' . escapeshellarg($filePath) . ' -hide_banner';
        $output = [];
        $returnVar = 0;
    
        // exec 함수를 사용하여 FFmpeg 명령 실행 및 출력 캡처
        exec($command . ' 2>&1', $output, $returnVar);
    
        if ($returnVar !== 0) {
            // FFmpeg 실행에 오류 발생
            // error_log("FFmpeg error for file: " . $filePath . " Output: " . implode("n", $output));
            return null;
        }
    
        // 출력에서 해상도 정보 파싱
        $dimensions = null;
        foreach ($output as $line) {
            // 'Stream #0:0(eng): Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9]'
            if (preg_match('/Video:.*?, (d+)x(d+)/', $line, $matches)) {
                $dimensions = [
                    'width' => (int)$matches[1],
                    'height' => (int)$matches[2]
                ];
                break; // 해상도를 찾았으면 루프 종료
            }
        }
        return $dimensions;
    }
    
    $mp4FilePath = 'path/to/your/video.mp4'; // 실제 MP4 파일 경로
    $dimensions = getVideoDimensionsFFmpeg($mp4FilePath);
    
    if ($dimensions) {
        echo "동영상 해상도: " . $dimensions['width'] . "x" . $dimensions['height'] . PHP_EOL;
    } else {
        echo "동영상 해상도를 가져올 수 없거나 파일이 유효하지 않습니다." . PHP_EOL;
    }
    ?>
    

    주의: escapeshellarg() 함수는 보안을 위해 사용자 입력으로 파일 경로를 사용할 경우 필수적입니다.

  2. PHP 코드 예시:

  3. Bash 

    ffmpeg -i input.mp4 -hide_banner
    
  4. getID3() 라이브러리 사용: getID3()는 MP3, MP4 등 다양한 미디어 파일의 ID3 태그 및 기타 메타데이터를 PHP에서 읽을 수 있게 해주는 오픈 소스 PHP 라이브러리입니다. FFmpeg을 설치하기 어려운 공유 호스팅 환경 등에서 유용하게 사용될 수 있습니다.

    • 설치: Composer를 통해 설치할 수 있습니다: composer require james-heinrich/getid3

    • 사용법:PHP 

      <?php
      require_once 'vendor/autoload.php'; // Composer autoload
      
      function getVideoDimensionsGetID3(string $filePath): ?array
      {
          if (!file_exists($filePath)) {
              return null;
          }
      
          $getID3 = new getID3();
          $fileInfo = $getID3->analyze($filePath);
      
          if (isset($fileInfo['video']['resolution_x']) && isset($fileInfo['video']['resolution_y'])) {
              return [
                  'width' => $fileInfo['video']['resolution_x'],
                  'height' => $fileInfo['video']['resolution_y']
              ];
          }
          return null;
      }
      
      $mp4FilePath = 'path/to/your/video.mp4'; // 실제 MP4 파일 경로
      $dimensions = getVideoDimensionsGetID3($mp4FilePath);
      
      if ($dimensions) {
          echo "동영상 해상도: " . $dimensions['width'] . "x" . $dimensions['height'] . PHP_EOL;
      } else {
          echo "동영상 해상도를 가져올 수 없거나 파일이 유효하지 않습니다." . PHP_EOL;
      }
      ?>
      
    • 장점: PHP로만 구현되므로 서버 환경에 대한 제약이 적습니다.

    • 단점: 매우 큰 파일이나 손상된 파일에서는 성능 문제 또는 오류가 발생할 수 있습니다. FFmpeg만큼 모든 코덱과 포맷에 완벽하게 대응하지 못할 수도 있습니다.

  5. Javascript (클라이언트 측)에서 확인 후 PHP로 전송: 만약 클라이언트(브라우저)에서 파일을 업로드할 때 해상도를 확인하고 싶다면, JavaScript를 사용하여 <video> 요소를 통해 해상도를 얻은 후, AJAX 등으로 PHP 스크립트에 전송하는 방법도 있습니다.

    • 장점: 서버 부하를 줄이고, FFmpeg/getID3 설치가 필요 없습니다.

    • 단점: 파일이 서버에 업로드되기 전에만 가능하며, 서버 측에서 신뢰할 수 있는 검증이 필요한 경우에는 적합하지 않습니다.

 

Javascript (클라이언트 측)에서 확인 후 PHP 로 전송하기 > 적용 방법 자세히 보기

 

적용된 페이지 확인 하기 : https://pds.luzensoft.com/detailview.php?fno=53178