▷ 安装PHP-FFMpeg
composer require php-ffmpeg/php-ffmpeg
▷ 视频中提取一张图片
- 这里的
video.mp4
准备的是一段宫崎骏的视频片段
FFMpeg\FFMpeg::create
中需要指定系统软件中 ffmpeg
和 ffprobe
的安装位置
- 通过
FFMpeg\Coordinate\TimeCode::fromSeconds
可以指定提取第几秒的视频作为图片保存
<?php
require 'vendor/autoload.php';
$ffmpeg = FFMpeg\FFMpeg::create([
'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',
'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);
$video = $ffmpeg->open('video.mp4');
$video
->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))
->save('image.jpg');
▷ 视频中提取多张图片
require 'vendor/autoload.php';
$ffmpeg = FFMpeg\FFMpeg::create([
'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',
'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);
$video = $ffmpeg->open('video.mp4');
$video
->filters()
->extractMultipleFrames(FFMpeg\Filters\Video\ExtractMultipleFramesFilter::FRAMERATE_EVERY_10SEC, '/path/to/destination/folder/')
->synchronize();
$video
->save(new FFMpeg\Format\Video\X264(), '/path/to/new/file');
▷ 调整视频大小
FFMpeg\Coordinate\Dimension
可以设置调整后的分辨率
ResizeFilter::RESIZEMODE_FIT
是缩放模式中的一种,按照给定值进行调整
ResizeFilter::RESIZEMODE_INSET
是缩放模式中的一种,按照给定的尺寸,等比缩放,如果设置的宽高比跟原视频不一样,那会自动根据宽或高进行等比缩放
ResizeFilter::RESIZEMODE_SCALE_WIDTH
是缩放模式中的一种,高按照给定值,宽进行比例缩放
ResizeFilter::RESIZEMODE_SCALE_HEIGHT
是缩放模式中的一种,宽按照给定值,高进行比例缩放
true / false
是否强制使用最近的纵横比标准
<?php
require 'vendor/autoload.php';
$ffmpeg = FFMpeg\FFMpeg::create([
'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',
'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);
$video = $ffmpeg->open('video.mp4');
$video
->filters()
->resize(new FFMpeg\Coordinate\Dimension(160,90), FFMpeg\Filters\Video\ResizeFilter::RESIZEMODE_FIT, true);
$video
->save(new FFMpeg\Format\Video\X264(), 'video_new.mp4');
▷ 视频添加水印
- 通过
watermark
可以设置水印的相关信息,第一个参数是设置水印的地址,第二个参数里面可以设置水印位置参数
position:
可以选择 relative
相对定位,或者 absolute
绝对定位,如果选择 absolute
,则只需要填写 x
和 y
坐标即可
top / bottom / left / right:
四个方位上下左右距离边