PHP-FFMpeg 操作视频/音频文件

1,850 阅读1分钟

参考文档  blog.jam00.com/article/inf…

fmpeg功能强大,但我们首先得学会对其进安装(windows下安装)。

下载网址:ffmpeg.org/download.ht…,对应的Windows版本

进入解压后文件的bin目录下,可以看到相应的.exe文件。将bin目录添加到环境变量path中,注意以分号结尾。
验证是否安装成功:
运行cmd命令,在控制台输入命令:ffmpeg -version,结果如下所示:

安装成功! 

项目在使用之前请安装好 FFMpeg

使用composer快速安装 > composer require php-ffmpeg/php-ffmpeg。

使用时请配置 ffmpeg,ffprobe 的执行文件绝对路径。我定义了一些测试用的视频音频文件

$path = [
    'ffmpeg.binaries' => 'D:\ffmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'D:\ffmpeg\bin\ffprobe.exe',
];

$v1 = './static/common/mv.mp4';
$a1 = './static/common/a1.mp3';
$ffmpeg = FFMpeg::create($path);

//视频提取第几秒图片
$video = $ffmpeg->open($v1);
$frame = $video->frame(Coordinate\TimeCode::fromSeconds(2));//提取第几秒的图像
$frame->save('./uploads/uid2/image/image.jpg');


//视频转音频
$video = $ffmpeg->open($v1);
$audio_format = new Audio\Mp3();
$video->save($audio_format, './uploads/uid2/audio/audio.mp3');

//给视频加水印图片  (视频的编码 aac, libvo_aacenc, libfaac, libmp3lame)
libfdk_aac$video = $ffmpeg->open($v1);$watermarkPath = './static/common/water.jpg';
$absolute = ['x' => 50,'y' => 100];
$relative = [    
    'position' => 'relative', 
   'bottom' => 50,
    'right' => 50];
$video->filters()->watermark($watermarkPath, $relative);
$video->save(new Video\X264('aac'), './uploads/uid2/video/1080_new.mp4');  
//注意:x264 类默认使用 libfaac 为编码器,但我安装的是 aac,所以这里要指定为 aac,不然会报错 
//可选项 relative(相对定位) / absolute(绝对,默认)
//若为 relative,有四个参数可选,top 、bottom、left、right ,分别对应四个方位
//若为 absolute,直接填写 x 和 y 坐标即可 




//视频添加水印$video = $ffmpeg->open($v1);
$format = new Video\X264('aac');
$format->setKiloBitrate(1000)->setAudioChannels(2)->setAudioKiloBitrate(256);
$format->on('progress', function ($video, $format, $percentage) 
{
    echo "$percentage % 进度";
});
$video->save($format, './uploads/uid2/video/1080_new.avi');

//获取视频时长
$ffprobe = FFProbe::create($path);
$videoInfo = $ffprobe->format($v1);//也可以使用 get 获取特定值,第二个参数为默认值(若该参数不存在将返回此默认值)
$duration = $ffprobe->format($v1)->get('duration',100);
echo "<pre>";print_r($videoInfo);
echo "</pre>";
echo '视频时长:'.$duration;


//音频转换格式
$audio = $ffmpeg->open($a1);
$format = new Audio\Flac();
$format->on('progress', function ($audio, $format, $percentage) {
    echo "$percentage % 进度";
});
$format->setAudioChannels(2)->setAudioKiloBitrate(256);
$audio->save($format, './uploads/uid2/audio/1080_new.flac');
// 生成音频波形
$audio = $ffmpeg->open($a1);
$waveform = $audio->waveform(640, 120, array('#00FF00'));
$waveform->save('./uploads/uid2/audio/image.png');//必须保存为 png 格式