为什么80%的码农都做不了架构师?>>>   

这里简单说一下: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 -Uhv http://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 
wget http://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 这个是错误,不可能输出.

通过上面的截图:我们可以看到输入的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

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

建议 增加关键帧,通常第一帧为关键帧,可以使用:vframes:帧参数,舍弃微秒参数,只保留时间参数

/usr/bin/ffmpeg -i /usr/local/apache/htdocs/test.flv -y -f mjpeg -ss 3 -vframes 1 -s 320x240 /usr/local/apache/htdocs/test.jpg

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

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

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

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

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

关键词没有高亮显示

下面是正确的代码:

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

预览效果:

我的视频是55秒正好!

转载于:https://my.oschina.net/kisswu/blog/53661

PHP中利用Ffmpeg获得flv视频缩略图和播放时间相关推荐

  1. Java 利用ffmpeg工具实现视频MP4转m3u8

    Java 利用ffmpeg工具实现视频MP4转m3u8(一) 前言 (一)ffmpeg工具转码 1.如何安装ffmpeg工具 2.如何使用ffmpeg工具进行视频转码 (二)播放m3u8文件 1.vi ...

  2. ffmpeg php 快速播放,怎么在PHP中利用FFmpeg函数对视频播放的时长进行获取

    怎么在PHP中利用FFmpeg函数对视频播放的时长进行获取 发布时间:2020-12-18 16:02:20 来源:亿速云 阅读:96 作者:Leah 这篇文章给大家介绍怎么在PHP中利用FFmpeg ...

  3. java利用ffmpeg追加合并视频文件

    java利用ffmpeg追加合并视频文件 首先要用到ffmpeg,可以根据操作系统自行下载 每个视频格式要一样,分辨率要一样 多个视频地址以list存放,直接上代码 /*** 合并视频文件* @par ...

  4. php获取视频大小代码怎么写,利用php获得flv视频长度的实例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: function BigEndian2Int($byte_word, $signed = false) { $int_value = 0; $by ...

  5. 采用ffmpeg转换flv视频到mp4格式时报错的解决方案

    1. ffmpeg支持如下格式转换视频 $ffmpeg -i 源文件  目标文件 如: $ffmpeg -i hello.flv hello.mpeg $ffmpeg -i hello.flv hel ...

  6. Flash全屏播放外部多个Flv视频并且按键进行切换+全屏播放外部Flv视频+指定元件播放外部Flv视频(非全屏)(可以作为遮罩来播放)

    目录 一.目的: 1.Flash全屏播放外部多个Flv视频并且按键进行切换+全屏播放外部Flv视频+指定元件播放外部Flv视频(非全屏),所以将其记录下来 二.参考: 1.[AS3编程教学]如何加载并 ...

  7. 视频弹窗播放html,利用jQuery实现在线视频弹出播放代码

    特效描述:利用jQuery实现 在线视频 弹出播放代码.利用jQuery实现在线视频弹出播放代码 代码结构 1. 引入CSS 2. 引入JS 3. HTML代码 视频一 2018-06-22 视频一 ...

  8. Mac OS中利用ffmpeg为视频添加字幕

    Mac系统下,利用ffmpeg加字幕 字幕类型 硬字幕,类似视频水印,作为视频的一部分内嵌了. 软字幕,封装字幕,也是内嵌到视频里,不过只是作为渲染,而且需要播放器支持才行. 外挂字幕,就是外部字幕文 ...

  9. java项目中使用ffmpeg剪辑部分视频

    在项目中,有个需求是分享视频链接地址到微信.qq或者朋友圈,只能试看两分钟,本想着通过h5界面就能控制实现效果,代码如下,但是前端终究不是安全的,其次监听事件,如果拉播放进度条,中途停顿多次,就会出现 ...

最新文章

  1. HashSet 详解
  2. 【工具类】遍历扫描目录下全部文件并列出
  3. 什么是清华大学的“三好”学生?
  4. 汇编和python-编程语言与Python介绍
  5. java 线程aba,JAVA中CAS-ABA的问题解决方案AtomicStampedReference
  6. maven配置junit5_JUnit 5和Selenium –改善项目配置
  7. Windows 文件同步方案讨论
  8. 区块链应用开发人员_每个区块链开发人员都应该了解这些Web3和Metamask用例
  9. Promise解决回调地狱写法
  10. 客户端navicat安装教程
  11. Dell重装系统之官方原版系统
  12. 无线射频专题《射频信号,接收灵敏度与接收信号强度指示》
  13. LeetCode刷题之路:781. 森林中的兔子
  14. 【新书推荐】Interpretable Machine Learning with Python
  15. 惠普电脑无故出现第三方屏保
  16. 破解程序员的 5 大迷思,《新程序员 004》正式上市!
  17. 域控服务器更新规则,由服务器升级为域控制器的方法
  18. 改善C#程序的建议1:非用ICloneable不可的理由
  19. C++接口实现汉字拼音转换
  20. ios手机如何使用fiddler抓包https

热门文章

  1. jQuery UI:Datepicker将年份范围下拉至100年
  2. 从文件扩展名获取MIME类型
  3. 正坐标系及矢量知识,点乘与差乘,旋转
  4. Ajax,ajaxFileUpload文件上传同步代码js实现
  5. linux docker自动启动,linux – Cron作业不能在Docker容器内自动运行
  6. 中文乱码翻译器在线翻译_如何将芬兰语翻译成中文?这两种方法你得会
  7. 将vue项目打包部署到云服务器(傻瓜式宝塔面板)
  8. 1844. 将所有数字用字符替换
  9. vue 使用this.reload方法刷新页面配置
  10. 栅栏密码怎么写java程序_简单栅栏密码加密器的JSF版