首页 后端开发 php教程 利用Ffmpeg获得flv视频缩略图和视频时间的代码_PHP教程

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

Jul 21, 2016 pm 03:24 PM
ffmpeg 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 -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 这个是错误,不可能输出.

wps_clip_image-30884

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

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

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,因为编辑器就没有显示语法高亮,没有办法我照着网上手写了一边代码,发现还是报错诡异了 。。。报错还很奇怪  ,感兴趣的可以试试,没有办法我决定搜英文资料,最后在外国网站看到了代码,拿来一试可以!哈哈哈  还是老外的东西好使啊

错误的代码:wps_clip_image-988

关键词没有高亮显示


下面是正确的代码:

复制代码 代码如下:

function BigEndian2Int($byte_word, $signed = false) {
$int_value = 0;
$byte_wordlen = strlen($byte_word);
for ($i = 0; $i $int_value += ord($byte_word{$i}) * pow(256, ($byte_wordlen - 1 - $i));
}
if ($signed) {
$sign_mask_bit = 0x80 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) $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
?>

预览效果:

wps_clip_image-31828

我的视频是55秒正好!ok

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/324240.htmlTechArticle问题描述;获得flv视频的缩略图和视频时间长度 谷歌了半天发现可以使用Ffmpeg获得视频的一些信息,先介绍一下FFMEPG 这里简单说一下:F...
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

抖音发布他人视频侵权吗?它怎样剪辑视频不算侵权? 抖音发布他人视频侵权吗?它怎样剪辑视频不算侵权? Mar 21, 2024 pm 05:57 PM

随着短视频平台的兴起,抖音成为了大家日常生活中不可或缺的一部分。在抖音上,我们可以看到来自世界各地的有趣视频。有些人喜欢发布他人的视频,这就引发了一个问题:抖音发布他人视频侵权吗?本文将围绕这个问题展开讨论,告诉大家怎样剪辑视频不算侵权,以及如何避免侵权问题。一、抖音发布他人视频侵权吗?根据我国《著作权法》的规定,未经著作权人许可,擅自使用其作品,属于侵权行为。因此,在抖音上发布他人视频,如果未经原作者或著作权人许可,就属于侵权行为。二、怎样剪辑视频不算侵权?1.使用公共领域或已授权的内容:公共

抖音发布视频如何赚收益?新手小白怎么在抖音上赚钱啊? 抖音发布视频如何赚收益?新手小白怎么在抖音上赚钱啊? Mar 21, 2024 pm 08:17 PM

抖音,这个全民短视频平台,不仅让我们在闲暇时间享受到各种有趣、新奇的短视频,同时也给了我们一个展示自我、实现价值的舞台。那么,如何在抖音发布视频赚取收益呢?本文将详细解答这个问题,帮助你在抖音上赚取更多的收益。一、抖音发布视频如何赚收益?发布视频在抖音上获得一定的播放量后,可以有机会参与广告分成计划。这一收益方式是抖音用户最为熟悉的之一,也是许多创作者主要的收入来源。抖音根据账号权重、视频内容以及观众反馈等多种因素来决定是否提供广告分成的机会。抖音平台允许观众通过发送礼物来支持自己喜欢的创作者,

微博发视频怎么不压缩画质_微博发视频不压缩画质方法 微博发视频怎么不压缩画质_微博发视频不压缩画质方法 Mar 30, 2024 pm 12:26 PM

1、首先打开手机微博,点击右下角【我】(如图所示)。2、接着点击右上角【齿轮】打开设置(如图所示)。3、然后找到并打开【通用设置】(如图所示)。4、随后进入【视频随着】选项(如图所示)。5、再打开【视频上传清晰度】设置(如图所示)。6、最后选择【原画质】就能不压缩了(如图所示)。

如何发布小红书视频作品?发视频要注意什么? 如何发布小红书视频作品?发视频要注意什么? Mar 23, 2024 pm 08:50 PM

随着短视频平台的兴起,小红书成为了许多人分享生活、表达自我、获取流量的平台。在这个平台上,发布视频作品是一种非常受欢迎的互动方式。那么,如何发布小红书视频作品呢?一、如何发布小红书视频作品?首先,确保准备好一段适合分享的视频内容。你可以利用手机或其他摄像设备进行拍摄,需要注意画质和声音的清晰度。2.剪辑视频:为了让作品更具吸引力,可以对视频进行剪辑。可以使用专业的视频剪辑软件,如抖音、快手等,添加滤镜、音乐、字幕等元素。3.选择封面:封面是吸引用户点击的关键,选择一张清晰、有趣的图片作为封面,让

分享edge浏览器网页视频没有声音的两种解决办法 分享edge浏览器网页视频没有声音的两种解决办法 Mar 14, 2024 pm 02:22 PM

  很多用户都喜欢在浏览器上看视频,如果在edge浏览器上看网页视频发现没有声音,要如何解决?这个问题并不是很难,接下来就让小编告诉大家如何修复edge浏览器网页视频没有声音问题的办法。  edge浏览器网页视频没有声音?  方法一:  1、首先,查看edge浏览器顶部标签页。  2、在标签页左边有一个“声音按钮”,确认它没有静音。  方法二:  1、如果确认没有静音,那么可能是声音设置问题。  2、可以右键右下角的声音设备,选择“打开音量合成器”  3、打

战双帕弥什露西亚深红之渊怎么获得 战双帕弥什露西亚深红之渊怎么获得 Mar 25, 2024 pm 05:31 PM

玩家在战双帕弥什中进行游戏时可以获得露西亚深红之渊,有很多玩家不知道露西亚深红之渊怎么获得,玩家可以通过研发获取,或者在幻痛囚笼商店兑换。战双帕弥什露西亚深红之渊怎么获得研发获取1、玩家可以在研发系统中抽取获得,这包括基准卡池、主题限定卡池和命运限定卡池,2、在这些卡池中露西亚·深红之渊的基础掉率为1.50%,但如果玩家在卡池中抽取到露西亚·深红之渊其掉率会增加到1.90%。幻痛囚笼商店兑换1、玩家可以通过在幻痛囚笼商店使用幻痛伤痕来兑换露西亚·深红之渊的碎片。2、每周可以最多兑换30个碎片,集

如何把ppt视频嵌入到幻灯片文稿中合成一个文件 如何把ppt视频嵌入到幻灯片文稿中合成一个文件 Mar 20, 2024 am 11:30 AM

MicrosoftPowerPoint演示文稿是我们常用的办公软件之一,为了能够全面细致的展示要说明的内容,视频是一种重要的展示方式之一。要知道,我们在PPT中插入视频,不管是通过超链接,还是通过WindowsMediaPlayer控件,都需要考虑路径问题。那么,如果我们想要嵌入PPT视频并合成一个文件的话,该怎么解决呢?接下来,我们就来看看解决方法吧!步骤如下:1、首先,我们左键双击打开【视频嵌入.pptx】MicrosoftPowerPoint演示文稿。因为用到ShockwaveFlashO

百度网盘的视频怎么下载到手机相册  视频保存到手机相册的方法 百度网盘的视频怎么下载到手机相册 视频保存到手机相册的方法 Mar 13, 2024 am 09:34 AM

  现在都是越来越多的一些朋友们,都是特别的依赖这一百度网盘的软件,都能够发现这里的功能特别的丰富,这一些功能,都是允许大家免费的进行选择操作使用,真的很好的为你们解决一些问题,十分的强大好用,超大的一些存储空间,真的就能帮助大家存储下来各种各样的一些资源,从来都是不会找不到这一些文件资源,无论你们是在工作上或者是一些学习上,有任何想要存储的一些文档类型的内容,都是可以满足大家,对于这里的这一些文件资源,都能够让大家在这里随时的查看或者分享,非常的方便,反正都是永久的保存在你们的账号上,那么你们

See all articles