hansim / sonus

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

维护者

详细信息

github.com/hansim/sonus

源代码

dev-l5 2016-04-12 02:58 UTC

This package is not auto-updated.

Last update: 2024-09-20 19:26:02 UTC


README

Latest Stable Version Build Status Total Downloads ProjectStatus License

**** 注意 **** 这是一个https://github.com/rafasamp/sonus的副本。我创建了这个副本,因为原始包已被遗弃,我需要更多与Laravel视频工作的功能。Sonus是一个工具,旨在利用Laravel 4和ffmpeg的力量来完成以下任务:

  • 音频/视频转换
  • 视频缩略图生成
  • 元数据操作

快速开始

设置

更新你的composer.json文件,在require键下添加以下内容

"hansim/sonus": "dev-master"

对于Laravel 5使用

"hansim/sonus": "dev-l5"

运行composer update命令

$ composer update

在你的config/app.php中,将'Hansim\Sonus\SonusServiceProvider'添加到$providers数组的末尾

'providers' => array(

    'Illuminate\Foundation\Providers\ArtisanServiceProvider',
    'Illuminate\Auth\AuthServiceProvider',
    ...
    'Hansim\Sonus\SonusServiceProvider',

),

仍在config/app.php中,将'Sonus' => 'Hansim\Sonus\Facade'添加到$aliases数组

'aliases' => array(

    'App'             => 'Illuminate\Support\Facades\App',
    'Artisan'         => 'Illuminate\Support\Facades\Artisan',
    ...
    'Sonus'           => 'Hansim\Sonus\Facade',

),

运行下面的artisan命令以发布配置文件

$ php artisan config:publish Hansim/Sonus

导航到app/config/packages/Hansim/Sonus/config.php并更新所有四个参数

示例

以下是一个将文件从FLAC转换为AAC的简单示例

Sonus::convert()->input('foo.flac')->bitrate(128)->output('bar.aac')->go();

Sonus还可以转换视频文件

Sonus::convert()->input('foo.avi')->bitrate(300, 'video')->output('bar.flv')->go();

Sonus还可以以数组或JSON形式返回媒体信息

Sonus::getMediaInfo('foo.mov');

Sonus还可以轻松生成智能电影缩略图,如下所示

Sonus::getThumbnails('foo.mp4', 'foo-thumb', 5); // Yields 5 thumbnails

Sonus还可以为你的电影创建缩略图(创建短预览的缩略图)

Sonus::thumbnify('foo.mp4', 'foo-thumb', 40, '400'); // Yields 40 thumbnails (every 10 seconds) and video has 400 secs

尽管Sonus包含多个预设参数,但你也可以传递自己的参数

Sonus::convert()->input('foo.flac')->output('bar.mp3')->go('-b:a 64k -ac 1');

跟踪进度

确保在config.php文件中正确设置了progresstmp_dir选项

'progress'      => true,
...
'tmp_dir'      => '/Applications/ffmpeg/tmp/'

在启动转换时传递进度方法

Sonus::convert()->input('foo.avi')->output('bar.mp3')->progress('uniqueid')->go();

现在你可以编写一个控制器操作以返回你传递的工作ID的进度,并使用你喜欢的任何JavaScript版本调用它

public function getJobProgress($id)
{
    return Sonus::getProgress('uniqueid');
}

安全性和兼容性

Sonus使用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'; 
Sonus::convert()->input($file_in)->output($file_out)->go();

最后,Sonus只能转换到ffmpeg支持的格式。要检查您的ffmpeg版本是否配置为编码或解码特定格式,您可以使用以下命令在php artisan tinker中运行:

var_dump(Sonus::canEncode('mp3'));
var_dump(Sonus::canDecode('mp3'));

要获取所有支持格式的列表,您可以运行

var_dump(Sonus::getSupportedFormats());

故障排除

在打开问题之前,请确保以下声明是真实的:

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

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

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

许可证

Sonus是按照MIT许可证条款分发的免费软件。

附加信息

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

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