Как конвертировать вебм видео в mp4 с помощью FFMpeg в Symfony 3

WebM — это открытый, не требующий лицензионных отчислений, формат мультимедийных файлов, предназначенный для Интернета, который определяет структуру контейнера файлов, видео и аудио форматы. Файлы WebM состоят из видеопотоков, сжатых видеокодеками VP8 или VP9, ​​и аудиопотоков, сжатых аудиокодеками Vorbis или Opus. Структура файла WebM основана на контейнере Matroska. WebM на 100% бесплатен и поставляется с открытым исходным кодом по лицензии BSD. Многие основанные на WebRTC проекты с открытым исходным кодом, которые позволяют вам, например, записывать видео из браузера и загружать его на свой сервер, используют формат webm, поскольку это один из самых известных форматов для Интернета.

Иногда вашему пользователю понадобятся записанные видео вне браузера по разным причинам, и вашему проекту может потребоваться также поддержка таких пользователей путем простого преобразования видео в его версию mp4, чтобы его можно было воспроизводить на нескольких платформах. В этой статье мы поделимся с вами полезным фрагментом, использующим PHP FFMpeg для простого преобразования веб-видео в mp4.

1. Установите двоичные файлы FFMpeg

В качестве первого шага вам нужно будет установить FFMpeg на ваш компьютер для разработки. FFmpeg — это ведущая мультимедийная среда, способная декодировать, кодировать, транскодировать, мультиплексировать, демультиплексировать, транслировать, фильтровать и воспроизводить практически все, что создали люди и машины. Он поддерживает самые малоизвестные древние форматы вплоть до передовых. Независимо от того, были ли они разработаны каким-то комитетом по стандартам, сообществом или корпорацией. Он также очень переносим: FFmpeg компилирует, запускает и передает нашу инфраструктуру тестирования FATE в Linux, Mac OS X, Microsoft Windows, BSD, Solaris и т. Д. В самых разных средах сборки, архитектурах машин и конфигурациях.

Чтобы преобразовать ваше видео из webm в mp4, мы запустим несколько команд, которые позволят вам добиться этого, используя стороннюю библиотеку для PHP. Вы можете установить FFMpeg на разных платформах:

Windows

Чтобы использовать ffmpeg в Windows, вам нужно скачать двоичные файлы с этого сайта. Вам также нужно будет иметь команду ffmpeg, доступную по пути, например, если вы находитесь в окне, вы должны иметь возможность распечатать версию ffmpeg, в которой выполняется ffmpeg -version Команда в командной строке:

командная строка ffmpeg в Windows

Если вы не хотите добавлять исполняемый файл в качестве переменной среды в Windows, вы также можете установить путь к двоичным файлам позже во время создания экземпляра ffmpeg с PHP:

$ffmpeg = FFMpeg\FFMpeg::create(array(
'ffmpeg.binaries'  => '/opt/local/ffmpeg/bin/ffmpeg',
'ffprobe.binaries' => '/opt/local/ffmpeg/bin/ffprobe',
'timeout'          => 3600, // The timeout for the underlying process
'ffmpeg.threads'   => 12,   // The number of threads that FFMpeg should use
), $logger);

Ubuntu

Просто запустите следующую команду из вашего терминала:

sudo apt-get install ffmpeg

Для получения дополнительной информации и шагов для установки в других операционных системах, пожалуйста, посетите официальная страница загрузок сайта ffmpeg здесь.

2. Установите PHP FFMpeg

Чтобы взаимодействовать с FFMpeg с PHP, вам нужно будет либо написать свои собственные команды ffmpeg для их выполнения с помощью shell_exec, либо использовать библиотеку, которая сделает это за вас. Мы говорим о PHP-FFMpeg, объектно-ориентированной библиотеке, которая позволяет конвертировать видео / аудио файлы с помощью FFmpeg / AVConv с дружественным синтаксисом разработчика. Предпочтительным способом установки этой библиотеки в вашем проекте Symfony является использование composer.

Чтобы добавить эту оболочку в ваш проект, выполните следующую команду в своем терминале (расположенном в корневом каталоге вашего проекта Symfony):

composer require php-ffmpeg/php-ffmpeg

После установки вы сможете использовать пространства имен библиотеки.

3. Конвертирование видео

Теперь, когда у вас есть ffmpeg, установленный на машине разработчика, и оболочка для написания логики преобразования в PHP, мы наконец можем приступить к преобразованию его с помощью кода. В качестве первого шага вам нужно включить необходимые пространства имен ffmpeg, в этом случае нам нужен только инструмент FFMpeg и класс x264, который позволяет конвертировать видео в Mp4. Вам нужно создать статический экземпляр FFMpeg и сохранить его в переменной, вы можете предоставить другие настройки в этом методе, как указано в документации.

Далее вам необходимо получить абсолютный путь к веб-видео, которое вы хотите преобразовать, и предоставить его в качестве первого аргумента open метод нашего ранее созданного объекта манипуляции медиа. Этот метод возвращает объект Video, который можно использовать для сохранения, внесения изменений и т. Д. В этом случае мы хотим сохранить его только в другом формате, поэтому вам потребуется также создать экземпляр кодека X264 и предоставить его в качестве первого аргумента. на метод сохранения видео. В качестве второго аргумента вам нужно указать путь назначения нового файла mp4 и все!

Заметка

Как и каждый пример кода в Нашем мире кода, мы пишем его настолько просто, насколько можем, чтобы каждый мог его понять. Вы можете создать это, очевидно, как сервис, чтобы сохранить ваши контроллеры тонкими

get('kernel')->getRootDir() . '/../web/uploads';
// Open the webm video providing the absolute path
$video = $ffmpeg->open($videosDirectory . '/video.webm');
// Configure the new mp4 formax (x264)
$mp4Format = new X264();
// Fix for error "Encoding failed : Can't save to X264"
// See: https://github.com/PHP-FFMpeg/PHP-FFMpeg/issues/310
$mp4Format->setAudioCodec("libmp3lame");
// Save the video in the same directory with the new format
$video->save($mp4Format, $videosDirectory . '/video.mp4');
return new Response("webm video succesfully converted to mp4");
}
}

После доступа к индексному маршруту предыдущего контроллера в каталоге загрузки должно быть 2 файла: оригинальное видео webm и новая версия в формате mp4.

Ссылка на основную публикацию
Adblock
detector