Skip to content

纯php5基于命名空间写的调用ffmpeg处理视频,可以方便地实现对php处理视频操作

Notifications You must be signed in to change notification settings

bingyangzeng/php-ffmpeg

 
 

Repository files navigation

前言

Phpffmpeg这个模块是基于php5写的,定义了许多可以处理的视频API,同时既可以根据实际需要不断拓展API。

可以参考:https://ffmpeg-php.sourceforge.net/doc/api/ffmpeg_frame.php

用法
####第一种方式: 模块已经实现了命名空间与require的映射结合,利用php5的命名空间和自动加载可以很方便地使用。 在项目中要建立一个名为Phpffmpeg(名称不能改,因为要与文件定义的根命名空间对应相同)的空的文件夹,把文件下载后,将里面的文件复制至新建的Phpffmpeg文件夹下。

首先要导入 FFmpegAutoloader.class.php ,在执行静态的register()注册方法 require_once "path/FFmpegAutoloader.class.php"; \Phpffmpeg\FFmpegAutoloader::register();

这个path是新建Phpffmpeg文件的路径。

其实将FFmpegAutoloader文件命名成带有class的形式,如FFmpegAutoloader.class.php,是为了兼容在thinkphp3.2以上框架的命名空间加载。 所以如果实在tp3.2以上的的框架中使用该模块的话,同样,需要在核心框架library中新建Phpffmpeg文件夹, 将下载的文件全部复制至Phpffmpeg文件夹中。那么在Controller中使用的话,就不需要require_once了,直接执行

\Phpffmpeg\FFmpegAutoloader::register();

这样已经实现了自动加载和自动注册功能,因为tp自动的自动加载功能会先执行require_once将文件包含进来。

####第二种方式:
最近引入了一个composer的psr4自动加载的,在使用中,直接include "./vendor/autoload.php",这个也是完成命名空间的自动加载的注册,不需要再引入FFmpegAutoloader.class.php

API详解

ffmpeg_movie部分

(1)$movie = new ffmpeg_movie(String path_to_media, boolean persistent);

创建视频处理对象,第一个参数是视频url,第二个参数是以长连接打开视频资源,true或者false。

(2)$movie->getDuration(); 获取视频时长,单位秒

(3)$movie->getFrameCount(); 获取视频帧数

(4)$movie->getFrameRate(); 获取帧率

(5)$movie->getFilename(); 获取文件路径,包括文件名称

(6)$movie->getComment(); 获取视频的注释

(7)$movie->getTitle(); 获取主题

(8)$movie->getFrameHeight(); 获取视频高度(分辨率)

(9)$movie->getFrameWidth() 获取视频宽度(分辨率)

(10)$movie->getPixelFormat()

获取像素格式,例如yuv420p

(11)$movie->getFrameNumber(); 获取当前帧索引

(12)$movie->getFrame([Integer framenumber]);

获取对应的帧,返回的对象将作为new ffmpeg_frame(Resource gd_image)的实例化对象。 Returns a frame from the movie as an ffmpeg_frame object. Returns false if the frame was not found.

(13)$movie->getNextKeyFrame();

获取下一帧 Returns the next key frame from the movie as an ffmpeg_frame object. Returns false if the frame was not found.

(14)$movie->getSize(); 获取视频的大小,单位kb

(15)$movie->getImage($savePath,$second,$width,$height);
获取视频的某个时间的帧图片(关键帧)
$savePath 图片保存的路径,包含图片的名称。例如path/my.jpg;
$second 视频对应的秒数,int。
$width 图片的宽度,int。
$height 图片的高度,int。

执行此函数成功时返回true,失败返回false。

(16)$movie->getGif($savePath,$startsecond,$lastsecond,$width,$height); 截取视频的某个时间开始至某个时间的gif动态图。
$savePath 图片保存的路径,包含图片的名称。例如path/my.gif;
$startsecond 视频开始秒数,int。
$lastsecond 持续的秒数,即gif的时长。
$width gif的宽度,int。
$height gif的高度,int。

执行此函数成功时返回true,失败返回false。

ffmpeg_frame部分

(1)$frame = new ffmpeg_frame(Resource gd_image);

参数是一个图片资源对象(需要自己创建),如果执行$movie->getFrame([Integer framenumber]);择返回的就是一个相当于new ffmpeg_frame(Resource gd_image);的实例化对象;

(2)$frame->getWidth();

返回宽度

(3)$frame->getHeight();

返回高度

(3)$frame->getPTS();

(4)$frame->getPresentationTimestamp();

(5)$frame->resize(Integer width, Integer height [, Integer crop_top [, Integer crop_bottom [, Integer crop_left [, Integer crop_right ]]]]);

(6)$frame->crop(Integer crop_top [, Integer crop_bottom [, Integer crop_left [, Integer crop_right ]]]);

(7)$frame->toGDImage();

返回一个dg对象。

例如:

$frame = $movie->getFrame(6);//返回ffmpeg_frame的对象
$frame->resize(400,400,20,20,20,50);
$img = $frame->toGDImage();
//将gd对象保存为图片
imagejpeg($img,'my.jpeg');
imagedestroy($img); 

About

纯php5基于命名空间写的调用ffmpeg处理视频,可以方便地实现对php处理视频操作

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • PHP 100.0%