宝哥软件园

fmpeg获取flv视频缩略图和视频时间的代码

编辑:宝哥软件园 来源:互联网 时间:2021-10-17

问题描述;获取flv视频的缩略图和视频时间长度。谷歌发现,长时间使用Ffmpeg可以获取视频的一些信息。首先,介绍FFmpeg。这里,简单地说,ffmpeg是一个完整的解决方案,用于录制、转换和流式传输音频和视频,以及一组领先的音频/视频编解码器类库。ffmpeg的官方版本不支持rmvb和rm格式。然而,有许多解决方案。FFmpeg的官方网站是http://ffmpeg.mplayerhq.hu/.中文维基是http://www.ffmpeg.com.cn/,有很多资料。(一)安装FFMEPG操作系统:centos6找到了这么多关于安装FFMEPG的文章,但是基本上没有评论,需要安装这么多软件包,很难解释它们是为了什么。而且,上面的步骤总是有问题。最后还要找官网。仔细一看,确实官方信息很有用,所以以后一定要优先考虑官网的信息。因为FFMEPG本身支持flv格式,也就是说目前不需要安装任何插件,只需要安装FFMEPG即可。安装FFMEPG有两种方式:源码包安装,总是因为一些未知的原因报错;yum命令安装,centos yum是最好的命令。哈哈,下面是安装步骤:(一)安装编译环境# yum Install-y automake auto conf libtool gcc-c(二)安装所需库的RPM包到centos RPM-UHV http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/. rprge-release-0 . 3 . 6-1 . El 5 . RF . i386 . RPM安装模块如Install ffmpeg yum-y installffmpeg ffmpeg-develop * * * * * * * * * * * * * * * * * *。安装php支持插件:ffmpeg-phpInstall ffmpeg-phpcd/usr/local/srcwget http://garr.dl.sourceforge.net/sourceforge/ffmpeg-php/. ffmpeg-PHP-0 . 6 . 0 . tbz 2 tar jxff ffmpeg-PHP-0 . 6 . 0 . tbz 2 CD ffmpeg-PHP-0 . 6 . 0/usr/local/PHP/bin/phpize。/config-with-Php-config=/usr/local/Php/bin/Php-confi make make install然后修改php.ini文件viphp.ini .将此扩展名=ffmpeg.so添加到php.ini文件并重新启动Apache/etc/init.d/httpd重新启动* * * * * * *请注意,wget链接可能会失败。估计已经屏蔽了,可以自己上网找。我不知道发生了什么。上面官网提供的安装方法是php需要重新编译才能支持ffmpeg。我太麻烦了。考虑到服务都是在centos上运行的,既然centos已经有了,为什么不用php的exec函数来调用liunx的shell命令呢?也就是说,不需要安装FFMPEG-php。可以参考php的exec函数:使用PHP中的exec、system等函数调用系统命令。以下是获取缩略图的常用命令:示例1:截取352x240大小的图像,格式为jpg:ffmpeg-itest . ASF-y-f image 2-t 0.001-s352 x240 a.jpg示例2:将视频的前30帧转换为动画gif:ffmpeg-itest . ASF-vframe 30-y-f gifa . gif示例3:这就是我需要的!在视频的第8.01秒,截取320*240的缩略图ffmpeg-itest . flv-y-f mjpeg-ss 3-t 0.001-s 320 x240。test.jpg示例4:将视频转换为flv文件(这是使用最多的,目前,Flv基本上已经成为网络视频的标准。)ffmpeg-I源-s 320240-b 700k-aspect 4:3-y-f flv test . flv.其中:source:是原始文件的名称,可以是mov、mpeg、avi、wmv,ffmpeg基本支持。-swxh3360指定视频的宽度和高度-b :设置视频的比特率-aspect:保持视频的比例。例如4:3或16:9 -y :如果目标文件存在,则直接覆盖原始目标文件。-f :指定转换后的文件格式,在本例中为flv格式。(其实如果没有指定文件格式,ffmpeg也会根据文件的后缀名称进行转换)。dest:转换的目标文件名称不一定需要是flv,可以是mov、mpeg等常用格式。

参数描述:-L license-h help-fromas显示可用的格式、编解码器、协议的-f fmt强制格式fmt-I文件名输入文件-y覆盖输出文件-t持续时间设置录制时间hh :mm 3360ss。XXX]格式录制时间还支持-ss位置搜索到指定时间[-]hh :mm 3360s[。XXX]。的格式还支持s wxh:来指定视频的宽度和高度* * * * * * * * * * * * * * * * * * * * * *。记住-f强制转换的格式是mjpeg,因为我想得到的缩略图。jpg,而网上的很多文章都是以ffmpeg-itest . flv-y-fimage 2-ss08.010-t 0.001-s352x 240 b.jpg的方式写的。这是一个错误,不可能输出。wps_clip_image-30884

