Онлайн конвертер видео на PHP с помощью FFmpeg

Создание простого конвертера видео на базе 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. Установка FFmpeg
sudo 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 /var/www/html/uploads

id_9