php-ffmpeg 中文版使用功能介绍

[复制链接]
陈家粉儿Lv.7 显示全部楼层 发表于 2021-8-6 11:34:52 |阅读模式 打印 上一主题 下一主题
安卓上架
php-ffmpeg

面向对象的库,可使用FFmpeg / AVConv转换视频/音频文件。

查看另一个惊人的: PHP FFMpeg extras, 您将在其中找到许多音频/视频格式。

请注意该库如何工作:

该库需要有效的FFMpeg安装。您将需要FFMpeg和FFProbe二进制文件才能使用它。确保可以使用系统PATH找到这些二进制文件,以获取二进制文件检测的好处,否则,您必须在加载时显式给出二进制文件路径。

对于Windows用户:请在http://ffmpeg.zeranoe.com/builds/中找到二进制文件。

已知的问题:
  • Using rotate and resize will produce a corrupted output when using
    libav 0.8. 使用rotate和resize将产生损坏的输出 。该错误已在版本9中修复。此错误未在最新的ffmpeg版本中出现。
安装

推荐的安装PHP-FFMpeg的方法是通过 Composer.

  1. $ composer require php-ffmpeg/php-ffmpeg
复制代码
基本用法
  1. require 'vendor/autoload.php';
  2. $ffmpeg = FFMpeg\FFMpeg::create();
  3. $video = $ffmpeg->open('video.mpg');
  4. $video
  5.     ->filters()
  6.     ->resize(new FFMpeg\Coordinate\Dimension(320, 240))
  7.     ->synchronize();
  8. $video
  9.     ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))
  10.     ->save('frame.jpg');
  11. $video
  12.     ->save(new FFMpeg\Format\Video\X264(), 'export-x264.mp4')
  13.     ->save(new FFMpeg\Format\Video\WMV(), 'export-wmv.wmv')
  14.     ->save(new FFMpeg\Format\Video\WebM(), 'export-webm.webm');
复制代码


文献资料

本文档是发现API的简介。建议浏览源代码,因为它是自记录的。

FFMpeg

FFMpeg\FFMpeg是用来操纵媒体的主要对象。要构建它,请使用static FFMpeg\FFMpeg::create:

  1. $ffmpeg = FFMpeg\FFMpeg::create();
复制代码

FFMpeg将自动检测ffmpeg和ffprobe二进制文件。如果要显式给出二进制路径,则可以将数组作为配置传递。Psr\Logger\LoggerInterface 也可以传递A 来记录二进制执行。

  1. $ffmpeg = FFMpeg\FFMpeg::create(array(
  2.     'ffmpeg.binaries'  => '/opt/local/ffmpeg/bin/ffmpeg',
  3.     'ffprobe.binaries' => '/opt/local/ffmpeg/bin/ffprobe',
  4.     'timeout'          => 3600, //基础进程的超时
  5.     'ffmpeg.threads'   => 12,   // FFMpeg应该使用的线程数
  6. ), $logger);
复制代码

操纵媒体

FFMpeg\FFMpeg根据URI创建媒体。URI可以是指向本地文件系统资源,HTTP资源或FFmpeg支持的任何资源的指针。

注意: 要列出FFmpeg构建的所有受支持资源类型,请使用以下
-protocols command:

  1. ffmpeg -protocols
复制代码

若要打开资源,请使用 FFMpeg\FFMpeg:pen 方法.

  1. $ffmpeg->open('video.mpeg');
复制代码

可以解决两种类型的媒体: FFMpeg\Media\Audio and FFMpeg\Media\Video.
A third type, FFMpeg\Media\Frame, 可以通过视频获得第三种类型。

Video

FFMpeg\Media\Video 可以进行代码转换,即:更改编解码器,隔离音频或视频。可以提取帧。

转码

您可以使用FFMpeg\Media\Video:save方法对视频进行转码。您将FFMpeg\Format\FormatInterface为此通过。

请注意,音频和视频比特率是在格式上设置的。

  1. $format = new FFMpeg\Format\Video\X264();
  2. $format->on('progress', function ($video, $format, $percentage) {
  3.     echo "$percentage % transcoded";
  4. });
  5. $format
  6.     ->setKiloBitrate(1000)
  7.     ->setAudioChannels(2)
  8.     ->setAudioKiloBitrate(256);
  9. $video->save($format, 'video.avi');
复制代码

可以实时监视转码进度,有关更多信息,请参见下面的“格式”文档。

提取图像

您可以使用FFMpeg\Media\Video::frame 方法在任何时间码上提取帧。

