PHP利用Ffmpeg获得flv视频缩略图和视频长度时间For centos6操作系统

利用Ffmpeg获得flv视频缩略图和视频时间的代码 问题描述;获得flv视频的缩略图和视频时间长度 谷歌了半天发现可以使用Ffmpeg获得视频的一些信息,先介绍一下FFMEPG 这里简单说一下:FFmpeg是用于录制、转换和流化音频和视频的完整解决方案,一套领先的音/视频编解码类库。官方正式版ffmpeg不支持rmvb和rm格式. 不过有很多解决方法 FFmpeg的官方网址是 http://ffmpeg.mplayerhq.hu/ 。 中文Wiki是 http://www.ffmpeg.com.cn/ ,资料很多。 ㈠安装FFMEPG 操作系统:centos6 找了那么多安装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 -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
         ?>

预览效果:



避坑指南:SAP成本中心分割结构配置常见错误及解决(含KA06/KL01前置步骤) 本文深入解析了SAP成本中心会计中分割结构配置的关键步骤与常见错误。重点强调了配置前必须通过KA06创建次级成本要素(类别42)和通过KL01创建活动类型这两个核心前置步骤,并详细剖析了在OKES中定义分割规则及版本时的高频报错原因与解决方案,帮助顾问和运维人员有效规避配置陷阱,确保成本分摊的准确性。 阅读详情

相关推荐

玄机-Linux权限维持-后门

玄机-Linux权限维持-后门

m0_46439803的博客 764

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

问题描述;获得flv视频的缩略图和视频时间长度 谷歌了半天发现可以使用Ffmpeg获得视频的一些信息,先介绍一下FFMEPG 这里简单说一下:FFmpeg是用于录制、转换和流化音频和视频的完整解决方案,一套领先的音/视频编解码类库。官方正式版ffmpeg不支持rmvb和rm格式. 不过有很多解决方法 FFmpeg的官方网址是http://ffmpeg.mplayerhq...

java-t-go 262

[机器学习-回归实例] 李宏毅机器学习作业一:PM2.5 预测实例

[机器学习-回归实例] 李宏毅机器学习作业一:PM2.5 预测实例 简介   这是一个回归预测的实例,数据集来自李宏毅的《机器学习》课程的第一次作业,可以用来训练一个线性回归模型或者其他的回归模型,动手实践学习到的理论知识,在实践中去发现问题。这篇文章主要包括数据集的解释、数据的预处理过程及线性回归模型的代码实现这三个部分。由于这个数据集并不能直接使用,还需进行一些重构,为了对初学者更友好一些,我会提供重构完的可以读取后就直接使用的数据集,我也会提供 Matlab\rm MatlabMatlab 可直接使用

qq_27309515的博客 3574

java flv 缩略图,如何生成flv视频的视频缩略图?

I want to Generate Video thumbnail of .Flv format song i''m using AS3 swf player ..if it is possible then can anyone tell me how to do this?解决方案Hi,You can do this by using ffmpeg.exe file.you can get ...

weixin_39549312的博客 206

HFSS 3D Layout一键导入PCB,高效搞定微带线损耗仿真

在高速PCB设计中,信号完整性与电磁仿真是确保链路质量的关键环节。传统的HFSS手动建模流程繁琐且极易出错,尤其面对微带线、带状线等高频结构时,叠层参数、铜箔粗糙度等细节难以精准还原,导致仿真结果与实测偏差较大。HFSS 3D Layout模块提供了从EDA工具直接导入PCB文件的能力,完整保留走线、过孔、叠层及材料属性,结合精确的介质损耗模型与端口设置,大幅缩短建模时间并提升仿真精度。该技术广泛应用于DDR、SerDes等高速数字链路的设计验证,以及SI/PI工程师对PCB损耗性能的快速评估。本文从导入操

weixin_29191081的博客 256

03 Aras Innovator二次开发-服务端方法(二)

Aras Innovator二次开发-服务端方法书写

企业信息化(PLM,ERP.MES) 2017

java实现视频文件转换为flv(带文件缩略图),视频上传过程中自动转换为flv格式并截图生成缩略图(Java调用命令实现)...

//视频上传过程中自动转换为flv格式并截图生成缩略图(Java调用命令实现)import java.util.ArrayList;import java.util.List;public class VideoProcess {System.out.println(oldfilepath+"->"+newfilename+"->"+newimg);List commendF =new...

weixin_39636609的博客 373

时间序列数据预测——15种时序大模型

本文综述了时间序列大模型(TSFM)的最新进展,系统介绍了11种主流模型(如TimeGPT、Lag-Llama、Moirai等)的架构特点、训练数据和创新点,并对比分析了它们在单变量/多变量预测、概率预测等功能上的差异。研究表明,基于"大规模预训练-微调/零样本"范式的TSFM在标准数据集(如M4、ETT)上展现出优于传统方法的性能,Time-MoE等模型更达到SOTA水平。但TSFM仍面临计算成本高、可解释性差等挑战,未来发展方向包括轻量级架构、多模态融合和可解释性增强。

m0_56592100的博客 4072

centos php flv,PHP利用Ffmpeg获得flv视频缩略图和视频长度时间For centos6操作系统

