php ffmpeg.dll,FFMpeg for PHP

FFMpeg for PHP

PHP使用FFMpeg来转换视频格式。

本质是使用ffmpeg服务来执行的,而非通过静态文件dll扩展执行。

Github上搜索FFMPEG,到https://github.com/PHP-FFMpeg/PHP-FFMpeg。

For Windows users : Please find thebinaries at http://ffmpeg.zeranoe.com/builds/

以下操作,是win7 64b php5.5.30环境下进行的。

composer安装

建议通过Composer来安装PHP-FFMpeg

在web服务器根目录下创建文件夹:mkdir  php-ffmpeg

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

composer require php-ffmpeg/php-ffmpeg

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

OK 。PHP-ffmpeg已经安装到了php-ffmpeg目录下。

至于ffmpeg在win7上的安装这里不在赘述。

验证准备

在D://xampp/htdocs/php-ffmpeg下创建index.php文件来学习下这个包的使用。

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

将事先准备好的MP4文件放在项目根目录下为后面做验证测试。

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

验证

基本应用

require 'vendor/autoload.php';

$ffmpeg = FFMpeg\FFMpeg::create();

$video = $ffmpeg->open('./ffmpeg.wmv');

$video

->filters()

->resize(new FFMpeg\Coordinate\Dimension(320, 240))

->synchronize();

$video

->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))

->save('keep.jpg');

$video

->save(new FFMpeg\Format\Video\X264(), 'export-x264.mp4')

->save(new FFMpeg\Format\Video\WMV(), 'export-wmv.wmv')

->save(newFFMpeg\Format\Video\WebM(), 'export-webm.webm');

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

这里只支持wmv的格式转换,其它的暂不支持。均为error。

截图

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

旋转

$video->filters()->rotate($angle);

$angle 的参数必须是下面的一个常量:

FFMpeg\Filters\Video\RotateFilter::ROTATE_90

FFMpeg\Filters\Video\RotateFilter::ROTATE_180

FFMpeg\Filters\Video\RotateFilter::ROTATE_270

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

调整尺寸

调整尺寸的过滤器需要三个参数:

$dimension, 一个 FFMpeg\Coordinate\Dimension实例

$mode, FFMpeg\Filters\Video\ResizeFilter::RESIZEMODE_* constants常量中的一个。

$useStandards, 是否强制使用最新的比率标准的布尔

如果你想要视频处在一个非标准的比率, 你可以使用padding 过滤器 调整视频大小到想要的尺寸,包上黑色的条。

$video->filters()->pad($dimension);

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

水印

$video

->filters()

->watermark($watermarkPath, array(

'position' => 'relative',

'bottom' => 50,

'right' => 50,

));

watermark 过滤器需要两个参数:

$watermarkPath,你水印文件的路径; $coordinates, 一个定义水印放置位置的数组。你可以使用相对路径像上面展示的那样。或者使用绝对路径像这样:

$video

->filters()

->watermark($watermarkPath, array(

'position' => 'absolute',

'x' => 1180,

'y' => 620,

));

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

帧频

改变视频的帧频

$video->filters()->framerate($framerate,

$gop);

framerate(帧频)过滤器需要两个参数:

$framerate,  FFMpeg\Coordinate\Framerate的实例

$gop, aGOPvalue (integer)

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

同步

同步的音频和视频

一些容器使用延迟可能会导致不同步的输出。过滤器可以解决这个问题。

$video->filters()->synchronize();

修剪

在想要的点减掉视频。

$video->filters()->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(30),

FFMpeg\Coordinate\TimeCode::fromSeconds(15));

The clip filter(修剪的过滤器)需要两个参数:

$start,  一个FFMpeg\Coordinate\TimeCode实例, 指定开始剪切的点

$duration, 可选, 一个 FFMpeg\Coordinate\TimeCode实例, 指定要持续的时间

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

元数据

向音频文件中添加元数据。你可以数组的key=value键值对的形式添加你想要的元数据。如果过滤器中没有任何参数传递进来,那么所有的元数据将被从输入文件中删除。目前支持的数据有title, artist, album, artist, composer, track, year, description, artwork

$audio->filters()->addMetadata(["title" => "Some Title", "track" => 1]);

//remove all metadata and video streams from audio file

$audio->filters()->addMetadata();

向音频文件中添加artwork

$audio->filters()->addMetadata(["artwork" => "/path/to/image/file.jpg"]);

注意: 当前ffmpeg (version 3.2.2) only

supports 只支持 .mp3 文件的artwork输出

Gif

GIf是从视频文件中提取的一系列的动画图片。

你可以使用 FFMpeg\Media\Gif::save 方法来保存gif文件。

$video = $ffmpeg->open( '/path/to/video' );

$video

->gif(FFMpeg\Coordinate\TimeCode::fromSeconds(2), new FFMpeg\Coordinate\Dimension(640, 480), 3)

->save($new_file);

这个方法有一个可选的布尔类型的参数,就是动画的持续时间。如果设置的话,可以得到一个确切的gif图片。

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

Formats(格式)

格式要实现 FFMpeg\Format\FormatInterface。 用FFMpeg\Format\VideoInterface来保存视频文件, 用 FFMpeg\Format\AudioInterface 来保存音频文件。

FFMpeg\Format\ProgressableInterface的话可以获得转码的实时信息。

预定义的格式已经提供了事件的过程信息。

$format = new Format\Video\X264();

$format->on('progress', function ($video,$format, $percentage) {

echo"$percentage % transcoded";

});

$video->save($format, 'video.avi');

为事件提供的回调函数可以随时调用。

Add additional parameters

你可以根据你的视频格式为你的编码提供额外的参数。

setAdditionalParameters 方法的参数是一个数组。

$format = new Format\Video\X264();

$format->setAdditionalParameters(array('foo','bar'));

$video->save($format, 'video.avi');

创建你自己的格式

创建一种新的格式最简单的方法就是集成抽象类 FFMpeg\Format\Video\DefaultVideo and FFMpeg\Format\Audio\DefaultAudio,并且实现下面的方法。

class CustomWMVFormat extends FFMpeg\Format\Video\DefaultVideo

{

publicfunction __construct($audioCodec = 'wmav2', $videoCodec = 'wmv2')

{

$this

->setAudioCodec($audioCodec)

->setVideoCodec($videoCodec);

}

publicfunction supportBFrames()

{

return false;

}

publicfunction getAvailableAudioCodecs()

{

return array('wmav2');

}

publicfunction getAvailableVideoCodecs()

{

return array('wmv2');

}

}

Coordinates(坐标)

FFMpeg 使用很多单元来确定时间和空间坐标。

FFMpeg\Coordinate\AspectRatio  表示长宽比

FFMpeg\Coordinate\Dimension  表示一个维度

FFMpeg\Coordinate\FrameRate  表示帧速率

FFMpeg\Coordinate\Point  表示一个点

FFMpeg\Coordinate\TimeCode  表示一个时间码

FFProbe

FFMpeg\FFMpeg 内部使用FFMpeg\FFProbe来检查媒体文件。你也可以用它提取元数据。

$ffprobe = FFMpeg\FFProbe::create();

$ffprobe

->streams('/path/to/video/mp4') // extracts streams informations

->videos()                     // filters video streams

->first()                      // returns the first video stream

->get('codec_name');           // returns the codec_name property

$ffprobe = FFMpeg\FFProbe::create();

$ffprobe

->format('/path/to/video/mp4') // extracts file informations

->get('duration');            // returns the duration property

c72cac56513c?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值