Как определить ширину и высоту видеофайла при его загрузке на сервер?

Как можно получить размеры (ширину и высоту) видео с помощью JavaScript до его загрузки или с помощью PHP после его загрузки на сервер?
  • 23 января 2024 г. 19:28
Ответы на вопрос 2
Для определения ширины и высоты видеофайла можно использовать различные техники в зависимости от того, работаете ли вы с фронтендом (JavaScript) или с бэкендом (PHP).

### JavaScript (Перед загрузкой на сервер)

Чтобы получить размеры видео с помощью JavaScript до отправки файла на сервер, можно использовать объект `URL` для создания временного объекта URL, который указывает на файл, который был выбран с помощью элемента `<input>` типа file, и затем создать элемент `<video>` для извлечения метаданных.

Пример кода на JavaScript:

```javascript
const input = document.querySelector('input[type="file"]');
input.onchange = function(event) {
    const file = event.target.files[0];
    const url = URL.createObjectURL(file);

    // Создаем элемент video для извлечения размеров
    const video = document.createElement('video');
    video.src = url;
    video.addEventListener('loadedmetadata', function() {
        // Метаданные загружены, можно получить размеры
        console.log(`Ширина: ${video.videoWidth}, Высота: ${video.videoHeight}`);

        // Освобождаем память, удаляя временный URL
        URL.revokeObjectURL(url);
    });
}
```

### PHP (После загрузки на сервер)

Для получения размеров видео с помощью PHP после его загрузки на сервер, можно использовать функцию `getimagesize()` для картинок, но для видеофайлов она не подойдет. В таком случае часто используются расширения или инструменты командной строки, такие как `ffmpeg`.

Пример использования `ffmpeg` с PHP:

```php
// Путь к загруженному на сервер видеофайлу
$videoFile = '/path/to/your/video.mp4';

// Команда для получения размеров видео с помощью ffmpeg
$command = "ffmpeg -i $videoFile 2>&1 | grep 'Stream' | grep 'Video:' | grep -oP ', \K[^,]+'";

// Выполнение команды и сохранение вывода в переменную $output
exec($command, $output);

// Разбор вывода для извлечения ширины и высоты
if (preg_match('/(\d+)x(\d+)/', $output[0], $matches)) {
    $width = $matches[1];
    $height = $matches[2];
    echo "Ширина: $width, Высота: $height";
} else {
    echo "Не удалось определить размеры видео.";
}
```

Вам понадобится установить `ffmpeg` на ваш сервер, чтобы использовать его с PHP. Обратите внимание, что пути и параметры команды могут варьироваться в зависимости от настроек вашего сервера.

Важно заметить, что при работе с файлами загруженными пользователями необходимо быть осторожным и проводить их валидацию для предотвращения возможных уязвимостей, связанных с безопасностью.
На фронте использу эту библиотеку 
https://github.com/buzz/mediainfo.js

Посмотреть в деле без заливки файла на сервер
https://mediainfo.js.org/
Похожие вопросы