반응형
ffmpeg는 디지털 오디오·동영상을 기록·변환하고 이를 스트리밍으로 변환하는 오픈소스 컴퓨터 프로그램으로, 높은 이동성과 코덱 품질을 보장한다.
php를 이용해 fmpeg를 호출해 동영상 정보를 얻는데, fmpeg를 호출하려면 서버에 fmpeg를 설치해야 하는데, 설치 방법이 간단해 스스로 검색할 수 있다.
코드는 다음과 같습니다
<?php
//fffmpeg 경로와 명령 상수 정의
define('FFMPEG_CMD', '/usr/local/bin/ffmpeg -i "%s" 2>&1');
/**
* fffmpeg를 사용하여 비디오 정보 가져오기
* @param String $file 비디오 파일
* @return Array
*/
function getVideoInfo($file){
ob_start();
passthru(sprintf(FFMPEG_CMD, $file));
$video_info = ob_get_contents();
ob_end_clean();
// 출력 버퍼를 사용하여 fffmpeg 출력 내용 모두 가져오기
$ret = array();
// Duration: 00:33:42.64, start: 0.000000, bitrate: 152 kb/s
if (preg_match("/Duration: (.*?), start: (.*?), bitrate: (\d*) kb\/s/", $video_info, $matches)){
$ret['duration'] = $matches[1]; // 비디오 길이
$duration = explode(':', $matches[1]);
$ret['seconds'] = $duration[0]*3600 + $duration[1]*60 + $duration[2]; // 초로 돌리다
$ret['start'] = $matches[2]; // 시작 시간
$ret['bitrate'] = $matches[3]; // bitrate 코드 레이트 단위 kb
}
// Stream #0:1: Video: rv20 (RV20 / 0x30325652), yuv420p, 352x288, 117 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
if(preg_match("/Video: (.*?), (.*?), (.*?)[,\s]/", $video_info, $matches)){
$ret['vcodec'] = $matches[1]; // 인코딩 형식
$ret['vformat'] = $matches[2]; // 비디오 형식
$ret['resolution'] = $matches[3]; // 해상도
list($width, $height) = explode('x', $matches[3]);
$ret['width'] = $width;
$ret['height'] = $height;
}
// Stream #0:0: Audio: cook (cook / 0x6B6F6F63), 22050 Hz, stereo, fltp, 32 kb/s
if(preg_match("/Audio: (.*), (\d*) Hz/", $video_info, $matches)){
$ret['acodec'] = $matches[1]; // 오디오 인코딩
$ret['asamplerate'] = $matches[2]; // 오디오 샘플링 주파수
}
if(isset($ret['seconds']) && isset($ret['start'])){
$ret['play_time'] = $ret['seconds'] + $ret['start']; // 실제 방영 시간
}
$ret['size'] = filesize($file); // 비디오 파일 크기
$video_info = iconv('gbk','utf8', $video_info);
return array($ret, $video_info);
}
// 비디오 정보 출력
$video_info = getVideoInfo('myvideo.avi');
print_r($video_info[0]);
?>
출력:
Array
(
[duration] => 00:33:42.64
[seconds] => 2022.64
[start] => 0.000000
[bitrate] => 152
[vcodec] => rv20 (RV20 / 0x30325652)
[vformat] => yuv420p
[resolution] => 352x288
[width] => 352
[height] => 288
[acodec] => cook (cook / 0x6B6F6F63)
[asamplerate] => 22050
[play_time] => 2022.64
[size] => 38630744
)
반응형
'개발 꿀팁 > PHP' 카테고리의 다른 글
php 페이지나 그림이 gzip으로 압축되었는지 판단 (0) | 2022.09.05 |
---|---|
php 함수는 가변 수량의 인자를 사용합니다 (0) | 2022.08.26 |
php 여러 개의 1차원 숫자를 조합하여 2차원 배열로 만드는 방법 (0) | 2022.08.25 |
php 자체 증가 ID를 기반으로 고유 번호 클래스 만들기 (0) | 2022.08.25 |
php cli 모드에서의 파라미터 획득 방법 (0) | 2022.08.24 |