使用php-ffmpeg之前需要 先下载ffmpeg,官网:http://ffmpeg.org/
点击Download跳转到下面的页面
点击红框跳转到下面的页面
下载后解压
完成上面的步骤后使用composer下载php-ffmpeg
composer require php-ffmpeg/php-ffmpeg
示例代码(app/controller/Index)和使用代码(app/controller/getScreenshot):
<?php
namespace app\controller;
use app\BaseController;
use FFMpeg\FFMpeg;
use FFMpeg\FFProbe;
use FFMpeg\Coordinate\TimeCode;
use FFMpeg\Coordinate\Dimension;
use FFMpeg\Format\Video\WMV;
use FFMpeg\Format\Audio\Wav;
class Index extends BaseController
{
public function getScreenshot(){
ini_set('memory_limit',-1); //没有内存限制
set_time_limit(0);//不限制执行时间
//ffmpeg配置
$path = [
'ffmpeg.binaries' => 'E:/phpstudy_pro\WWW/video/video-php/public/ffmpeg/bin/ffmpeg.exe',
'ffprobe.binaries' => 'E:/phpstudy_pro/WWW/video/video-php/public/ffmpeg/bin/ffprobe.exe',
'timeout' => 3600,//基础进程的超时
'ffmpeg.threads' => 12//FFMpeg应使用的线程数
];
$ffmpeg = FFMpeg::create($path);
$ffprobe= FFProbe::create($path);
//视频文件夹
$video_dir = root_path().'public/static/assets/mp4';
// $videoInfo=$ffprobe->format($video_dir."/bear.mp4");//也可以使用get获取特定值,第二个参数为默认值(若该参数不存在将返回此默认值)
//时长 s
echo "执行开始".date("Y-m-d H:i:s")."\n";
//获取视频名称
$video_array = scandir($video_dir);
unset($video_array[0]);
unset($video_array[1]);
$copy_jpg = root_path().'public/static/assets/jpg'.date("Ymd");
if (!is_dir($copy_jpg)) {
// 创建文件加
mkdir($copy_jpg, 0777, true);
}else{
deldir($copy_jpg);
}
foreach ($video_array as $key=>$val){
$file = $video_dir."/".$val;
$duration=$ffprobe->format($file)->get('duration',100);//获取视频时长
$random = rand(1,intval($duration));//截去毫秒并生成一个随机数(不需要可改为固定数(不超过视频时长))
//截去视频图片并保存
$video = $ffmpeg->open($file);
$jpgName = pathinfo($file,PATHINFO_FILENAME).".jpg";
$video->frame(TimeCode::fromSeconds($random))->save($copy_jpg.'/'.$jpgName);
echo "执行成功源文件".$file.",截图为".$copy_jpg.'/'.$jpgName."\n";
// die;
}
echo "执行结束".date("Y-m-d H:i:s")."\n";
}
//示例
public function index()
{
// 创建
$path = [
'ffmpeg.binaries' => 'E:/phpstudy_pro\WWW/video/video-php/public/ffmpeg/bin/ffmpeg.exe',
'ffprobe.binaries' => 'E:/phpstudy_pro/WWW/video/video-php/public/ffmpeg/bin/ffprobe.exe',
'timeout' => 3600,//基础进程的超时
'ffmpeg.threads' => 12//FFMpeg应使用的线程数
];
$ffmpeg = FFMpeg::create($path);
// // 音频资源
$newAudio = root_path().'/public/static/assets/new.mp3';
$audio1 = root_path().'/public/static/assets/horse.mp3';
$audio2 = root_path().'/public/static/assets/cuocuocuo.mp3';
// 生成音频波形
$audio = $ffmpeg->open($audio1);
$waveform = $audio->waveform(640, 120, array('#00FF00'));
$waveform->save(root_path().'/public/static/assets/waveform.png');
// 拼接音频
$audio = $ffmpeg->open($audio1);
$audio->concat([$audio1, $audio2])->saveFromSameCodecs($newAudio);
// 转换音频格式(wav)
$audio = $ffmpeg->open($audio1);
$audio->save(new Wav(), root_path().'/public/static/assets/horse.wav');
// 转换视频格式(wmv)
$video = $ffmpeg->open(root_path().'/public/static/assets/bear.mp4');
$video->save(new WMV(), root_path().'/public/static/assets/bear.wmv');
// 截取视频图片
$file = root_path().'static/assets/bear.mp4';
$video = $ffmpeg->open($file);
$video->frame(TimeCode::fromSeconds(12))->save(root_path().'/static/assets/frame.jpg');
echo "成功";
// 生成视屏动态
$video = $ffmpeg->open(root_path().'/public/static/assets/bear.mp4');
$video
->gif(TimeCode::fromSeconds(2), new Dimension(640, 480), 3)
->save(root_path().'/public/static/assets/bear.gif');
//获取视频信息or时长
$ffprobe=FFProbe::create($path);
$videoInfo=$ffprobe->format($file);//也可以使用get获取特定值,第二个参数为默认值(若该参数不存在将返回此默认值)
$duration=$ffprobe->format($file)->get('duration',100);
dump($videoInfo);
dump($duration);
}
}