php使用ffmpeg编辑视频

1.安装ffmpeg

image.png


2.php中使用

     在php中的文件中,调用系统命令:system(),直接调用ffmpeg进行使用

image.png




如果实在tp3.2以上的的框架中使用该模块的话,同样,需要在核心框架library中新建Phpffmpeg文件夹,

将下载的文件全部复制至Phpffmpeg文件夹中。那么在Controller中使用的话,就不需要require_once了,直接执行

\Phpffmpeg\FFmpegAutoloader::register();

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

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);




-----------、

PHP使用使用ffmpeg给视频增加字幕显示的方法给视频增加字幕显示的方法
本文实例讲述了PHP使用ffmpeg给视频增加字幕显示的方法。分享给大家供大家参考。具体实现方法如下:
复制代码 代码如下:
<?php
$dir = ‘./’; // set to current folder
if ($handle = opendir($dir)) {
while(false!== ($file = readdir($handle))) {
if ( is_file($dir.$file) ){
if (preg_match(“‘\.(avi)$'”, $file) ){
$sub_file = str_ireplace(“.avi”, “.srt”, $dir.$file);
$idx_file = str_ireplace(“.avi”, “.idx”, $dir.$file);
$thumb_file = str_ireplace(“.avi”, “.jpg”, $dir.$file);
$out_file = str_ireplace(“.avi”, “.mp4”, $dir.$file);
flv_convert_get_thumb($dir.$file, $sub_file, $idx_file, $thumb_file, $out_file);
}
else{
continue;
}
}
}
closedir($handle);
}
//flv_convert_get_thumb(‘input.avi’, ‘input.srt’, ‘output.jpg’, ‘output.ogm’);
// code provided and updated by steve of phpsnaps ! thanks
// accepts:
// 1: the input video file
// 2: path to thumb jpg
// 3: path to transcoded mpeg?
function flv_convert_get_thumb($in, $in_sub, $in_idx, $out_thumb, $out_vid){
// get thumbnail
$cmd = ‘ffmpeg -v 0 -y -i ‘.$in.’ -vframes 1 -ss 250 -vcodec mjpeg -f rawvideo -s 286×160 -aspect 16:9 ‘.$out_thumb;
$res = shell_exec($cmd);
// $res is the output of the command
// transcode video
$cmd = ‘mencoder ‘.$in.’ -o ‘.$out_vid.’ -sub ‘.$in_sub.’ -subfont-text-scale 3.0 -subpos 99 -af volume=10 -aspect 16:9 -of avi
-noodml -ovc x264 -x264encop$
$res = shell_exec($cmd);
}
?>

添加回复:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。