본문 바로가기
카테고리 없음

폴더안에있는 전체 동영상 다 가져와서 인코딩시키는 코드 ffmpeg

by 코딩초밥 2022. 5. 25.
반응형

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);                              
  }
 
}      




?>

 

 

반응형

댓글