前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >入门 | 如何在PHP中使用FFmpeg进行音视频操作

入门 | 如何在PHP中使用FFmpeg进行音视频操作

作者头像
Tinywan
发布2024-01-19 16:02:08
3210
发布2024-01-19 16:02:08
举报
文章被收录于专栏:开源技术小栈开源技术小栈

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 为例

安装

代码语言:javascript
复制
sudo apt-get install ffmpeg

查看ffmpeg 版本版本号

代码语言:javascript
复制
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 版本版本号

代码语言:javascript
复制
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框架

代码语言:javascript
复制
$ composer create-project workerman/webman webman2024

安装 PHP-FFMpeg

注意:此库需要PHP 8.0或更高版本,这里使用PHP 8.2.14

代码语言:javascript
复制
composer require php-ffmpeg/php-ffmpeg

指定PHP版本安装

代码语言:javascript
复制
$ /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视频中提取一张图片

代码语言:javascript
复制
/**
* @desc 案例1:MP4视频中提取一张图片
* @param Request $request
* @author Tinywan(ShaoBo Wan)
*/
public function ffmpeg(Request $request)
{
    /** 1. 初始化配置*/
    $ffmpeg = \FFMpeg\FFMpeg::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(\FFMpeg\Coordinate\TimeCode::fromSeconds(20))
        ->save(runtime_path() . DIRECTORY_SEPARATOR . 'tinywan.jpg');
    var_dump($res);
}

访问地址curl http://127.0.0.1:8888/index/ffmpeg 以上打印输出

代码语言:javascript
复制
      ...
      ["mapper":"FFMpeg\FFProbe":private]=>
      object(FFMpeg\FFProbe\Mapper)#45 (0) {
      }
    }
    ["filters":protected]=>
    object(FFMpeg\Filters\FiltersCollection)#58 (2) {
      ["sorted":"FFMpeg\Filters\FiltersCollection":private]=>
      NULL
      ["filters":"FFMpeg\Filters\FiltersCollection":private]=>
      array(0) {
      }
    }
    ["streams":"FFMpeg\Media\AbstractStreamableMedia":private]=>
    NULL
    ["fs":protected]=>
    NULL
    ["fsId":protected]=>
    NULL
  }
}

原视频截图

通过 FFmpeg 进行截图

案例2:给MP4视频添加水印

代码语言:javascript
复制
/**
 * @desc 案例2:给MP4视频添加水印
 * @param Request $request
 * @author Tinywan(ShaoBo Wan)
 */
public function watermark(Request $request)
{
    /** 1. 初始化配置*/
    $ffmpeg = \FFMpeg\FFMpeg::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 \FFMpeg\Format\Video\X264();

    /** 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:视频剪辑(抱歉代码忘记粘贴了,在评论区)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • 使用
    • 安装webman框架
      • 安装 PHP-FFMpeg
        • 案例1:MP4视频中提取一张图片
          • 案例2:给MP4视频添加水印
            • 案例3:视频剪辑(抱歉代码忘记粘贴了,在评论区)
            相关产品与服务
            媒体处理
            媒体处理(Media Processing Service,MPS)是一种云端音视频处理服务。基于腾讯多年音视频领域的深耕,为您提供极致的编码能力,大幅节约存储及带宽成本、实现全平台播放,同时提供视频截图、音视频增强、内容理解、内容审核等能力,满足您在各种场景下对视频的处理需求。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档