В этой статье блога мы рассмотрим различные методы преобразования видеофайлов MP4 в формат M3U8 с использованием PHP и FFmpeg. M3U8 — популярный формат потоковой передачи видео, который обычно используется для создания списков воспроизведения потоковой передачи с адаптивным битрейтом. Мы рассмотрим несколько методов, предоставив разговорные объяснения и примеры кода, чтобы облегчить понимание процесса.
Метод 1: использование командной строки FFmpeg
Самый простой способ конвертировать MP4 в M3U8 — использовать интерфейс командной строки FFmpeg. FFmpeg — это мощная мультимедийная платформа, поддерживающая различные форматы видео и аудио. Вот пример того, как его можно использовать в PHP:
$mp4File = '/path/to/input.mp4';
$m3u8File = '/path/to/output.m3u8';
$command = 'ffmpeg -i ' . $mp4File . ' -c:v libx264 -c:a aac -hls_time 10 -hls_list_size 0 -hls_segment_filename ' . $m3u8File . ' -hls_playlist_type vod ' . $m3u8File . 'index.m3u8';
exec($command);
Объяснение:
В приведенном выше коде мы определяем пути к входному файлу MP4 и выходному файлу M3U8. Затем мы создаем команду FFmpeg с необходимыми параметрами. Параметры -c:v libx264 -c:a aac
определяют видео- и аудиокодеки, которые будут использоваться для преобразования. -hls_time 10
устанавливает продолжительность каждого сегмента в секундах, а -hls_list_size 0
отключает файл списка сегментов. Параметр -hls_segment_filename
определяет шаблон именования отдельных сегментов. Наконец, -hls_playlist_type vod
гарантирует, что список воспроизведения создан для потоковой передачи видео по запросу. Затем мы выполняем команду, используя exec()
.
Метод 2: использование PHP-расширения FFmpeg
Другой подход — использовать PHP-расширение FFmpeg, которое обеспечивает более удобный способ взаимодействия с FFmpeg внутри PHP. Вот пример:
$mp4File = '/path/to/input.mp4';
$m3u8File = '/path/to/output.m3u8';
$ffmpeg = FFMpeg\FFMpeg::create();
$video = $ffmpeg->open($mp4File);
$format = new Streaming\Format\HLS();
$video->save($format, $m3u8File);
Объяснение:
В этом фрагменте кода мы предполагаем, что вы установили PHP-расширение FFmpeg. Начнем с определения путей к входному файлу MP4 и выходному файлу M3U8. Затем мы создаем экземпляр объекта FFmpeg и открываем видеофайл с помощью метода open()
. Затем мы создаем новый объект формата HLS и устанавливаем его в качестве выходного формата. Наконец, мы сохраняем видео в формате HLS, используя метод save()
.
Метод 3: использование библиотеки-оболочки PHP FFmpeg.
Если вы предпочитаете более высокоуровневый и удобный для пользователя подход, вы можете использовать библиотеку-оболочку PHP FFmpeg, например «PHP-FFMpeg» или «PHP Video Toolkit»..” Эти библиотеки обеспечивают уровень абстракции над FFmpeg и предлагают упрощенные методы для решения общих задач. Вот пример использования PHP-FFMpeg:
$mp4File = '/path/to/input.mp4';
$m3u8File = '/path/to/output.m3u8';
$ffmpeg = FFMpeg\FFMpeg::create();
$video = $ffmpeg->open($mp4File);
$format = new FFMpeg\Format\HLS();
$format->setAudioCodec('aac');
$format->setVideoCodec('libx264');
$format->setHlsTime(10);
$format->setHlsListSize(0);
$video->save($format, $m3u8File);
Объяснение:
В этом примере мы используем библиотеку PHP-FFMpeg для упрощения процесса преобразования. Начнем с создания экземпляра объекта FFmpeg и открытия входного файла MP4. Затем мы создаем новый объект формата HLS и устанавливаем нужные аудио- и видеокодеки. Также настраиваем продолжительность сегмента и отключаем файл списка сегментов. Наконец, мы сохраняем видео в формате HLS, используя метод save()
.
Мы рассмотрели несколько методов преобразования MP4 в M3U8 с использованием PHP и FFmpeg. Независимо от того, предпочитаете ли вы подход с использованием командной строки, PHP-расширение FFmpeg или библиотеку-оболочку, у вас есть различные варианты на выбор. Поэкспериментируйте с этими методами, чтобы найти тот, который лучше всего соответствует вашим потребностям, и интегрируйте его в свои приложения PHP, чтобы обеспечить плавное преобразование MP4 в M3U8.