介绍
FFmpeg
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。
FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,现在由Michael Niedermayer维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。
FFmpeg 是视频处理中广泛使用的开源软件。可以称之为视频编辑的
瑞士军刀
Github地址:https://github.com/BtbN/FFmpeg-Builds/releases
安装
以 Ubuntu 18.04.5 LTS
为例
安装
sudo apt-get install ffmpeg
查看ffmpeg
版本版本号
ffmpeg -version
ffmpeg version 3.4.11-0ubuntu0.1 Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
查看ffprobe
版本版本号
ffprobe -version
ffprobe version 3.4.11-0ubuntu0.1 Copyright (c) 2007-2022 the FFmpeg developers
built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
使用
安装webman框架
$ composer create-project workerman/webman webman2024
安装 PHP-FFMpeg
注意:此库需要
PHP 8.0
或更高版本,这里使用PHP 8.2.14
composer require php-ffmpeg/php-ffmpeg
指定PHP版本安装
$ /usr/local/php-8.2.14/bin/php /home/www/build/composer.phar require php-ffmpeg/php-ffmpeg
./composer.json has been updated
Installing dependencies from lock file (including require-dev)
Package operations: 8 installs, 1 update, 10 removals
- Downloading symfony/process (v5.4.34)
- Downloading symfony/var-exporter (v7.0.1)
- Downloading symfony/service-contracts (v3.4.0)
- Downloading psr/cache (3.0.0)
- Downloading symfony/cache-contracts (v3.4.0)
- Downloading symfony/cache (v6.4.2)
- Downloading spatie/temporary-directory (2.2.0)
- Downloading evenement/evenement (v3.0.2)
- Downloading php-ffmpeg/php-ffmpeg (v1.1.0)
案例1:MP4视频中提取一张图片
/**
* @desc 案例1:MP4视频中提取一张图片
* @param Request $request
* @author Tinywan(ShaoBo Wan)
*/
public function ffmpeg(Request $request)
{
/** 1. 初始化配置*/
$ffmpeg = FFMpegFFMpeg::create([
'ffmpeg.binaries' => '/usr/bin/ffmpeg',
'ffprobe.binaries' => '/usr/bin/ffprobe'
]);
/** 2. 读取视频文件*/
$video = $ffmpeg->open(runtime_path() . DIRECTORY_SEPARATOR . 'tinywan.mp4');
/** 3. 提取一张图片,从视频的 20 秒处 */
$res = $video->frame(FFMpegCoordinateTimeCode::fromSeconds(20))
->save(runtime_path() . DIRECTORY_SEPARATOR . 'tinywan.jpg');
var_dump($res);
}
访问地址
curl http://127.0.0.1:8888/index/ffmpeg
以上打印输出
...
["mapper":"FFMpegFFProbe":private]=>
object(FFMpegFFProbeMapper)#45 (0) {
}
}
["filters":protected]=>
object(FFMpegFiltersFiltersCollection)#58 (2) {
["sorted":"FFMpegFiltersFiltersCollection":private]=>
NULL
["filters":"FFMpegFiltersFiltersCollection":private]=>
array(0) {
}
}
["streams":"FFMpegMediaAbstractStreamableMedia":private]=>
NULL
["fs":protected]=>
NULL
["fsId":protected]=>
NULL
}
}
原视频截图
通过
FFmpeg
进行截图
案例2:给MP4视频添加水印
/**
* @desc 案例2:给MP4视频添加水印
* @param Request $request
* @author Tinywan(ShaoBo Wan)
*/
public function watermark(Request $request)
{
/** 1. 初始化配置*/
$ffmpeg = FFMpegFFMpeg::create([
'ffmpeg.binaries' => '/usr/bin/ffmpeg',
'ffprobe.binaries' => '/usr/bin/ffprobe'
]);
/** 2. 读取视频文件*/
$video = $ffmpeg->open(runtime_path() . DIRECTORY_SEPARATOR . 'tinywan.mp4');
/** 3. 水印图片地址 */
$watermarkpath = runtime_path() . DIRECTORY_SEPARATOR . 'tinywan-watermark.png';
/** 4. 视频水印处理 */
$video->filters()->watermark($watermarkpath, [
'position' => 'relative',
'bottom' => 120,
'right' => 120,
]);
/** 5. 解码和编码格式。x264是用于编码H.264/MPEG-4 AVC视频流的免费软件库 */
$format = new FFMpegFormatVideoX264();
/** 6. 保存添加水印视频文件 */
$video->save($format, runtime_path() . DIRECTORY_SEPARATOR . 'tinywan-watermark.mp4');
}
访问地址
curl http://127.0.0.1:8888/index/watermark
进行处理,这里处理时间和视频大小有关系
可以看到
tinywan-watermark.mp4
视频被加上了开源技术小栈
的logo
水印
案例3:视频剪辑(抱歉代码忘记粘贴了,在评论区)
原文始发于微信公众号(开源技术小栈):入门 | 如何在PHP中使用FFmpeg进行音视频操作
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/247820.html