FFmpeg是用于录制、转换和流化音频和视频的完整解决方案,一套领先的音/视频编解码类库。官方正式版ffmpeg不支持rmvb和rm格式. 不过有很多解决方法㈠安装FFMEPG操作系统:centos6找了那么多安装FFMEPG的文章,基本上都是没有注释,需要安装那么多软件包,也不说明一下是干什么用的,纠结。。而且安装上面步骤总是出问题,最后只得寻找官网,认真的看一下,确实官方的资料很好用,以后一定...

weixin_42318712的博客 226

AI内容安全机制解析:从破甲现象看模型防护与合规边界

AI内容安全机制是保障人工智能模型合规应用的核心技术,其原理基于多层防护体系。通过意图识别、关键词过滤和多模态检测等技术,系统能够实时监控用户输入和模型输出,有效拦截违规内容。这种机制的技术价值在于平衡模型创造力与内容安全性,确保AI生成内容符合伦理规范。在应用场景上,内容安全机制广泛应用于聊天机器人、内容创作平台和企业级AI系统,防止色情、暴力等有害信息的传播。随着破甲等绕过手法的出现,安全机制需要持续进化以应对指令混淆、上下文污染等新型挑战。本文从技术攻防角度深入分析AI内容安全的实现原理与发展趋势,为

1091

深入解析WIFI与蓝牙模块电路设计:从原理到实战

本文深入解析了WIFI与蓝牙模块的电路设计,从核心原理到实战应用。文章以AP6256模块为例,详细拆解了电源树、时钟电路、接口设计及天线射频路径等关键环节,并提供了PCB布局布线的实用准则与调试方法,旨在帮助硬件工程师设计出稳定可靠的无线产品,规避常见陷阱。

weixin_29186249的博客 150

利用Ffmpeg获得flv视频缩略图和视频长度时间

问题描述;获得flv视频的缩略图和视频时间长度 谷歌了半天发现可以使用Ffmpeg获得视频的一些信息,先介绍一下FFMEPG 这里简单说一下:FFmpeg是用于录制、转换和流化音频和视频的完整解决方案,一套领先的音/视频编解码类库。官方正式版ffmpeg不支持rmvb和rm格式. 不过有很多解决方法 FFmpeg的官方网址是 http://ffmpeg.mplayerhq.hu/

LzwGlory的专栏 1724

AI 大模型接口太零散?自建私有模型管理平台统一整合,管理使用超方便!(支持飞牛nas、群晖nas等服务器快速部署)

面对多种 AI 大模型接口难统一、管理繁琐的问题🤯,本文分享一款超实用开源网关工具⚡,可聚合各大模型、自动转接口、支持可视化管理,Docker 一键部署,大幅降低开发与维护成本🚀

XiaoqiangClub的博客 266

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

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

weixin_33920401的博客 235

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

php获取直播视频缩略图,PHP中使用FFMPEG获取视频缩略图和视频总时长实例

PHP中使用FFMPEG获取视频缩略图和视频总时长实例发布于 2015-02-09 17:57:36 | 855 次阅读 | 评论: 0 | 来源: 网友投递FFmpeg 多媒体处理工具FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcod...

weixin_39574943的博客 235

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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

本文实例讲述了PHP基于ffmpeg实现转换视频,截图及生成缩略图的方法。分享给大家供大家参考,具体如下:这里把ffmpeg 和 生成缩略图整合了一下:include("ImageResize.class.php")//转视频$cmd="ffmpeg.exe -i starwar.avi -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 1.flv";exec($...

weixin_29850921的博客 431

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv)

名词解释RTSP是一种网络协议,用于控制实时流媒体的传输。它是一种应用层协议,通常用于在客户端和流媒体服务器之间建立和控制媒体流的传输。RTSP允许客户端向服务器发送请求,如播放、暂停、停止、前进、后退等,以控制媒体流的播放和操作。RTSP可以与不同的传输协议(如RTP、TCP、UDP)结合使用,以实现实时的音视频流传输。它在视频监控、流媒体直播、视频会议等应用中广泛使用。RTMPRTMP(Real-Time Messaging Protocol)是一种用于实时数据传输的网络协议。

weixin_38340874的博客 1万+

使用ffmpeg读取flv视频总时长

使用ffmpeg时总会遇到到在读取flv视频时读不到总时长,方法如下:<br /><br /> int seconds = pFormatCtx->streams[videoStream]->duration*pFormatCtx->streams[videoStream]->time_base.num/pFormatCtx->streams[videoStream]->time_base.den;    <br />其中变量及类型参考:http://dranger.com/ffmpeg/tutorial

kuangrenwuyong的专栏 1万+

ffmpeg-从mp4、flv、ts文件中提取264视频流数据

ffmpeg-从mp4、flv、ts文件中提取264视频流数据

万事亨通 1579

ffmpeg 推流 flv

//打开格式进行解封装 1.avformat_open_input( AVFormatContext **ps, //打开文件的上下文 const char *url,//文件的路径 AVInputFormat *fmt, AVDictionary **options ) AVFormatContext 封装格式的上下文 AVIOContext *pb; IO上下文 AVStream x**streams; //视频音频字幕流 int nb_streams; AVStream AVRati

虾球 2966
上一篇: mssql数据导入MySQL数据库方法-CSV导入
下一篇: 面向对象的设计模式系列之二:工厂方法模式(FactoryMethod)
xmlife
博客等级 码龄19年 89粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值