`
javatgo
  • 浏览: 1208788 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

PHP如何获得flv视频缩略图和视频时间

 
阅读更多

问题描述;获得flv视频的缩略图和视频时间长度

  • 谷歌了半天发现可以使用Ffmpeg获得视频的一些信息,先介绍一下FFMEPG

这里简单说一下:FFmpeg是用于录制、转换和流化音频和视频的完整解决方案,一套领先的音/视频编解码类库。官方正式版ffmpeg不支持rmvb和rm格式. 不过有很多解决方法

FFmpeg的官方网址是http://ffmpeg.mplayerhq.hu/

中文Wiki是http://www.ffmpeg.com.cn/,资料很多。

㈠安装FFMEPG

操作系统:centos6

找了那么多安装FFMEPG的文章,基本上都是没有注释,需要安装那么多软件包,也不说明一下是干什么用的,纠结。。而且安装上面步骤总是出问题,最后只得寻找官网,认真的看一下,确实官方的资料很好用,以后一定要优先看官网资料。

由于FFMEPG本身就支持flv格式,也就是说目前不需要安装什么插件只需要安装FFMEPG,安装FFMEPG有两种方式:①源码包安装,这个不知道怎么回事老是报错②yum命令安装,centos这个yum是最好的命令,呵呵

下面是安装步骤:

㈠安装编译环境

#yum install -y automake autoconf libtool gcc gcc-c++

㈡安装所需程序库的RPM包到 centos

rpm -Uhvhttp://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

安装 Install ffmpeg 等模块
yum -y install ffmpeg ffmpeg-devel

***********************************centos下面的安装已经完成!

安装php支持插件:FFMPEG-PHP

安装 FFMPEG-PHP
cd /usr/local/src
wgethttp://garr.dl.sourceforge.net/sourceforge/ffmpeg-php/ffmpeg-php-0.6.0.tbz2
tar jxvf ffmpeg-php-0.6.0.tbz2
cd ffmpeg-php-0.6.0
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-confi
make
make install

然后修改php.ini文件
vi php.ini

在php.ini文件加上这句
extension=ffmpeg.so

然后重新启动apache
/etc/init.d/httpd restart

*******备注wget链接那个可能失效,估计是被墙了,可以在网上自己找

----------------------------------------------------------------------------------------------------------

但是我打开phpinfo并没有看到FFMPEG,不知道怎么回事,官网上面提供的安装方法是需要重新编译php来支持ffmpeg,我嫌麻烦,考虑到服务都是在centos上运行,既然centos已经可以,

那我使用php的exec函数调用liunx的shell命令不就可以了,也就是说不需要安装FFMPEG-PHP

关于php的exec函数的可以参考:php中使用exec,system等函数调用系统命令

下面是获得缩略图的常用命令:

示例1:
截取一张352x240尺寸大小的,格式为jpg的图片:
ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg

示例2:
把视频的前30帧转换成一个Animated Gif :
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif

示例3:这个是我需要的!
在视频的第8.01秒处截取 320*240 的缩略图

ffmpeg -i test.flv -y -f mjpeg -ss 3 -t 0.001 -s 320x240 test.jpg

示例4:

把视频转换成flv文件(这个用得最多,现在Flv基本上已经成了网络视频的标准了)

ffmpeg -i source -s 320×240 -b 700k -aspect 4:3 -y -f flv dest.flv 。

其中:

  • source:是原始文件的名字,可以是mov,mpeg,avi,wmv各类格式,ffmpeg基本都支持。
  • -s wxh: 指定视频的宽和高
  • -b : 设定视频的比特率
  • -aspect: 保持视频的比率。如4:3或者16:9
  • -y : 如果目标文件存在时,直接覆盖原有的目标文件。
  • -f : 指定转换的文件格式,这里是flv格式。(其实如果不指定文件格式,ffmpeg也会按文件的后缀名来进行转换)。
  • dest: 转换的目标文件名字,并不一定需要是flv,可以是mov,mpeg以及其他的常用格式。

参数说明:

-L license

-h 帮助

-fromats 显示可用的格式,编解码的,协议的

-f fmt 强迫采用格式fmt

-I filename 输入文件

-y 覆盖输出文件

-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持

-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持

s wxh: 指定视频的宽和高

****************************************************************************

示例3:是针对flv格式的视频获得指定处的缩略图,记住 -f强制转换的格式是mjpeg因为我要获得.jpg的缩略图,网上有很多写成文章都是写成ffmpeg -i test.flv -y -f image2 -ss 08.010 -t 0.001 -s 352x240 b.jpg 这个是错误,不可能输出.

wps_clip_image-30884

通过上面的截图:我们可以看到输入的flv信息和输出的jpg图片信息,Duration就是本文需要的视频长度,但是我不知道如何取得这个变量

下面是PHP调用shell命令获得缩略图的代码

<?php

exec("/usr/bin/ffmpeg -i /usr/local/apache/htdocs/test.flv -y -f mjpeg -ss 3 -t 0.001 -s 320x240 /usr/local/apache/htdocs/test.jpg",$out,$status);

print_r($status);//0是成功 1是失败

*************************************************

如果没有什么图片生成的可能原因:

①对于存储生成图片的文件夹需要有写入权限 #chomd 777 /usr/local/apache/htdocs

②在php.ini中有disable_functions禁用了php调用shell命令函数,

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

④图片时间截取也很重要,很有可能是无效图片或者是黑屏

****************************************************************************

上面都是解决获得缩略图的方法,我看到有人在安卓开发中利用ffmpeg获得手机里面视频的缩略图,考虑到安卓的底层是liunx,应该是通用的!下面是如何获得视频的长度,虽然Duration就是需要的视频长度,但是不知道如何去取,如果有人会,可以教一下我,跪求!

下面是使用纯PHP获得视频的时间长度:

你在网上搜一下:php获得flv视频长度

可以发现有很多结果,但是我翻了十几页发现tmd的都是复制转载的,而且全部都不能使用,不知道为什么?这个代码和诡异,大家可以把网上的代码运行一下,你会发现这个跟不是php,因为编辑器就没有显示语法高亮,没有办法我照着网上手写了一边代码,发现还是报错诡异了 。。。报错还很奇怪 ,感兴趣的可以试试,没有办法我决定搜英文资料,最后在外国网站看到了代码,拿来一试可以!哈哈哈 还是老外的东西好使啊

错误的代码:wps_clip_image-988

关键词没有高亮显示


下面是正确的代码:

01 <?php
02
03 functionBigEndian2Int($byte_word,$signed= false) {
04
05 $int_value= 0;
06 $byte_wordlen=strlen($byte_word);
07
08 for($i= 0;$i<$byte_wordlen;$i++) {
09 $int_value+= ord($byte_word{$i}) * pow(256, ($byte_wordlen- 1 -$i));
10 }
11
12 if($signed) {
13 $sign_mask_bit= 0x80 << (8 * ($byte_wordlen- 1));
14 if($int_value&$sign_mask_bit) {
15 $int_value= 0 - ($int_value& ($sign_mask_bit- 1));
16 }
17 }
18
19 return$int_value;
20 }
21
22 //获得视频的数字时间
23 functiongetTime($name){
24 if(!file_exists($name)){
25 return;
26 }
27 $flv_data_length=filesize($name);
28 $fp= @fopen($name,'rb');
29 $flv_header=fread($fp, 5);
30 fseek($fp, 5, SEEK_SET);
31 $frame_size_data_length=BigEndian2Int(fread($fp, 4));
32 $flv_header_frame_length= 9;
33 if($frame_size_data_length>$flv_header_frame_length) {
34 fseek($fp,$frame_size_data_length-$flv_header_frame_length, SEEK_CUR);
35 }
36 $duration= 0;
37 while((ftell($fp) + 1) <$flv_data_length) {
38 $this_tag_header=fread($fp, 16);
39 $data_length= BigEndian2Int(substr($this_tag_header, 5, 3));
40 $timestamp= BigEndian2Int(substr($this_tag_header, 8, 3));
41 $next_offset=ftell($fp) - 1 +$data_length;
42 if($timestamp>$duration) {
43 $duration=$timestamp;
44 }
45
46 fseek($fp,$next_offset, SEEK_SET);
47 }
48
49 fclose($fp);
50 return$duration;
51 }
52 //转化为0:03:56的时间格式
53 functionfn($time){
54 $num=$time;
55 $sec=intval($num/1000);
56 $h=intval($sec/3600);
57 $m=intval(($sec%3600)/60);
58 $s=intval(($sec%60));
59 $tm=$h.':'.$m.':'.$s;
60 return$tm;
61
62 }
63
64 $t= getTime("22.flv");//显示数字时间如236722
65 echofn($t);//显示时间格式0:03:56
66 ?>

预览效果:

wps_clip_image-31828

我的视频是55秒正好!ok

知识共享许可协议本文PHP淮北撰写,欢迎转载,演绎,但是必须保留本文的署名PHP淮北(包含链接),且不得用于商业目的
分享到:
评论

相关推荐

    利用Ffmpeg获得flv视频缩略图和视频时间的代码

    【使用FFmpeg获取视频信息和缩略图】 FFmpeg提供了丰富的命令行参数,可以方便地获取视频信息并生成缩略图。以下是一些示例: 1. **生成缩略图**: - 示例1:创建一个352x240的JPG格式缩略图,时间点是视频的开始...

    flv视频网站制作资料

    表`movies`包含字段`movieId`(自增主键)、`title`(视频标题)、`source`(视频源文件路径)、`thumb`(缩略图路径)、`width`和`height`(视频尺寸)。 #### 四、上传视频与数据处理 ##### 1. 创建上传页面 ...

    flv视频网站制作资料.pdf

    2. **MySQL**:用于存储视频相关的元数据,如文件名、缩略图信息、标题和描述等。首先需要在MySQL中创建相应的数据库模式,例如包含movieId、title、source、thumb、width和height等字段的movies表。 3. **ffmpeg**...

    fckeditor编辑器上传.flv视频插件,很给力

    为了增强用户体验,还可以考虑添加预览功能,让用户在上传前查看视频,或者提供视频缩略图。此外,考虑到跨平台和移动设备的兼容性,可能还需要支持其他视频格式,如MP4或WebM,并提供相应的编码和转换工具。 总的...

    利用Flex和PHP创建网站视频发布系统.doc

    1. 数据库设计:首先需要在MySQL中创建一个名为`movies`的数据库,包含`movieId`(主键,自增),`title`(视频标题),`source`(视频源文件),`thumb`(缩略图),`width`和`height`(缩略图尺寸)等字段。 2. 数据插入:...

    PHP基于ffmpeg实现转换视频,截图及生成缩略图的方法

    总结起来,通过PHP与FFmpeg的结合,我们可以轻松地实现视频文件的转换、截图和生成缩略图等任务,这对于多媒体内容处理和网站应用来说非常实用。需要注意的是,在实际部署时,确保FFmpeg已经正确安装并在服务器上可...

    利用Flex和PHP创建网站视频发布系统.pdf

    `converttoflv`和`getthumbnail`函数执行系统命令(通过popen和pclose)来运行ffmpeg进行视频转换和缩略图生成。 6. **客户端Flex应用**: 使用Flex框架,可以创建一个富客户端应用,不仅播放视频,还能展示视频...

    phpcmsv9视频模型插件

    这种模型包含视频标题、描述、播放链接、缩略图以及相关的元数据,如时长、分辨率等。 3. **FLV格式**:FLV(Flash Video)是Adobe Flash平台支持的一种流媒体格式,广泛应用于在线视频播放。由于其小巧的体积和...

    织梦(dede)5.7视频模型

    织梦(DedeCMS)5.7视频模型是一款...其自动提取缩略图的功能,使得视频内容的展示更加专业和直观,大大提升了网站的内容质量和用户体验。通过深入理解和利用这一模型,我们可以创建出功能丰富、互动性强的视频类网站。

    基于PHP的齐博 php视频系统 1.0.zip

    5. 视频预览和缩略图:为了方便用户浏览,系统会生成视频的预览图和缩略图。 6. 分类与搜索:视频可以按类别组织,用户可以通过关键词搜索找到感兴趣的视频。 7. 用户评论与评分:系统可能包含用户互动功能,如...

    用php将任何格式视频转为flv的代码

    接下来,set_size函数负责设置视频和生成的缩略图的大小。它接受两个参数:$flvSize和$picSize,这两个参数分别对应FLV视频和图片的宽度和高度。函数内部构造了生成缩略图的命令和生成FLV文件的命令。这两个命令在...

    PHP函数库,PHP函数大全,PHP函数实例,PHP函数手册,PHP5函数库实例

    PHP缩略图类,可生成BMP格式 PHP自定义大小验证码函数 PHP获取.NET发出的WEBSERVICE数据 PHP获取FLV文件播放时间函数 PHP获取一年内所有周的开始和结束日期 php获取指定日期所在周的开始和结束日期 PHP读取...

    FLEX 和PHP创建网站视频发布系统

    - **FFmpeg**:开源软件,用于转换用户上传的各种格式的视频文件至Flash Video (FLV) 格式,并生成视频缩略图。 #### 2. 客户端 - **Flex框架**:用于创建Flash程序,实现视频播放、视频列表显示及导航等功能。 - ...

    ffmpeg-php

    2. **视频截图**:能够从视频中提取帧作为图像,这对于创建视频预览图或缩略图非常有用。 3. **视频转码**:可以将视频文件从一种格式转换为另一种,比如从MP4转到FLV,或者调整视频的分辨率、比特率等参数,以适应...

    搜一次视频程序PHP.zip

    12. **视频预览**:为了提高用户体验,可能实现了视频预览功能,让用户在点击播放前就能看到视频的缩略图或短片段。 通过对"搜一次视频程序PHP.zip"中的内容进行深入研究,开发者可以学习到如何利用PHP构建高效、...

    joomla 视频组件

    4. **预览功能**:"preview.jpg" 文件表明组件提供了视频预览图像,用户在点击播放之前可以看到视频的缩略图,增加用户体验。 5. **JavaScript库**:"swfobject.js" 是一个常用的JavaScript库,用于检测浏览器是否...

    PHP-FFMpeg

    2. **视频截取**:从视频中提取帧作为图片,用于预览或缩略图。 3. **视频剪辑**:切割视频片段,删除不需要的部分。 4. **调整视频质量**:改变视频的分辨率、比特率、帧率等属性,以优化存储空间或传输速度。 5. *...

Global site tag (gtag.js) - Google Analytics