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.
- $ composer require php-ffmpeg/php-ffmpeg
复制代码
基本用法- require 'vendor/autoload.php';
-
- $ffmpeg = FFMpeg\FFMpeg::create();
- $video = $ffmpeg->open('video.mpg');
- $video
- ->filters()
- ->resize(new FFMpeg\Coordinate\Dimension(320, 240))
- ->synchronize();
- $video
- ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))
- ->save('frame.jpg');
- $video
- ->save(new FFMpeg\Format\Video\X264(), 'export-x264.mp4')
- ->save(new FFMpeg\Format\Video\WMV(), 'export-wmv.wmv')
- ->save(new FFMpeg\Format\Video\WebM(), 'export-webm.webm');
复制代码
文献资料本文档是发现API的简介。建议浏览源代码,因为它是自记录的。 FFMpegFFMpeg\FFMpeg是用来操纵媒体的主要对象。要构建它,请使用static FFMpeg\FFMpeg::create: - $ffmpeg = FFMpeg\FFMpeg::create();
复制代码
FFMpeg将自动检测ffmpeg和ffprobe二进制文件。如果要显式给出二进制路径,则可以将数组作为配置传递。Psr\Logger\LoggerInterface 也可以传递A 来记录二进制执行。 - $ffmpeg = FFMpeg\FFMpeg::create(array(
- 'ffmpeg.binaries' => '/opt/local/ffmpeg/bin/ffmpeg',
- 'ffprobe.binaries' => '/opt/local/ffmpeg/bin/ffprobe',
- 'timeout' => 3600, //基础进程的超时
- 'ffmpeg.threads' => 12, // FFMpeg应该使用的线程数
- ), $logger);
复制代码
操纵媒体FFMpeg\FFMpeg根据URI创建媒体。URI可以是指向本地文件系统资源,HTTP资源或FFmpeg支持的任何资源的指针。 注意: 要列出FFmpeg构建的所有受支持资源类型,请使用以下
-protocols command: 复制代码
若要打开资源,请使用 FFMpeg\FFMpeg:pen 方法. - $ffmpeg->open('video.mpeg');
复制代码
可以解决两种类型的媒体: FFMpeg\Media\Audio and FFMpeg\Media\Video.
A third type, FFMpeg\Media\Frame, 可以通过视频获得第三种类型。 VideoFFMpeg\Media\Video 可以进行代码转换,即:更改编解码器,隔离音频或视频。可以提取帧。 转码您可以使用FFMpeg\Media\Video:save方法对视频进行转码。您将FFMpeg\Format\FormatInterface为此通过。 请注意,音频和视频比特率是在格式上设置的。 - $format = new FFMpeg\Format\Video\X264();
- $format->on('progress', function ($video, $format, $percentage) {
- echo "$percentage % transcoded";
- });
-
- $format
- ->setKiloBitrate(1000)
- ->setAudioChannels(2)
- ->setAudioKiloBitrate(256);
-
- $video->save($format, 'video.avi');
复制代码
可以实时监视转码进度,有关更多信息,请参见下面的“格式”文档。 提取图像您可以使用FFMpeg\Media\Video::frame 方法在任何时间码上提取帧。 该代码返回FFMpeg\Media\Frame与第二个42对应的实例。您可以将任何FFMpeg\Coordinate\TimeCodeas作为参数传递,有关更多信息,请参见下面的专用文档。 - $frame = $video->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(42));
- $frame->save('image.jpg');
复制代码
如果要从视频中提取多个图像,可以使用以下过滤器: - $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');
复制代码
默认情况下,这会将帧另存为jpg图像。 您可以使用setFrameFileType将帧保存为另一种格式来覆盖此设置: - $frameFileType = 'jpg'; // either 'jpg', 'jpeg' or 'png'
- $filter = new ExtractMultipleFramesFilter($frameRate, $destinationFolder);
- $filter->setFrameFileType($frameFileType);
-
- $video->addFilter($filter);
复制代码
Clip在所需的位置剪切视频。使用输入查找方法。它比使用滤镜剪辑更快。 - $clip = $video->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(30), FFMpeg\Coordinate\TimeCode::fromSeconds(15));
- $clip->save(new FFMpeg\Format\Video\X264(), 'video.avi');
复制代码
剪辑过滤器采用两个参数: - $start, an instance of FFMpeg\Coordinate\TimeCode, 指定剪辑的起点
- $duration, optional, an instance of FFMpeg\Coordinate\TimeCode, 指定剪辑的持续时间
在剪辑上,您可以应用与视频相同的过滤器。例如调整大小的过滤器。 - $clip = $video->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(30), FFMpeg\Coordinate\TimeCode::fromSeconds(15));
- $clip->filters()->resize(new FFMpeg\Coordinate\Dimension(320, 240), FFMpeg\Filters\Video\ResizeFilter::RESIZEMODE_INSET, true);
- $clip->save(new FFMpeg\Format\Video\X264(), 'video.avi');
复制代码
产生波形您可以使用该FFMpeg\Media\Audio::waveform 方法生成音频文件的波形。 此代码返回一个FFMpeg\Media\Waveform实例。您可以选择将尺寸作为前两个参数以及ffmpeg用于波形的十六进制字符串颜色数组进行传递,有关更多信息,请参见下面的专用文档。 输出文件必须使用PNG扩展名。 - $waveform = $audio->waveform(640, 120, array('#00FF00'));
- $waveform->save('waveform.png');
复制代码
如果要从视频中获取波形,请先将其转换为音频文件。 - //打开视频文件
- $video = $ffmpeg->open( 'video.mp4' );
-
- //设置音频格式
- $audio_format = new FFMpeg\Format\Audio\Mp3();
-
- //提取音频到一个新文件为MP3
- $video->save($audio_format, 'audio.mp3');
-
- //设置音频文件
- $audio = $ffmpeg->open( 'audio.mp3' );
-
- //创建波形
- $waveform = $audio->waveform();
- $waveform->save( 'waveform.png' );
复制代码
筛选器您可以在应用滤镜FFMpeg\Media\Video与FFMpeg\Media\Video::addFilter 方法。视频接受音频和视频过滤器。 您可以构建自己的过滤器,一些过滤器捆绑在PHP-FFMpeg中-可通过该FFMpeg\Media\Video::filters方法访问它们。 过滤器可链接 - $video
- ->filters()
- ->resize($dimension, $mode, $useStandards)
- ->framerate($framerate, $gop)
- ->synchronize();
复制代码
..... 更多教程请跳转:https://blog.csdn.net/weixin_42799222/article/details/105452373
|