看到一些视频网站,觉得挺新奇的,能够把上传的视频文件转成FLV格式,而且还会有几张截图出来,当时在想,是不是网站专门请了一批人处理这些上传的文件,然后把图截出来,现在想想这念头确实挺幼稚的。
其实说白了,也挺简单的,就是通过php的执行函数,比如exec,然后调用服务器的转换程序,转换结束后将文件生成到指定的文件夹,更新数据库记录,并转到相应的页面。
因为要上传比较大的文件,所以要先设置最大上传文件的大小,打开php.ini,找到upload_max_filesize,这一行,将值改为50M或更大。
至于转换程序的选择,我最初是用ffmpeg的,但是发现转换经常失败,不得不放弃,后来发现另一款非常棒的转换软件,mencoder,也是linux下的,但我的环境是windows,所以找到了一个绿色的以mencoder为核心的应用软件wisMencoder,里面有mencoder,如果是从网上下的话,应该有三个相应的mencoder,分别是对应不同的处理器的。
如果要生成截图,可以通过ffmpeg来生成。
其实说白了,也挺简单的,就是通过php的执行函数,比如exec,然后调用服务器的转换程序,转换结束后将文件生成到指定的文件夹,更新数据库记录,并转到相应的页面。
因为要上传比较大的文件,所以要先设置最大上传文件的大小,打开php.ini,找到upload_max_filesize,这一行,将值改为50M或更大。
至于转换程序的选择,我最初是用ffmpeg的,但是发现转换经常失败,不得不放弃,后来发现另一款非常棒的转换软件,mencoder,也是linux下的,但我的环境是windows,所以找到了一个绿色的以mencoder为核心的应用软件wisMencoder,里面有mencoder,如果是从网上下的话,应该有三个相应的mencoder,分别是对应不同的处理器的。
如果要生成截图,可以通过ffmpeg来生成。
程序代码:
exec ("$cgi_url $source_url -o $dest_url -of lavf -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6:vb_strategy=1 -vf scale=320:240,expand=320:240:::1,crop=320:240:0:0 -ofps 30 -srate 22050 -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames",$arr,$sta);
if($sta!=0){
die ("转换出错!");
}
//优化生成的flv
exec("flvmdi.exe $dest_url");
$imgW="160";
$imgY="120";
exec("ffmpeg.exe -i $dest_url -ss 10 -vframes 1 -r 1 -ac 1 -ab 2 -s $imgW*$imgY -f image2 $pic_url");
echo "文件转换完毕";
if(filesize($pic_url)=="0"){
echo "文件转换出错";
}
这里解释一下,上面的$cgi_url,指的是要调用的转换程序的url,$source_url指的是上传的文件的url,$dest_url,是生成的flv的存放路径,后面的参数比较复杂,就不具体解释了,网上应该有相应的文章,最后的$sta,是判断是否转换成功
调用flvmdi.exe是因为mencoder生成的flv不能拖放,用这个程序来修复一下
最后调用ffmpeg来生成截图
当然转换生成结束后还要更新一下数据库记录
顺便提一句,由于上传的文件可能比较大,所以最好将php的执行时间相应延长,比如延长到300秒
set_time_limit(300);
至此视频网站的最核心技术就完全捅破了,如果还有什么问题,欢迎和我交流。
exec ("$cgi_url $source_url -o $dest_url -of lavf -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6:vb_strategy=1 -vf scale=320:240,expand=320:240:::1,crop=320:240:0:0 -ofps 30 -srate 22050 -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames",$arr,$sta);
if($sta!=0){
die ("转换出错!");
}
//优化生成的flv
exec("flvmdi.exe $dest_url");
$imgW="160";
$imgY="120";
exec("ffmpeg.exe -i $dest_url -ss 10 -vframes 1 -r 1 -ac 1 -ab 2 -s $imgW*$imgY -f image2 $pic_url");
echo "文件转换完毕";
if(filesize($pic_url)=="0"){
echo "文件转换出错";
}
这里解释一下,上面的$cgi_url,指的是要调用的转换程序的url,$source_url指的是上传的文件的url,$dest_url,是生成的flv的存放路径,后面的参数比较复杂,就不具体解释了,网上应该有相应的文章,最后的$sta,是判断是否转换成功
调用flvmdi.exe是因为mencoder生成的flv不能拖放,用这个程序来修复一下
最后调用ffmpeg来生成截图
当然转换生成结束后还要更新一下数据库记录
顺便提一句,由于上传的文件可能比较大,所以最好将php的执行时间相应延长,比如延长到300秒
set_time_limit(300);
至此视频网站的最核心技术就完全捅破了,如果还有什么问题,欢迎和我交流。
本文介绍如何使用PHP和mencoder将上传的视频文件转换为FLV格式,并生成预览截图。涉及配置最大上传文件大小、设置执行时间限制及选择转换工具。
2189

被折叠的 条评论
为什么被折叠?



