관리 메뉴

투덜이 개발자

PHP를 사용하여 동영상 인코딩을 수행하는 일반적인 방법 본문

Program Language/PHP

PHP를 사용하여 동영상 인코딩을 수행하는 일반적인 방법

엠투 2024. 11. 11. 10:18
반응형

우분투 서버에서 PHP를 사용하여 동영상 인코딩을 수행하는 일반적인 방법은 FFmpeg라는 도구를 사용하는 것입니다. FFmpeg는 강력한 멀티미디어 처리 라이브러리로, 동영상 및 오디오 인코딩, 디코딩, 변환, 스트리밍 등을 지원합니다. PHP에서 FFmpeg를 호출하여 동영상 파일을 인코딩할 수 있습니다. 다음은 우분투 서버에서 PHP를 사용해 동영상을 인코딩하는 방법입니다.

1. FFmpeg 설치

우선, 서버에 FFmpeg를 설치해야 합니다. 터미널에서 다음 명령을 실행하여 FFmpeg를 설치하세요.

sudo apt update
sudo apt install ffmpeg

2. PHP에서 FFmpeg 실행

PHP에서 exec() 함수를 사용해 FFmpeg 명령어를 실행하여 동영상을 인코딩할 수 있습니다. 예를 들어, MP4 동영상을 H.264 코덱으로 인코딩하려면 다음과 같이 작성할 수 있습니다.

<?php
// 원본 동영상 파일과 출력 파일 경로 설정
$inputFile = '/path/to/input/video.mp4';
$outputFile = '/path/to/output/video_converted.mp4';

// FFmpeg 명령어 작성
$command = "ffmpeg -i " . escapeshellarg($inputFile) . " -vcodec libx264 -crf 23 -preset fast " . escapeshellarg($outputFile);

// 명령어 실행
exec($command, $output, $returnVar);

// 결과 확인
if ($returnVar === 0) {
    echo "동영상 인코딩 성공!";
} else {
    echo "동영상 인코딩 실패. 오류 코드: " . $returnVar;
}
?>

3. FFmpeg 명령어 설명

  • -i: 입력 파일 경로를 지정합니다.
  • -vcodec libx264: H.264 코덱을 사용하여 동영상을 인코딩합니다.
  • -crf: 품질 설정(0~51, 0이 최고 품질, 51이 최저 품질, 일반적으로 23을 사용합니다).
  • -preset: 인코딩 속도와 품질 간의 균형을 설정합니다(초고속, 빠름, 중간, 느림 등).

4. PHP에서 FFmpeg 오류 및 진행 상황 확인

FFmpeg는 표준 출력을 통해 진행 상황을 표시합니다. PHP의 exec() 함수 대신 proc_open()을 사용하면 실시간으로 진행 상황을 확인할 수 있습니다.

참고용으로만 확인하세요.. 2024-11-12 테스트 결과 진행상황이 표시되지 않음.. 이유는 잘 모르겠습니다.

<?php
$inputFile = '/path/to/input/video.mp4';
$outputFile = '/path/to/output/video_converted.mp4';

$command = "ffmpeg -i " . escapeshellarg($inputFile) . " -vcodec libx264 -crf 23 -preset fast " . escapeshellarg($outputFile);

$process = proc_open($command, [
    1 => ['pipe', 'w'],
    2 => ['pipe', 'w']
], $pipes);

if (is_resource($process)) {
    while ($line = fgets($pipes[1])) {
        echo $line; // 진행 상황 출력
    }
    fclose($pipes[1]);
    fclose($pipes[2]);
    proc_close($process);
}
?>

5. 웹 서버 권한 설정

FFmpeg가 PHP에서 제대로 실행되기 위해서는 웹 서버 사용자가 FFmpeg와 파일에 접근할 권한이 있어야 합니다. chmod 및 chown 명령어로 권한을 설정할 수 있습니다.

chmod 777 /path/to/output
반응형