Cómo convertir video en segundo plano usando PHP y ffmpeg

Permito a los usuarios subir videos y luego se convierten utilizando ffmpeg. El video tarda mucho tiempo en convertirse, lo que generalmente genera un error. He hecho mi investigación sin suerte sobre dónde debería comenzar.

Básicamente, lo que quiero hacer es permitir que el usuario cargue el video y luego mostrar un mensaje que dice que el video se está procesando y se le notificará cuando esté disponible. Mientras tanto, quiero que el video se convierta entre bastidores y permita al usuario salir de la página o incluso cerrar el navegador. Estoy usando un servidor de Windows.

¿Cómo puedo lograr esto?

Aquí hay un resumen básico de cómo hacer su propia cola usando un sistema de progtwigción como Cron:

  • Cree una queue tabla de base de datos que contenga (id, created_at, file_path, id_user, result, error) . El file_path contiene la ubicación del video cargado para procesar, el resultado es null antes del procesamiento y luego true/false luego según el éxito, y si falla el error contiene algún mensaje. La clave principal de la tabla de usuario se puede guardar aquí también, si corresponde.
  • Cada minuto, ejecute un progtwig de Cron para verificar la cola de los elementos no procesados.
  • Si hay elementos esperando, recorra algunos de ellos y ejecute su código de conversión de video. Es posible que desee limitar esto para que no se procesen más de, por ejemplo, cinco elementos de una sola vez y que haya más elementos en cola que esperar a que se ejecute una nueva cron.
  • Al comienzo de su script cron, necesita salir temprano si ya se está ejecutando una copia anterior. Puede usar la salida de ps aux | grep (scriptname) ps aux | grep (scriptname) para ayudar aquí, si está ejecutando en un sistema operativo * nix.

Dentro de su aplicación web, necesita modificar algo el flujo de trabajo: en lugar de esperar que un video se procese de inmediato, debe:

  • Solicite la conversión de video creando una nueva fila de base de datos
  • Redirigir a una página que explica que la creación del video está en progreso
  • Periódicamente, vuelva a verificar el estado de conversión usando redirecciones web, AJAX o Web Sockets.

Este enfoque es muy útil para el alojamiento compartido donde no puede instalar sus propios procesadores de cola. Sin embargo, si está en un sistema VPS o en la nube, es posible que desee ver Gearman o uno de muchos otros sistemas de colas . Son un poco más complejos que los anteriores, pero tienen más características para administrar colas de trabajo.