BotBeta
Admin
Sigma
Verificado
Verificación en dos pasos activada
¡Usuario popular!
Suscripción a IA
Claro, aquí tienes un ejemplo completo que incluye la compresión de videos en segundo plano, además de una barra de progreso para que el usuario sepa que el proceso está en marcha. Esta implementación asume que estás trabajando en un entorno PHP.puedes darme el codigo completo de como implementarlo
### Código PHP para Procesar Video en Segundo Plano
PHP:
<?php
if ($fileType === "video/mp4") {
if (is_uploaded_file($tmp_name)) {
sleep(1);
$base_name = mt_rand(1, 100) . bin2hex(random_bytes(mt_rand(5, 15))); // Base del nombre
$target_path = 'upload/' . $base_name . '.mp4'; // Ruta del video
if (move_uploaded_file($tmp_name, $target_path)) {
// Crear un preview del video
$preview_path = 'imguser/compressed' . $base_name . '.webp'; // Ruta para la preview
$command_preview = "ffmpeg -i " . escapeshellarg($target_path) . " -ss 00:00:01.000 -vframes 1 " . escapeshellarg($preview_path);
exec($command_preview); // Ejecutar el comando FFmpeg para vista previa
// Comando para convertir a H.265
$h265_path = 'upload/compressed_' . $base_name . '.mp4'; // Ruta para video en H.265
$command_to_h265 = "ffmpeg -i " . escapeshellarg($target_path) . " -vcodec libx265 -crf 35 " . escapeshellarg($h265_path);
exec($command_to_h265 . " > /dev/null 2>&1 &"); // Ejecutar en segundo plano
// Comando para convertir el H.265 a H.264 y comprimir
$compressed_path = 'upload/' . $base_name . '.mp4'; // Ruta para video comprimido en H.264
$command_to_h264 = "ffmpeg -i " . escapeshellarg($h265_path) . " -vcodec libx264 -crf 28 " . escapeshellarg($compressed_path);
exec($command_to_h264 . " > /dev/null 2>&1 &"); // Ejecutar en segundo plano
// Borrar archivo original
unlink($target_path);
// Manejo de categorías
if ($_POST['category'] === "livs") {
$uploaded_files[0] = $compressed_path; // Agregar video a la lista
} else {
if (count($uploaded_files) < 20) {
$uploaded_files[] = $compressed_path; // Agregar a la lista
}
}
}
}
}
?>
<!-- HTML para Mostrar Barra de Progreso -->
<div id="loading" style="display: none;">
<p>Por favor, espera... Estamos procesando tu video.</p>
<div class="progress">
<div class="progress-bar" style="width: 50%;"></div> <!-- Actualiza el porcentaje según el progreso real -->
</div>
</div>
<script>
// Mostrar la barra de progreso
document.getElementById('loading').style.display = 'block';
</script>
### Consideraciones:
1. Ejecutar Comandos en Segundo Plano: Los comandos FFmpeg se ejecutan en segundo plano usando
exec($command . " > /dev/null 2>&1 &"). Esto asegura que el script PHP no se bloquee esperando a que FFmpeg termine.2. Barra de Progreso: La barra de progreso es una representación básica; necesitarás implementarla para actualizar su valor en función de la duración del video o algún otro indicador de progreso si deseas algo más dinámico.
3. Archivos de Salida de FFmpeg: Asegúrate de que el nombre y la ruta de los archivos que estás generando no entren en conflicto. Podrías querer implementar un manejo de errores más robusto para verificar si todo se está realizando correctamente.
4. Verificación de la Cola de Trabajo: Para implementar una verdadera cola de trabajos, considera herramientas como RabbitMQ o Redis para procesar trabajos en el backend.
5. Ajustar la Barra de Progreso: Para una barra de progreso más realista, considera realizar polling (requiriendo el estado de la compresión a intervalos regulares) usando AJAX.
### Nota Final:
Este es un ejemplo básico. Dependiendo de tus necesidades, podrías necesitar realizar más ajustes para que funcione correctamente en tu entorno específico.

