Как автоматически оптимизировать видео при загрузке в WordPress

Диагностика проблемы: почему важно оптимизировать видео при загрузке

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

Основные признаки проблемы:

  • Долгая загрузка страниц с видео
  • Высокое потребление дискового пространства и трафика
  • Проблемы с воспроизведением на мобильных устройствах

Выбор решения: плагины vs кастомный код

МетодПреимуществаНедостатки
Плагины (например, Clearfy Pro с оптимизацией медиа)Автоматизация, удобство, поддержка форматов, обновленияМожет замедлять сайт, зависит от стороннего кода, платные функции
Кастомный код с ffmpeg и WP хукамиПолный контроль, оптимизация под конкретные задачи, без сторонних зависимостейТребует навыков, настройка сервера, может быть сложно для новичков

Пошаговое решение: автоматическая оптимизация видео через кастомный код и ffmpeg

1. Установка и проверка ffmpeg на сервере

ffmpeg — мощный CLI-инструмент для конвертации и сжатия видео. Проверьте наличие команды:

ffmpeg -version

Если команда не найдена, установите ffmpeg через пакетный менеджер (apt, yum) или обратитесь к хостеру.

2. Создание функции для оптимизации видео после загрузки

Добавьте следующий код в functions.php вашей темы или в кастомный плагин:

function wpvideo_optimize_uploaded_video($metadata, $attachment_id) {
    $file_path = get_attached_file($attachment_id);
    $file_type = wp_check_filetype($file_path);

    // Оптимизируем только видео форматы mp4, mov, avi
    if (in_array($file_type['ext'], ['mp4', 'mov', 'avi'])) {
        $optimized_path = str_replace('.', '-optimized.', $file_path);

        // Параметры сжатия и конвертации
        $cmd = "ffmpeg -i " . escapeshellarg($file_path) . " -vcodec libx264 -crf 28 -preset fast " . escapeshellarg($optimized_path) . " -y";

        exec($cmd, $output, $return_var);

        if($return_var === 0 && file_exists($optimized_path)) {
            // Заменяем оригинальный файл оптимизированным
            rename($optimized_path, $file_path);
        }
    }
    return $metadata;
}
add_filter('wp_generate_attachment_metadata', 'wpvideo_optimize_uploaded_video', 10, 2);

Код запускает ffmpeg после загрузки и сжимает видео с параметрами libx264, CRF=28 — компромисс между качеством и размером.

3. Ограничение максимального размера видео перед загрузкой

Для предотвращения загрузки слишком больших файлов добавьте проверку в functions.php:

function wpvideo_limit_video_upload_size($file) {
    $max_size_mb = 50; // Максимум 50 МБ
    $file_type = wp_check_filetype($file['name']);
    if (in_array($file_type['ext'], ['mp4', 'mov', 'avi'])) {
        if ($file['size'] > ($max_size_mb * 1024 * 1024)) {
            $file['error'] = 'Видео слишком большое. Максимальный размер: ' . $max_size_mb . ' МБ.';
        }
    }
    return $file;
}
add_filter('wp_handle_upload_prefilter', 'wpvideo_limit_video_upload_size');

Проверка результата после внедрения

  • Загрузите видео >50МБ — должно выдать ошибку
  • Загрузите видео меньшего размера — видео должно автоматически сжаться, размер файла уменьшится по сравнению с оригиналом (проверьте через FTP или медиабиблиотеку)
  • Проверьте воспроизведение видео на сайте — должно оставаться корректным

Частые ошибки и как их исправить

  • ffmpeg не установлен или не доступен: ошибка при exec, решение — установить ffmpeg или проверить права доступа.
  • Видео не сжимается, остаётся оригинал: проверьте права на запись в папке загрузок, корректность путей.
  • Большая нагрузка на сервер при сжатии: используйте очередь задач (WP Cron) или сторонние сервисы для тяжелых видео.
  • Проблемы с воспроизведением после сжатия: уменьшите степень сжатия (повышайте CRF до 23) или проверьте кодеки.

Практические советы по безопасности и производительности

  • Запускайте ffmpeg с ограниченными правами, используйте безопасное экранирование параметров (escapeshellarg)
  • Не запускайте сжатие в реальном времени при загрузке — лучше использовать WP Cron для пакетной обработки
  • Храните оригиналы видео, если планируете разные варианты качества
  • Для масштабных проектов рассмотрите интеграцию с облачными видео CDN и сервисами конвертации (Amazon Elastic Transcoder, Cloudinary)
Как автоматически устанавливать миниатюры видео в WooCommerce на WordPress
22.05.2026
Как избежать проблем со штормами видео в WordPress
06.12.2025
Как автоматизировать добавление подписей к видео в WordPress
16.04.2026
Как добавить автоматическое транскрибирование видео в WordPress
26.12.2025
Как исправить ошибку «Не загружается видео» в WordPress при использовании WooCommerce
20.04.2026