Каким образом можно определить длительность видеофайла с помощью PHP?

Здравствуйте! <br/> Существует ли простой способ узнать длину видеофайла, если файл хранится на обычном хостинге, а не на VPS?
  • 10 января 2025 г. 16:04
Ответы на вопрос 2
Здравствуйте!

Существует несколько способов определить длительность видеофайла с помощью PHP, даже если файл хранится на обычном хостинге. Вот два популярных метода:

### 1. Использование библиотеки FFmpeg

FFmpeg – это мощный инструмент для работы с мультимедийными файлами, включая видео и аудио. Вы можете использовать его через PHP, если он установлен на сервере.

Для использования FFmpeg:

1. Убедитесь, что FFmpeg установлен на сервере.
2. Выполните команду через `exec()` или `shell_exec()`.

Пример кода:

```php
$videoFile = 'path/to/your/video.mp4';
$ffmpeg = '/usr/bin/ffmpeg'; // путь к FFmpeg
$cmd = "$ffmpeg -i $videoFile 2>&1";
$output = shell_exec($cmd);

preg_match('/Duration: (\d+:\d+:\d+\.\d+)/', $output, $matches);
if (isset($matches[1])) {
    echo "Длительность видео: " . $matches[1];
} else {
    echo "Не удалось определить длительность видео.";
}
```

### 2. Использование библиотеки `getID3`

Если установка FFmpeg невозможна, вы можете использовать PHP-библиотеку `getID3`, которая может извлекать метаданные из различных медиаформатов.

Для этого выполните следующие шаги:

1. Установите библиотеку `getID3` через Composer или скачайте с [официального сайта](https://getid3.sourceforge.io/).
2. Используйте библиотеку в вашем коде.

Пример кода:

```php
require_once 'getid3/getid3.php';

$getID3 = new getID3;
$fileInfo = $getID3->analyze('path/to/your/video.mp4');

if (isset($fileInfo['playtime_string'])) {
    echo "Длительность видео: " . $fileInfo['playtime_string'];
} else {
    echo "Не удалось определить длительность видео.";
}
```

Выберите способ, который больше подходит для ваших нужд и доступных ресурсов на хостинге. Если FFmpeg доступен, он, как правило, предоставляет больше возможностей. Если нет - используйте `getID3`.
Установить пакет ffmpeg и использовать утилиту <a href="https://ffmpeg.org/ffprobe.html" rel="nofollow">ffprobe</a> <br/> Вот информация о видео в json: <br/> <pre><code class="bash">ffprobe -v quiet -print_format json -show_format example.avi</code></pre> <br/> или вот конкретно одно поле с длительностью в секундах <br/> <pre><code class="bash">ffprobe -v quiet -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 example.avi</code></pre> <br/> <br/> соответственно на php выполни эту команду, например: <br/> <pre><code class="php">$duration=`ffprobe -v quiet -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$filename"`';</code></pre> <br/> и получишь в $duration секунды в float или пусто при ошибке.
Похожие вопросы