Содержание
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
Команда в командной строке:
Если вы не хотите добавлять исполняемый файл в качестве переменной среды в 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.