该代码返回FFMpeg\Media\Frame与第二个42对应的实例。您可以将任何FFMpeg\Coordinate\TimeCodeas作为参数传递,有关更多信息,请参见下面的专用文档。

  1. $frame = $video->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(42));
  2. $frame->save('image.jpg');
复制代码

如果要从视频中提取多个图像,可以使用以下过滤器:

  1. $video
  2.     ->filters()
  3.     ->extractMultipleFrames(FFMpeg\Filters\Video\ExtractMultipleFramesFilter::FRAMERATE_EVERY_10SEC, '/path/to/destination/folder/')
  4.     ->synchronize();
  5. $video
  6.     ->save(new FFMpeg\Format\Video\X264(), '/path/to/new/file');
复制代码

默认情况下,这会将帧另存为jpg图像。

您可以使用setFrameFileType将帧保存为另一种格式来覆盖此设置:

  1. $frameFileType = 'jpg'; // either 'jpg', 'jpeg' or 'png'
  2. $filter = new ExtractMultipleFramesFilter($frameRate, $destinationFolder);
  3. $filter->setFrameFileType($frameFileType);
  4. $video->addFilter($filter);
复制代码
Clip

在所需的位置剪切视频。使用输入查找方法。它比使用滤镜剪辑更快。

  1. $clip = $video->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(30), FFMpeg\Coordinate\TimeCode::fromSeconds(15));
  2. $clip->save(new FFMpeg\Format\Video\X264(), 'video.avi');
复制代码

剪辑过滤器采用两个参数:

  • $start, an instance of FFMpeg\Coordinate\TimeCode, 指定剪辑的起点
  • $duration, optional, an instance of FFMpeg\Coordinate\TimeCode, 指定剪辑的持续时间

在剪辑上,您可以应用与视频相同的过滤器。例如调整大小的过滤器。

  1. $clip = $video->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(30), FFMpeg\Coordinate\TimeCode::fromSeconds(15));
  2. $clip->filters()->resize(new FFMpeg\Coordinate\Dimension(320, 240), FFMpeg\Filters\Video\ResizeFilter::RESIZEMODE_INSET, true);
  3. $clip->save(new FFMpeg\Format\Video\X264(), 'video.avi');
复制代码
产生波形

您可以使用该FFMpeg\Media\Audio::waveform 方法生成音频文件的波形。

此代码返回一个FFMpeg\Media\Waveform实例。您可以选择将尺寸作为前两个参数以及ffmpeg用于波形的十六进制字符串颜色数组进行传递,有关更多信息,请参见下面的专用文档。

输出文件必须使用PNG扩展名。

  1. $waveform = $audio->waveform(640, 120, array('#00FF00'));
  2. $waveform->save('waveform.png');
复制代码

如果要从视频中获取波形,请先将其转换为音频文件。

  1. //打开视频文件
  2. $video = $ffmpeg->open( 'video.mp4' );
  3. //设置音频格式
  4. $audio_format = new FFMpeg\Format\Audio\Mp3();
  5. //提取音频到一个新文件为MP3
  6. $video->save($audio_format, 'audio.mp3');
  7. //设置音频文件
  8. $audio = $ffmpeg->open( 'audio.mp3' );
  9. //创建波形
  10. $waveform = $audio->waveform();
  11. $waveform->save( 'waveform.png' );
复制代码

筛选器

您可以在应用滤镜FFMpeg\Media\Video与FFMpeg\Media\Video::addFilter 方法。视频接受音频和视频过滤器。

您可以构建自己的过滤器,一些过滤器捆绑在PHP-FFMpeg中-可通过该FFMpeg\Media\Video::filters方法访问它们。

过滤器可链接

  1. $video
  2.     ->filters()
  3.     ->resize($dimension, $mode, $useStandards)
  4.     ->framerate($framerate, $gop)
  5.     ->synchronize();
复制代码

.....

更多教程请跳转:https://blog.csdn.net/weixin_42799222/article/details/105452373









回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

一门APP打包致力于H5混合APP基础框架领域的前沿探索,专注轻便的移动应用解决方案 提供基于HTML前端页面在各种应用层级的端延展。
  • 官方手机版

  • 微信公众号

  • 微信客服

  • Powered by Discuz! X3.4 | Copyright © 2001-2020, 一门APP. | 一门APP开发平台|热门标签
  • 蜀ICP备17005078号-4 | 川公网安备 51019002001185号 | |成都七扇门科技有限公司