linkthrow / ffmpeg
由 ffmpeg 驱动的 Laravel 音频和视频转换、缩略图生成和元数据编辑包
Requires
- php: >=5.4.0
Requires (Dev)
- phpunit/phpunit: 4.1.*
This package is not auto-updated.
Last update: 2024-09-20 09:21:35 UTC
README
**** 注意 **** 这是对 https://github.com/closca/FFMPEG 的重复。我进行了复制,因为原始包与最新的 Laravel psr-4 加载器不兼容,并且已经有一段时间没有更新了!
FFMPEG 是一个工具,旨在利用 Laravel 5 和 (C 库 FFMPEG) 的力量来执行以下任务:
- 音频/视频转换
- 视频缩略图生成
- 元数据操作
快速入门
设置
更新您的 composer.json
文件,并在 require
键下添加以下内容
"linkthrow/ffmpeg": "dev-master"
运行 composer update 命令
$ composer update
在您的 config/app.php
中,将 'LinkThrow\Ffmpeg\Provider\FfmpegServiceProvider'
添加到 $providers
数组的末尾
'providers' => array(
'Illuminate\Foundation\Providers\ArtisanServiceProvider',
'Illuminate\Auth\AuthServiceProvider',
...
'LinkThrow\Ffmpeg\Provider\FfmpegServiceProvider',
),
仍然在 config/app.php
中,将 'FFMPEG' => 'LinkThrow\Ffmpeg\Facade\FfmpegFacade'
添加到 $aliases
数组
'aliases' => array(
'App' => 'Illuminate\Support\Facades\App',
'Artisan' => 'Illuminate\Support\Facades\Artisan',
...
'FFMPEG' => 'LinkThrow\Ffmpeg\Facade\FfmpegFacade',
),
运行下面的 artisan 命令以发布配置文件
$ php artisan vendor:publish
导航到 app/config/ffmpeg.php
并更新所有四个参数
示例
以下是将文件从 FLAC 转换为 AAC 的简单示例
FFMPEG::convert()->input('foo.flac')->bitrate(128)->output('bar.aac')->go();
FFMPEG 还可以转换视频文件
FFMPEG::convert()->input('foo.avi')->bitrate(300, 'video')->output('bar.flv')->go();
FFMPEG 还可以返回媒体信息作为数组或 json
FFMPEG::getMediaInfo('foo.mov');
FFMPEG 还可以轻松生成这样的智能电影缩略图
FFMPEG::getThumbnails('foo.mp4', 'foo-thumb', 5); // Yields 5 thumbnails
FFMPEG 还可以缩略您的电影(为短预览创建缩略图)
FFMPEG::thumbnify('foo.mp4', 'foo-thumb', 40, '400'); // Yields 40 thumbnails (every 10 seconds) and video has 400 secs
尽管 FFMPEG 包含了多个预设参数,但您也可以传递自己的参数
FFMPEG::convert()->input('foo.flac')->output('bar.mp3')->go('-b:a 64k -ac 1');
跟踪进度
确保在 config.php 文件中正确设置了 progress
和 tmp_dir
选项
'progress' => true,
...
'tmp_dir' => '/Applications/ffmpeg/tmp/'
在初始化转换时传递进度方法
FFMPEG::convert()->input('foo.avi')->output('bar.mp3')->progress('uniqueid')->go();
现在您可以编写一个控制器操作来返回您传递的工作 id 的进度,并使用您喜欢的任何 JavaScript 版本来调用它
public function getJobProgress($id)
{
return FFMPEG::getProgress('uniqueid');
}
安全和兼容性
FFMPEG 使用 PHP 的 shell_exec 函数执行 ffmpeg 和 ffprobe 命令。如果您的 PHP 版本为 5.3 或以下,并且启用了 安全模式,则此命令被禁用。
请确保 ffmpeg 和 ffprobe 至少是以下版本:
- ffmpeg: 2.1.*
- ffprobe: 2.0.*
此外,请记住,文件路径必须相对于您的系统上的 FFMPEG 位置。为了确保兼容性,将输入和输出文件的完整路径传递是一个好习惯。以下是一个在 Laravel 中工作的示例
$file_in = Input::file('audio')->getRealPath();
$file_out = '\path\to\my\file.mp3';
FFMPEG::convert()->input($file_in)->output($file_out)->go();
最后,FFMPEG 只会将文件转换为 ffmpeg 支持的格式。要检查您的 ffmpeg 版本是否配置为编码或解码特定格式,您可以使用以下命令通过 php artisan tinker
运行
var_dump(FFMPEG::canEncode('mp3'));
var_dump(FFMPEG::canDecode('mp3'));
要获取所有支持格式的列表,您可以运行
var_dump(FFMPEG::getSupportedFormats());
故障排除
在提交问题之前,请确保以下声明是正确的:
-
我能够使用在 FFMPEG 配置文件中定义的相同路径在终端访问 FFMPEG
-
我已经检查了 web 服务器的错误日志,并且没有找到 FFMPEG 输出消息
通常,所有问题都可以通过遵循以下两个步骤来解决。如果您仍然遇到问题,您始终可以打开一个故障单。
许可证
FFMPEG 是在 MIT 许可证条款下分发的免费软件。
附加信息
有任何问题,请随时联系我。
如果有任何问题,请 在此处报告