通过上面的截图:我们可以看到输入的flv信息和输出的jpg图片信息。Duration是本文要求的视频长度,但是不知道怎么得到这个变量。下面是PHP调用shell命令获取缩略图的代码。phpexec('/usr/bin/ffmpeg-I/usr/local/Apache/htdocs/test . flv-y-f mjpeg-ss 3-t 0.001-s 320 x240/usr/local/Apache/htdocs/test . jpg ',$out,$ status);print _ r($状态);//0为成功1为失败* * * * * * * * * * * * * * * * * * * * * * * * * * * *如果没有可能的原因通过存储生成图片:如果没有可能的原因生成图片,则Htdocs在php.ini中有disable_functions,其中disable _ functions=proc _ open、popen、exec、system、shell _ exec。Passthru解决方案:注释掉disable _ functions # disable _ functions=proc _ open、popen、exec、system、shell _ exec、Passthru或disable _ functions=(删除禁止的函数)保存、关闭和打开;必须关闭php.ini中的安全模式,才能调用exec函数safe _ mode=off;图像时间截取也很重要;它可能是无效图像或黑屏;建议添加关键帧,通常第一帧是关键帧。您可以使用:vframes: frame参数,丢弃微秒参数,仅时间参数/usr/bin/ffmpeg-I/usr/local/Apache/htdocs/test . flv-y-fmjpeg-ss3-vframes 1-s320x 240/usr/local/Apache/htdocs/test . jpg * * * * * * * *。* * * * *下面是如何得到视频长度的。虽然Duration是需要的视频长度,但是不知道怎么弄。如果有人能,请教我,求求你!以下是使用纯php获得的视频长度:网上搜索:PHP获得flv视频长度的时候可以找到很多结果,但是我翻了十几页,发现所有的tmd视频都是复制复制的,不能全部使用。我不知道为什么。这段代码很奇怪。你可以运行在线代码,你会发现这段代码不是php,因为编辑器没有显示语法高亮。我没有办法按照网上的代码手写代码的一面,报错就怪怪的。报错真奇怪。如果你感兴趣,你可以试试。如果没有办法,我决定搜索英文资料。最后在国外网站上看到了代码。我可以试试!哈哈,还是外国人的事。错误代码:wps_clip_image-988

关键词没有高亮显示下面是正确的代码:复制代码代码如下:服务器端编程语言(Professional Hypertext Preprocessor的缩写)函数BigEndian2Int($byte_word,$ signed=false){ $ int _ value=0;$ byte _ word len=strlen($ byte _ word);对于($ I=0;$ I $ byte _ wordlen $ I){ $ int _ value=order($ byte _ word { $ I })* pow(256,($ byte _ word len-1-$ I));} if($ sign){ $ sign _ mask _ bit=0x 80(8 *(byte _ wordlen-1));if($ int _ value $ sign _ mask _ bit){ $ int _ value=0-($ int _ value($ sign _ mask _ bit-1));} }返回$ int _ value} //获得视频的数字时间函数getTime($name){ if(!file _ exists($ name)){ return;} $ flv _ data _ length=文件大小($ name);$fp=@fopen($name,' Rb ');$flv_header=fread($fp,5);fseek($fp,5,SEEK _ SET);$ frame _ size _ data _ length=big endian 2 int(fread($ FP,4));$ flv _ header _ frame _ length=9;if($ frame _ size _ data _ length $ flv _ header _ frame _ length){ fseek($ FP,$ frame _ size _ data _ length-$ flv _ header _ frame _ length,SEEK _ CUR);} $持续时间=0;while((ftell($ FP)1)$ flv _ data _ length){ $ this _ tag _ header=fread($ FP,16);$ data _ length=big endian 2 int(substr($ this _ tag _ header,5,3));$ timestamp=big endian 2 int(substr($ this _ tag _ header,8,3));$ next _ offset=ftell($ FP)-1 $ data _ length;if($时间戳$ duration){ $ duration=$ timestamp;} fseek($fp,$next_offset,SEEK _ SET);} fc输($ FP);返回$ duration} //转化为0:03:56的时间格式函数fn($ time){ $ num=$ time;$ sec=int val($ num/1000);$ h=int val($ sec/3600);$ m=int val(($ sec 600)/60);$ s=int val(($ sec `));$ tm=$ h. ' :美元.$ s;返回$ tm} $ t=GetTime(' 22。flv’);//显示数字时间如236722 echo fn($ t);//显示时间格式0:03:56 ?预览效果wps_clip_image-31828

我的视频是55秒正好!好的

更多资讯
游戏推荐
更多+