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

介绍

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
  }
}

原视频截图

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

通过 FFmpeg 进行截图

入门 | 如何在PHP中使用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 进行处理,这里处理时间和视频大小有关系

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

可以看到 tinywan-watermark.mp4 视频被加上了开源技术小栈logo水印

案例3:视频剪辑(抱歉代码忘记粘贴了,在评论区)


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


原文始发于微信公众号(开源技术小栈):入门 | 如何在PHP中使用FFmpeg进行音视频操作

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/247820.html

(0)
李, 若俞的头像李, 若俞

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!