<?php
$path_to_mencoder="";
$path_to_mplayer ="";
if ($argc<3) {
print_r('
_________________________________________________________________________
| Usage: php '.$argv[0].' video_id outputfile |
| video_id: grab it from your url |
| outputile: filename, without extension |
| |
| Example: |
| php '.$argv[0].' k1TDAGJMj8z my_video |
_________________________________________________________________________
');
die;
}
function clean_str($str)
{
$str=str_replace("\r","",$str);
$str=str_replace("\n","",$str);
return $str;
}
function clean_arg($str)
{
$str=str_replace("&","",$str);
$str=str_replace("|","",$str);
$str=str_replace(",","",$str);
$str=str_replace(" ","",$str);
$str=trim($str);
return $str;
}
error_reporting(0);
ini_set("max_execution_time",0);
$id=clean_str($argv[1]);
$fn=clean_arg($argv[2]).".tmp";
echo "video id -> ".$id."\n";
echo "download -> ".$fn."\n";
$host=gethostbyname("it.youtube.com");
$port=80;
$ock=fsockopen($host,$port);
$packet ="GET /watch?v=$id&feature=dir HTTP/1.1\r\n";
$packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n";
$packet.="Referer: http://www.youtube.com/\r\n";
$packet.="Accept-Language: it\r\n";
$packet.="Accept-Encoding: text/plain\r\n";
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n";
$packet.="Host: it.youtube.com\r\n";
$packet.="Connection: Close\r\n\r\n";
fputs($ock,$packet);
$data="";
while (!feof($ock)) { $data.=fread($ock,1);}
fclose($ock);
$temp=explode("&t=",$data);
$temp2=explode("&",$temp[1]);
$t=clean_str($temp2[0]);
echo "t -> ".$t."\n";
if ($t=="") {die("error[1]...");}
$ock=fsockopen($host,$port);
$packet ="GET /get_video?video_id=$id&t=$t HTTP/1.1\r\n";
$packet.="Accept: */*\r\n";
$packet.="x-flash-version: 8,0,24,0\r\n";
$packet.="Accept-Encoding: gzip, deflate\r\n";
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n";
$packet.="Host: www.youtube.com\r\n";
$packet.="Connection: close\r\n\r\n";
fputs($ock,$packet);
$data="";
while (!feof($ock)) {
$data.=fread($ock,1);
}
fclose($ock);
$temp=explode("Location: http://",$data);
$temp2=explode("/",$temp[1]);
$host=$temp2[0];
$temp=explode("\n",$temp2[1]);
$request=trim($temp[0]);
echo "host -> ".$host."\n";
if ($host=="") {die("error[2]...");}
echo "request -> ".$request."\n";
$host=gethostbyname(clean_str($host));
$port=80;
$packet ="GET /$request HTTP/1.0\r\n";
$packet.="Accept: */*\r\n";
$packet.="x-flash-version: 8,0,24,0\r\n";
$packet.="Accept-Encoding: gzip, deflate\r\n";
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n";
$packet.="Connection: Keep-Alive\r\n";
$packet.="Host: ".$host."\r\n\r\n";
$fp=fopen($fn,"w");
$ock=fsockopen($host,$port);
fputs($ock,$packet);
$headers="";
while (!eregi("\r\n\r\n",$headers))
{
$headers.=fread($ock,1);
}
$temp=explode("Content-Length: ",$headers);
$temp2=explode("\r\n",$temp[1]);
$temp=(int) $temp2[0];
$df = disk_free_space("/");
if ($temp > $df){die("not enough free space...");}
echo "downloading ".$temp." byte(s)...\r\n";
if ($temp==0) {die("error[3]...");}
while (!feof($ock)) {
$flv=fread($ock,4096);echo ".";
fwrite($fp,$flv);
}
fclose($ock);
fclose($fp);
$nwfn=$argv[2].".flv";
$nwfn_avi=$argv[2].".avi";
function make_seed()
{
list($usec, $sec) = explode(' ', microtime());
return (float) $sec + ((float) $usec * 100000);
}
if (file_exists($nwfn)){
$nwfn.=".";
for ($i=0; $i<10; $i++)
{
$v = rand(ord('1'),ord('9'));
$nwfn=$nwfn.chr($v);
}
echo "flv file exists...\n";
echo "renamed to -> ".$nwfn."\n";
}
rename($fn,$nwfn);
sleep(1);
echo "\nconverting ".$nwfn." to ".$nwfn_avi."...\n";
if (!file_exists($nwfn)){die("error[5]...");}
exec($path_to_mencoder."mencoder ".$nwfn." -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1000:mbd=2:v4mv:autoaspect -vf pp=lb -oac mp3lame -lameopts fast:preset=standard -noskip -mc 0 -o ".$nwfn_avi);
sleep(1);
echo "starting mplayer...\n";
if (!file_exists($nwfn_avi)){die("error[6]...");}
exec($path_to_mplayer."mplayer ".$nwfn_avi);
?>