Создание простого конвертера видео на базе PHP + FFmpeg. Это позволит практически любые видеофайлы конвертировать в формат MP4 для простого воспроизведения в плеере VLC
Для настройки понадобиться установить FFmpeg и настроить базовую связку PHP + Apache. Шаги для настройки:
1. Установка Linux в качестве ОС. Я использую Ubuntu Server 19.04
Для управления сервером использую программу Putty
2. Настройка PHP 7.2 + Apache
Установим PHP:
sudo apt install php libapache2-mod-php php-mysql
По умолчанию в PHP есть ограничения по загрузке файлов, и времени исполнения кода, нужно это убрать:sudo nano /etc/php/7.2/apache2/php.ini
Затем ищем строки и меняем их значения на то что ниже:post_max_size = 4096M
upload_max_filesize = 4096M
max_file_uploads = 200
max_execution_time = 600
Установим Apache: sudo apt install apache2
После этого нам необходимо перезапустить Apache для применения внесенных изменений. sudo systemctl restart apache2
Проверить статус сервиса apache2
:sudo systemctl status apache2
Установим права на директорию:
sudo chown -R user:root /var/www/html
Включить обработку файла .htaccess
:sudo nano /etc/apache2/apache2.conf
Измените значение параметра AllowOverride
:AllowOverride All
Затем перезапустите apache:sudo systemctl restart apache2
3. Установка FFmpegsudo apt-get update
sudo apt-get install ffmpeg
Все готово для настройки конвертера.
Для удобства пользования сервером использую программу WinSCP
Переходим в папку с сайтом:/var/www/html
Затем создаем файл convert.php
Вот его содержимое:
<p>Конвертация практически любого видеофайла в формат <b>MP4</b>
<!-- Тип кодирования данных, enctype, ДОЛЖЕН БЫТЬ указан ИМЕННО так -->
<form enctype="multipart/form-data" action="/convert_to_mp4.php" method="POST">
<!-- Поле MAX_FILE_SIZE должно быть указано до поля загрузки файла -->
<!-- Название элемента input определяет имя в массиве $_FILES -->
<h2>Выберите файл для конвертирования:</h2>
<p><input name="userfile" type="file" />
<input type="submit" value="Конвертировать" />
</form>
Затем создаем второй файл с именем convert_to_mp4.php
Вот его содержимое:
<?php
$uploaddir = 'uploads/';
$uploadfile = $uploaddir . basename($_FILES["userfile"]["name"]); //оригинальный файл пользователя
/*Скрипт загрузки в папку*/
echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile ))
{
echo "<h3>Сударь, блюдо подано! </h3>\n";
}
else
{
echo "Что то пошло не так.\n";
}
/*Скрипт загрузки в папку*/
$pathinfo2 = pathinfo($uploadfile, PATHINFO_EXTENSION ); // выводит расширение загруженного файла
$u = md5(time()) .'.'. $pathinfo2; //новый файл что создается
rename($uploadfile , $uploaddir. $u); //переименовать файл
$path_parts = pathinfo($u, PATHINFO_FILENAME) ; //загруженный файл, но без расширения
$w= $path_parts .'.mp4'; //готовый файл для скачивания с расширением mp4
exec("ffmpeg -i ". $uploaddir . $u ." -c:v copy -c:a copy ". $uploaddir. $w); //скрипт конвертирования в MP4
$link=$uploaddir.$w;
echo "<a href=$link><h1>Скачать файл</h1></a>"; //кнопка скачать
exec("find /var/www/html/uploads/ -type f -mmin +1440 -delete"); //автоматическое удаление файлов старше 1440 мин. Срабатывает при обновлении страницы
?>
Далее необходимо создать файл с именем .htaccess
в корневой директории сайта. Содержимое файла:
AddDefaultCharset UTF-8
Options -Indexes
ForceType application/octet-strea
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>
Затем создать каталогuploads
. В него будут помещены все загружаемые файлы. Установить права на него:sudo chown admin:www-data -R /var/www/html
id_9