Видеоконтент занимает всё больше места в современных сайтах, особенно на платформах типа WordPress. Но одна из частых проблем — это необходимость оптимизировать и конвертировать видео в разные форматы и разрешения, чтобы обеспечить широкую поддержку устройств и быструю загрузку. В этой статье мы подробно разберём, как сделать автоматический транскодер видео в WordPress, который будет конвертировать загружаемые видеофайлы в нужные форматы и создавать оптимизированные версии.
Почему важен автоматический транскодер видео в WordPress
При загрузке видео в WordPress обычно используются оригинальные файлы, которые могут быть слишком «тяжёлыми» и не подходить для всех браузеров. Автоматический транскодер позволяет:
- Конвертировать видео в несколько форматов (MP4, WebM, Ogg) для совместимости с разными браузерами.
- Создавать версии с разным разрешением (360p, 720p, 1080p) для адаптивной загрузки и экономии трафика.
- Оптимизировать видео по размеру без потери качества.
- Автоматизировать процесс, экономя время и ресурсы владельца сайта.
Реализация этого функционала требует интеграции с внешними инструментами или библиотеками для транскодирования, такими как FFmpeg.
Использование плагина WPVideo Transcoder для автоматического конвертирования
Для упрощения задачи можно использовать готовый плагин WPVideo Transcoder, который интегрируется с FFmpeg и позволяет автоматически обрабатывать видео при загрузке.
Преимущества плагина:
- Автоматическое создание нескольких форматов и разрешений.
- Настраиваемые профили транскодирования.
- Поддержка отложенной очереди обработки, чтобы не нагружать сервер.
- Интеграция с медиабиблиотекой WordPress.
Для установки плагина просто загрузите его через админку WordPress или скачайте с официального сайта WPShop.
Базовая настройка плагина WPVideo Transcoder
После активации плагина перейдите в Настройки → WPVideo Transcoder. Здесь вы сможете задать профили транскодирования, например:
- MP4 720p, H.264, битрейт 2500kbps
- WebM 480p, VP8, битрейт 1500kbps
- MP4 360p, H.264, битрейт 1000kbps
Также можно настроить путь к бинарнику FFmpeg, если он установлен не в стандартном месте.
Реализация автоматического транскодера видео на PHP с FFmpeg
Если вы хотите самостоятельно реализовать транскодер без готовых плагинов, то вам понадобится сервер с установленным FFmpeg и немного PHP-кода для интеграции с WordPress.
Шаг 1. Подключение к хуку загрузки медиафайла
WordPress предоставляет хук add_attachment, который срабатывает после загрузки файла в медиабиблиотеку.
add_action('add_attachment', 'wpvideo_process_uploaded_video');
function wpvideo_process_uploaded_video($attachment_id) {
$mime = get_post_mime_type($attachment_id);
if (strpos($mime, 'video') === 0) {
$file_path = get_attached_file($attachment_id);
wpvideo_transcode_video($file_path, $attachment_id);
}
}
Шаг 2. Функция транскодирования видео
В этой функции вызывается FFmpeg для создания альтернативных версий видео.
function wpvideo_transcode_video($input_path, $attachment_id) {
$upload_dir = wp_upload_dir();
$output_dir = $upload_dir['basedir'] . '/transcoded-videos/' . $attachment_id . '/';
if (!file_exists($output_dir)) {
wp_mkdir_p($output_dir);
}
// Профили конвертации
$profiles = [
['suffix' => '720p.mp4', 'resolution' => '1280x720', 'codec' => 'libx264', 'bitrate' => '2500k'],
['suffix' => '480p.webm', 'resolution' => '854x480', 'codec' => 'libvpx', 'bitrate' => '1500k'],
['suffix' => '360p.mp4', 'resolution' => '640x360', 'codec' => 'libx264', 'bitrate' => '1000k'],
];
foreach ($profiles as $profile) {
$output_file = $output_dir . wp_basename($input_path, '.' . pathinfo($input_path, PATHINFO_EXTENSION)) . '-' . $profile['suffix'];
$cmd = "ffmpeg -i " . escapeshellarg($input_path) . " -vf scale=" . $profile['resolution'] . " -c:v " . $profile['codec'] . " -b:v " . $profile['bitrate'] . " -c:a aac -strict -2 " . escapeshellarg($output_file) . " -y";
exec($cmd, $output, $return_var);
if ($return_var !== 0) {
error_log("WPVideo: Ошибка при транскодировании видео: " . implode("\n", $output));
} else {
// Можно сохранить информацию о новых файлах в мета
add_post_meta($attachment_id, '_wpvideo_transcoded_file', $output_file);
}
}
}
Шаг 3. Использование транскодированных версий на сайте
Для вывода видео с поддержкой нескольких форматов можно использовать HTML5-тег <video> с несколькими <source>:
function wpvideo_render_video_player($attachment_id) {
$transcoded_files = get_post_meta($attachment_id, '_wpvideo_transcoded_file');
if (empty($transcoded_files)) {
// Выводим оригинальный файл
$video_url = wp_get_attachment_url($attachment_id);
echo '<video controls><source src="' . esc_url($video_url) . '" type="video/mp4">Ваш браузер не поддерживает видео.</video>';
return;
}
echo '<video controls>';
foreach ($transcoded_files as $file) {
$url = str_replace(wp_upload_dir()['basedir'], wp_upload_dir()['baseurl'], $file);
$type = '';
if (strpos($file, '.mp4') !== false) $type = 'video/mp4';
elseif (strpos($file, '.webm') !== false) $type = 'video/webm';
echo '<source src="' . esc_url($url) . '" type="' . $type . '">';
}
echo 'Ваш браузер не поддерживает видео.'</video>';
}
Как протестировать и отладить транскодер видео
Для проверки корректности работы транскодера загружайте видео в WordPress и смотрите логи сервера на предмет ошибок FFmpeg. Также проверяйте созданные файлы в папке /wp-content/uploads/transcoded-videos/. Если видео не конвертируется, убедитесь, что ваш хостинг поддерживает запуск команд exec() и установлен FFmpeg.
Для локальной отладки рекомендуем использовать XAMPP или Docker с установленным FFmpeg, а затем переносить код на продакшен.
Альтернативные решения и советы
Если ваш хостинг не позволяет запускать FFmpeg, можно использовать облачные сервисы транскодирования, например, AWS Elastic Transcoder или Vimeo API, интегрируя их через REST-запросы из WordPress.
Для интеграции с медиабиблиотекой и удобного управления видео также рекомендуем попробовать плагин OmniVideo, который поддерживает облачные видео решения и автоматическую оптимизацию.
Заключение
Автоматический транскодер видео в WordPress — это мощный инструмент для улучшения производительности сайта и качества пользовательского опыта. Используя готовые плагины или собственные решения с FFmpeg, вы сможете обеспечить адаптивную, быструю и кроссбраузерную поддержку видео на вашем сайте, что особенно актуально для проектов с большим объёмом видеоконтента.