PHP-FFMpeg 操作音视频
作者:mmseoamin日期:2023-12-05

✨ 目录

    • ▷ 安装PHP-FFMpeg
    • ▷ 视频中提取一张图片
    • ▷ 视频中提取多张图片
    • ▷ 调整视频大小
    • ▷ 视频添加水印
    • ▷ 生成音频波形
    • ▷ 音频转换
    • ▷ 给音频添加元数据
    • ▷ 拼接多个音视频
    • ▷ 截取音视频
    • ▷ 提取 gif 动图
    • ▷ 裁剪视频
    • ▷ 转换视频格式
    • ▷ 调整视频帧率
    • ▷ 获取音视频信息

▷ 安装PHP-FFMpeg

  • 在使用 ffmpeg 之前,需要 安装软件 和 操作命令库
  • 软件根据系统,自行选择安装,而操作命令库需要根据下列的命令进行安装
  • 软件地址:https://github.com/BtbN/FFmpeg-Builds/releases
  • 命令地址:https://github.com/PHP-FFMpeg/PHP-FFMpeg/
composer require php-ffmpeg/php-ffmpeg

▷ 视频中提取一张图片

  • 这里的 video.mp4 准备的是一段宫崎骏的视频片段
  • FFMpeg\FFMpeg::create 中需要指定系统软件中 ffmpeg 和 ffprobe 的安装位置
  • 通过 FFMpeg\Coordinate\TimeCode::fromSeconds 可以指定提取第几秒的视频作为图片保存
 'F:\ffmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);
$video = $ffmpeg->open('video.mp4');
$video
    ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))
    ->save('image.jpg');

PHP-FFMpeg 操作音视频,提取图片,第1张

▷ 视频中提取多张图片

require 'vendor/autoload.php';
$ffmpeg = FFMpeg\FFMpeg::create([
    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);
$video = $ffmpeg->open('video.mp4');
$video
    ->filters()
    ->extractMultipleFrames(FFMpeg\Filters\Video\ExtractMultipleFramesFilter::FRAMERATE_EVERY_10SEC, '/path/to/destination/folder/')
    ->synchronize();
$video
    ->save(new FFMpeg\Format\Video\X264(), '/path/to/new/file');

▷ 调整视频大小

  • FFMpeg\Coordinate\Dimension 可以设置调整后的分辨率
  • ResizeFilter::RESIZEMODE_FIT 是缩放模式中的一种,按照给定值进行调整
  • ResizeFilter::RESIZEMODE_INSET 是缩放模式中的一种,按照给定的尺寸,等比缩放,如果设置的宽高比跟原视频不一样,那会自动根据宽或高进行等比缩放
  • ResizeFilter::RESIZEMODE_SCALE_WIDTH 是缩放模式中的一种,高按照给定值,宽进行比例缩放
  • ResizeFilter::RESIZEMODE_SCALE_HEIGHT 是缩放模式中的一种,宽按照给定值,高进行比例缩放
  • true / false 是否强制使用最近的纵横比标准
 'F:\ffmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);
$video = $ffmpeg->open('video.mp4');
$video
    ->filters()
    ->resize(new FFMpeg\Coordinate\Dimension(160,90), FFMpeg\Filters\Video\ResizeFilter::RESIZEMODE_FIT, true);
$video
    ->save(