- 谷歌了半天发现可以使用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 这个是错误,不可能输出.
通过上面的截图:我们可以看到输入的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秒正好!ok
http://www.cnblogs.com/phphuaibei/archive/2011/09/09/2172589.html
相关推荐
2. **构建命令**:在Java程序中,你需要构建一个ffmpeg命令,指定视频文件的路径和输出缩略图的路径。命令通常类似于`ffmpeg -i input.mp4 -ss time -vframes 1 output.png`,其中`-i`参数是输入视频,`-ss`定义了...
【使用FFmpeg获取视频信息和缩略图】 FFmpeg提供了丰富的命令行参数,可以方便地获取视频信息并生成缩略图。以下是一些示例: 1. **生成缩略图**: - 示例1:创建一个352x240的JPG格式缩略图,时间点是视频的开始...
总的来说,FFmpeg提供了一个灵活且功能强大的接口来生成视频缩略图,无论你是哪种编程语言的开发者,都可以通过调用系统命令或者封装库来利用FFmpeg的强大功能。记得在实际应用中,确保对用户输入进行安全检查,防止...
总结,利用FFmpeg在Windows上获取视频缩略图是一个简单且高效的方法,只需掌握基本的FFmpeg命令行用法或者封装成工具类供项目使用。通过调整命令参数,你可以自由定制缩略图的质量、大小以及所选帧数,为你的视频...
在IT行业中,生成视频缩略图是一项常见的任务,特别是在多媒体处理和在线视频平台。`flv`是一种流行的视频格式,全称为Flash Video,主要用于网络流媒体播放。`mpplay`可能指的是一个视频播放器或者处理工具,用于...
在“ffmpeg截取视频缩略图”这个主题中,我们将探讨如何利用FFmpeg来从视频文件中提取帧作为缩略图。 首先,FFmpeg支持多种视频格式,包括但不限于MP4、AVI、MKV、WMV等。截取视频缩略图的过程,本质上是将视频中的...
4. **使用视频地址获取缩略图的原理**:大多数现代视频格式(如MP4、WebM、FLV等)都支持时间戳查询,允许我们指定视频中的某一时刻来获取该时刻对应的帧作为缩略图。例如,通过HTTP Range请求,我们可以请求视频...
总结来说,这个PHP类提供了便捷的接口,让我们能够利用FFmpeg的强大功能,无需深入理解底层的视频处理技术,就可以在PHP项目中轻松实现视频转换、截图和生成缩略图。对于需要处理多媒体内容的Web应用程序,这无疑是...
通过深入学习和实践,你可以充分利用 FFmpeg 来满足各种多媒体处理需求。在处理 FLV 转 MKV 的过程中,确保你的系统资源充足,因为视频编码可能需要较高的 CPU 和内存资源。同时,转换后的文件大小可能会有所不同,...
FFmpeg是一款开源的跨平台多媒体处理工具,广泛用于音频和视频的编码、解码、转换以及流媒体处理。FFmpeg5.0版本是其最新的一个发行版,它包含了大量的优化和新特性,使得处理多媒体数据更为高效。这次的修改主题是...
在本文中,我们将深入探讨如何利用FFmpeg解复用FLV(Flash Video)文件,这些文件通常包含H264视频和AAC音频。 首先,FLV是一种常见的网络流媒体格式,最初由Adobe Systems开发,用于在Flash Player中播放视频内容...
通过ffmpeg获取视频文件的视频时间长度信息,可以获取各种保存在本地的视频文件中的视频时长信息。完整的C代码和codeblocks工程,没有使用ffmpeg命令,是调用的ffmpeg API方式实现的,在linux下可直接编译和测试通过...
Java使用FFmpeg解析视频、截图和获取播放时间的实践是一个重要的技术主题,尤其在多媒体处理领域。FFmpeg是一个强大的开源工具集,包含了多种用于处理音频和视频的工具,如ffprobe、ffmpeg等。在Java中集成FFmpeg,...
5. **保存图像**:一旦解码得到视频帧(通常是`org.bytedeco.ffmpeg.avutil.AVFrame`类型),你可以使用`sws_scale()`函数将其转换为RGB格式,以便于保存为常见的图像格式,如JPEG或PNG。`org.bytedeco.ffmpeg....
Java 使用 FFmpeg 截取视频图片是一个常见的任务,它涉及到多媒体处理、命令行操作和跨平台编程。FFmpeg 是一个强大的开源工具集,用于处理音频和视频文件,包括编码、解码、转码、流处理等功能。在 Java 中,我们...
本篇文章将详细介绍如何利用FFmpeg来创建视频缩略图,并探讨相关的技术要点。 FFmpeg是一款跨平台的多媒体处理软件,它可以用于转换、编码、解码、流化音频和视频。在生成视频缩略图方面,FFmpeg提供了丰富的参数...
FFmpeg是一款强大的开源跨平台多媒体...通过以上步骤和知识,我们可以利用FFmpeg从视频文件中提取特定帧,将其转换为PPM图像,进而进行各种后期处理。这个过程对于视频分析、内容检测和多媒体应用开发具有重要意义。
在Java编程环境中,获取视频缩略图是一项常见的需求,尤其在多媒体应用或者视频分享平台中。这个过程涉及到多媒体处理和图像操作的知识。本文将详细解释如何在Java中实现这一功能,以及相关的技术点。 首先,Java...
在本文中,我们将深入探讨如何使用Java程序调用FFmpeg执行视频文件格式转换,特别是将非FFmpeg原生支持的格式转换为FLV格式。FFmpeg是一个强大的多媒体处理工具,支持多种视频、音频格式的编码、解码和转换。在这个...