Php-ffmpeg “Encoder unknown libfaac” on Windows

科技动态 2018-06-25 阅读原文

I am using laravel 4.2.

I am working on a project in that user can upload a video and I need to transcode it that it can be played over all kind of devices.

For transcoding I have added php-ffmpeg package from git hub in my project. According to the instructions I have downloaded ffmpeg package from http://ffmpeg.zeranoe.com/builds
and set the ffmpeg.exe's path into the environment variable Path.

Now, I tried code below to transcode an uploaded video :

$ffmpeg = FFMpegFFMpeg::create();
$video = $ffmpeg->open($video_path);
$format = new FFMpegFormatVideoX264();
$format->setKiloBitrate(1000)
        ->setAudioChannels(2)
        ->setAudioKiloBitrate(256);
$video->save($format, public_path().$path.$save_filename);

But it gives error as below :

[ERROR] ffmpeg version N-70767-gd24af70 Copyright (c) 2000-2015 the FFmpeg developers
[ERROR]   built with gcc 4.9.2 (GCC)
[ERROR]   configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-lzma --enable-decklink --enable-zlib
[ERROR]   libavutil      54. 20.100 / 54. 20.100
[ERROR]   libavcodec     56. 28.100 / 56. 28.100
[ERROR]   libavformat    56. 25.101 / 56. 25.101
[ERROR]   libavdevice    56.  4.100 / 56.  4.100
[ERROR]   libavfilter     5. 12.100 /  5. 12.100
[ERROR]   libswscale      3.  1.101 /  3.  1.101
[ERROR]   libswresample   1.  1.100 /  1.  1.100
[ERROR]   libpostproc    53.  3.100 / 53.  3.100
[ERROR]
[ERROR] Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'http://localhost/ohvideo-ftp/public/temp/5ZPlIuU1AIgz8RR4p0bs.mp4':
[ERROR]   Metadata:
[ERROR]     major_brand     : mp42
[ERROR]     minor_version   : 0
[ERROR]     compatible_brands: mp42mp41isomavc1
[ERROR]     creation_time   : 2013-11-09 00:29:52
[ERROR]   Duration: 00:00:30.12, start: 0.000000, bitrate: 417 kb/s
[ERROR]     Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 381 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
[ERROR]     Metadata:
[ERROR]       creation_time   : 2013-11-09 00:29:52
[ERROR]       handler_name    : L-SMASH Video Handler
[ERROR]       encoder         : AVC Coding
[ERROR]     Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 32 kb/s (default)
[ERROR]     Metadata:
[ERROR]       creation_time   : 2013-11-09 00:29:52
[ERROR]       handler_name    : L-SMASH Audio Handler
[ERROR] Unknown encoder 'libfaac'
[ERROR]
{"error":{"type":"FFMpeg\Exception\RuntimeException","message":"Encoding failed","file":"F:\wamp\www\ohvideo-ftp\vendor\php-ffmpeg\php-ffmpeg\src\FFMpeg\Media\Video.php","line":168}}

After searching alot, I found a link for the solution here
, with note that

Zeranoe's ffmpeg does not contain libfaac support due to that encoder requiring --enable-nonfree which would result in a non-redistributable build.

I don't get the solution. Can anybody help me to overcome this?

Edit: (working code as below)

I have created a CustomVideo
class the same like class FFMpegFormatVideoX264()
as below:

class CustomVideo extends FFMpegFormatVideoDefaultVideo
{
    /** @var boolean */
    private $bframesSupport = true;

    public function __construct($audioCodec = 'libmp3lame', $videoCodec = 'libx264')
    {
        $this
            ->setAudioCodec($audioCodec)
            ->setVideoCodec($videoCodec);
    }

    /**
     * {@inheritDoc}
     */
    public function supportBFrames()
    {
        return $this->bframesSupport;
    }

    /**
     * @param $support
     *
     * @return X264
     */
    public function setBFramesSupport($support)
    {
        $this->bframesSupport = $support;

        return $this;
    }

    /**
     * {@inheritDoc}
     */
    public function getAvailableAudioCodecs()
    {
        return array('libmp3lame');
    }

    /**
     * {@inheritDoc}
     */
    public function getAvailableVideoCodecs()
    {
        return array('libx264');
    }

    /**
     * {@inheritDoc}
     */
    public function getPasses()
    {
        return 2;
    }

    /**
     * @return int
     */
    public function getModulus()
    {
        return 2;
    }
}

and updated the code to transcode video as below:

$ffmpeg = FFMpegFFMpeg::create();
$video = $ffmpeg->open($video_path);
$format = new CustomVideo();
$format->setKiloBitrate(1000)
       ->setAudioChannels(2)
       ->setAudioKiloBitrate(256);

$video->save($format, public_path().$path.$save_filename);

It has solved the Unknown encoder libfaac
error.

The required library is not included due to licensing.

Zeranoe FFmpeg - Why dont the builds include FAAC, FDK-AAC, libaacplus?

These libraries are not compatible with the GPL license and cannot be included without licensing the build as nonfree. A nonfree build cannot be publicly distributed.

You have the following solutions:

  1. Use another audio codec instead of AAC. There's a LAME MP3 encoder for example.
  2. Compile your own version of FFmpeg adding all the libraries you want See FFmpeg Compilation Guide
Hello, buddy!

责编内容by:Hello, buddy!阅读原文】。感谢您的支持!

您可能感兴趣的

NetBScanner – NetBIOS Network Scanner NetBScanner is a NetBIOS network scanner tool that scans all computers in the IP addresses range you choose, using the NetBIOS protocol. ...
5 Signs Windows Isn’t Broken: Troubleshooting for ... How many PC issues have you experienced in the last month? A spotty internet connection, apps crashing, andsystem freezes How to Increase Windo...
Windows下用Caffe跑自己的数据(遥感影像)... 1 前言 Caffe对于像我这样的初学者来说是一款非常容易上手的深度学习框架。关于用Caffe跑自己的数据这样的博客已经非常多,感谢前辈们为我们提供的这么好的学习资源。这里我主要结合我所在的行业,说下如何对跑通具有多通道多格式的遥感数据。 2 数据准备 Caffe封装的非常好,要想...
有了这款智能贴膜,你的 Windows 电脑触控板也能变身小键盘:Nums... 对于输入数字这件事,没有小键盘的笔记本电脑总是让人感觉不够顺滑。尤其在面对大量数字录入时,键盘上方一字排开的数字键大大影响了工作效率。 此前向大家介绍过的Nums 智能键盘 为 MacBook 用户提供了一个优雅的解决方式。通过一张厚度不到 1mm 贴膜,Nums 巧妙地在触控板上「安」上了小...
在着爆竹声声中 FlarumChina-beta.7C 发布 引言 新年之际,为了填以前承诺的坑,在着爆竹声声中 FlarumChina-beta.7C 准时来到。 本次的新增内容不多,主要增添了安全性,以及重新加入了 Composer 的安装方式 我们将所有的第三方修改都通过 VCS 进行加载,如果你有 SSH 权限安装与升级都将变的异常简单! ...