반응형
ffmpeg 를 처음 사용하고 한 3시간동안 공부하면서
만든 코드이다.
'파일안에있는 모든 영상들을 인코딩 한다' 라는 기능이다
ffprobe로 동영상을 확인하면
비디오 정보와 음성 정보가 분리 되어있는걸 확인할수있다.
$matches1(비디오),2(음성) 에다가 모두 정규식으로 잘라 배열을 시켜놓았다.
자기가 원하는대로만 if 문에 shell_exec을 커스텀해서 쓰기만하면된다.
<?php
ini_set( 'display_errors', '0' );
$dir = "/var/www/html/uploadfile/file/";
$uploaddir="/var/www/html/uploadfile/uploaded/";
if (is_dir($dir)){
if ($dh = opendir($dir)){
while (($file = readdir($dh)) !== false ){
if($file == '.' || $file =='..' || $file == '.mp4'){
continue;
}
$output= shell_exec('/usr/bin/ffprobe -show_streams '.$dir.$file.' 2>&1;');
$without_extension = substr($file, 0, strrpos($file, "."));
$alldata = substr( $output, strpos($output,"[STREAM]"), -1);
$a=substr( $alldata, strpos($alldata,"index=0"), strpos($alldata,"[/STREAM]"));
$b=substr( $alldata, strpos($alldata,"index=1"), -1);
preg_match_all('/(.*)=(.*)/i', $a, $matches);
$video_info = [];
if(!empty($matches)) {
foreach($matches[1] as $k => $v) {
$video_info[$v] = $matches[2][$k];
}
}
preg_match_all('/(.*)=(.*)/i', $b, $matches2);
$video_info2 = [];
if(!empty($matches2)) {
foreach($matches2[1] as $k => $v) {
$video_info2[$v] = $matches2[2][$k];
}
}
$forwhat = $matches[2][4];
$forwhat2 = $matches2[2][4];
if($forwhat == ""){
echo $file."<--null값으로 넘어온것";
echo "<br>";
}
print_r($forwhat);
if($forwhat == "video"){
shell_exec('/usr/bin/ffmpeg -i '.$dir.$file.' -an '.$uploaddir.$without_extension.'.mp4 2>&1;');
shell_exec('/usr/bin/ffmpeg -i '.$dir.$file.' -pix_fmt rgb24 -vframes 1 -ss 00:00:05 -s 350x250 '.$uploaddir.$without_extension.'.jpg 2>&1');
echo $without_extension."<-- 업로드성공 ";
echo "<br>";
}else{
echo $without_extension."<-- 이파일은 video값이 아닙니다";
echo "<br>";
}
//print_r($forwhat);
//shell_exec('/usr/bin/ffmpeg -i '.$dir.$file.' -an '.$uploaddir.$uploadfile.'.flv 2>&1;');
//echo $without_extension;
}
closedir($dh);
}
}
?>
반응형
댓글