linkthrow/ffmpeg

由 ffmpeg 驱动的 Laravel 音频和视频转换、缩略图生成和元数据编辑包

维护者

详细信息

github.com/linkthrow/ffmpeg

来源

安装: 39,388

依赖者: 1

建议者: 0

安全: 0

星标: 29

关注者: 4

分支: 35

dev-master 2017-01-25 22:12 UTC

This package is not auto-updated.

Last update: 2024-09-20 09:21:35 UTC


README

Latest Stable Version

**** 注意 **** 这是对 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 文件中正确设置了 progresstmp_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());

故障排除

在提交问题之前,请确保以下声明是正确的:

  1. 我能够使用在 FFMPEG 配置文件中定义的相同路径在终端访问 FFMPEG

  2. 我已经检查了 web 服务器的错误日志,并且没有找到 FFMPEG 输出消息

通常,所有问题都可以通过遵循以下两个步骤来解决。如果您仍然遇到问题,您始终可以打开一个故障单。

许可证

FFMPEG 是在 MIT 许可证条款下分发的免费软件。

附加信息

有任何问题,请随时联系我。

如果有任何问题,请 在此处报告