laravel — Php-ffmpeg «Неизвестный кодировщик libfaac» в Windows

Я использую Laravel 4.2.

Я работаю над проектом, в котором пользователь может загрузить видео, и мне нужно перекодировать его, чтобы его можно было воспроизводить на любых устройствах.

Для транскодирования я добавил пакет php-ffmpeg из git hub в свой проект. По инструкции я скачал пакет ffmpeg с http://ffmpeg.zeranoe.com/builds и задайте путь к файлу ffmpeg.exe в переменной окружения Path.

Теперь я попробовал код ниже, чтобы перекодировать загруженное видео:

$ffmpeg = FFMpeg\FFMpeg::create();
$video = $ffmpeg->open($video_path);
$format = new FFMpeg\Format\Video\X264();
$format->setKiloBitrate(1000)
->setAudioChannels(2)
->setAudioKiloBitrate(256);
$video->save($format, public_path().$path.$save_filename);

Но это дает ошибку, как показано ниже:

[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}}

После поиска много я нашел ссылку для решения Вот, с примечанием, что

Ffmpeg Zeranoe не поддерживает libfaac из-за этого кодировщика
требует —enable-nonfree, что приведет к нераспространению
строить.

Я не понимаю решение. Кто-нибудь может помочь мне преодолеть это?

Изменить: (рабочий код, как показано ниже)

Я создал CustomVideo класс такой же как класс FFMpeg\Format\Video\X264() как показано ниже:

class CustomVideo extends FFMpeg\Format\Video\DefaultVideo
{
/** @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;
}
}

и обновил код для перекодирования видео, как показано ниже:

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

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

Это решило Unknown encoder libfaac ошибка.

4

Решение

Необходимая библиотека не включена из-за лицензирования.

Zeranoe FFmpeg — Почему сборки не включают в себя FAAC, FDK-AAC, libaacplus?

Эти библиотеки не совместимы с лицензией GPL и не могут быть
включены без лицензии сборка как несвободная. Несвободная сборка
не может быть публично распространено.

У вас есть следующие решения:

  1. Используйте другой аудиокодек вместо AAC. Например, есть кодировщик LAME MP3.
  2. Скомпилируйте свою собственную версию FFmpeg, добавив все нужные вам библиотеки
    Увидеть Руководство по компиляции FFmpeg
4

Другие решения

У меня была какая-то проблема, но я решил ее, определив новый аудио-кодек в конструкторе. Вместо этой строки в вопросе …

$format = new FFMpeg\Format\Video\X264();

Я использовал…

$format = new FFMpeg\Format\Video\X264('libmp3lame', 'libx264');
9

По вопросам рекламы [email protected]