Получение статистики и скриншотов видеоролика посредством php5-ffmpeg

в 10:22, , рубрики: ffmpeg, php, php5, YouTube, Веб-разработка, Работа с видео, метки: , ,

Продолжаем делать ютуб.

Открытый вопрос — с уходом ffmpeg из Ubuntu, что придет на замену модулю php5-ffmpeg? Сообщите в комментариях, если вам что-то известно.

Под катом небольшая функция, написанная на PHP5, использующая модуль php5-ffmpeg, извлекающая скриншоты и статистику из видео.

Установка модуля php5-ffmpeg в Ubuntu

sudo apt-get install php5-ffmpeg

Функция принимает параметры
$video — полный серверный путь до (загруженного) видеоролика
$screens_path — передать полный серверный путь, чтобы сделать скриншоты
$screens_count — количество скриншотов

function movie_progress($video,$screens_path = FALSE,$screens_count = 10)
{
	$movie = new ffmpeg_movie($video);
	if ( ! $movie)
	{
		return;
	}
	$frame_count = $movie->getFrameCount();
	// получаем скриншоты
	$screens = FALSE;
	if ($screens_path)
	{
		// определяем интервал, через который будем извлекать скрины
		$step = floor($frame_count / ($screens_count));
		$screens = array();
		// извлекаем скриншоты, и складываем пути в массив
		for ($i = $step; $i < $frame_count; $i += $step)
		{
			$filename = $path.md5(rand()).'.png';
			$frame = $movie->getFrame($i);
			$image = $frame->toGDImage();
			imagepng($image,$filename);
			if (is_file($filename))
			{
				$screens[] = $filename;
			}
		}
	}
	// возвращаем статистику и список скринов
	return array(
		'width' => $movie->getFrameWidth(), // ширина в пикселях
		'height' => $movie->getFrameHeight(), // высота в пикселях
		'frame_count' => $frame_count, // количество фреймов
		'bitrate' => $movie->getBitRate(), // битрейт
		'video_bitrate' => $movie->getVideoBitRate(),
		'video_codec' => $movie->getVideoCodec(),
		'audio_codec' => $movie->getAudioCodec(),
		'screens' => $screens, // массив со скриншотами
	);
}

Можно модифицировать любым образом, по вашему усмотрению.

Методы $movie->getAuthor(), $movie->getCopyright(), $movie->getArtist(), $movie->getGenre() и подобные по неизвестным мне причинам приводят к фатальной ошибке, не отлавливаемой средствами PHP.

Документация на модуль ffmpeg-php.sourceforge.net/doc/api/index.php

Автор: customtema

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js