W
workalibur
Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
podrias hacer una funcion que detecte si se subio bien o tuvo un error porfa..El código proporcionado parece estar incompleto, sin embargo, para revisar y realizar una acción para cada URL repetida en una lista, puedes usar un enfoque como este:
Python:copied_urls = [...] # Aquí la lista con las urls copiadas # Utilizamos set para eliminar las urls repetidas unique_urls = set(copied_urls) # Comparamos el largo de las listas if len(copied_urls) != len(unique_urls): for url in copied_urls: if copied_urls.count(url) > 1: print(f" [x] Ya fue agregada anteriormente: {'/'.join(url.split('/')[3:])}\n")
Este código recorrerá todas las URL encopied_urls
, si encuentra una repetida, imprimirá el mensaje.
Claro, puedes añadir comprobaciones de error después de la ejecución del comando ffmpeg. Aquí te dejo un ejemplo de cómo podrías hacerlo:podrias hacer una funcion que detecte si se subio bien o tuvo un error porfa..
<?php
// Ruta al video original
$input_video = "/upload/100d32d91922a.mp4";
// Ruta al video de salida
$output_video = "/upload/aprobed/video_salida.mp4";
// Texto de la marca de agua
$texto_marca = "Tu texto aquí";
$ffmpeg = '/usr/bin/xvfb-run --auto-servernum -a /snap/bin/ffmpeg';
// Comando para agregar la marca de agua
$command = "$ffmpeg -i {$input_video} -vf \"drawtext=text='{$texto_marca}': fontcolor=white: fontsize=24: box=1: boxcolor=black@0.5: boxborderw=5: x=(w-text_w-10): y=(h-text_h-10)\" -codec:a copy {$output_video}";
// Ejecuta el comando
shell_exec($command);
?>
<?php
function add_watermark($input_video, $output_video, $texto_marca) {
$ffmpeg = '/usr/bin/xvfb-run --auto-servernum -a /snap/bin/ffmpeg';
$command = "$ffmpeg -i {$input_video} -vf \"drawtext=text='{$texto_marca}': fontcolor=white: fontsize=24: box=1: boxcolor=black@0.5: boxborderw=5: x=(w-text_w-10): y=(h-text_h-10)\" -codec:a copy {$output_video}";
$output = shell_exec($command . " 2>&1"); // Redirigimos stderr a stdout para capturarlo
if (strpos($output, 'Error') !== false) {
echo "Error al aplicar marca de agua: $output\n";
return false;
}
if (!file_exists($output_video)) {
echo "No se generó el video de salida.\n";
return false;
}
return true;
}
$input_video = "/upload/100d32d91922a.mp4";
$output_video = "/upload/aprobed/video_salida.mp4";
$texto_marca = "Tu texto aquí";
if (add_watermark($input_video, $output_video, $texto_marca)) {
echo "Marca de agua aplicada con éxito.\n";
} else {
echo "Hubo un problema al aplicar la marca de agua.\n";
}
?>
add_watermark
con los parámetros correspondientes y después verifica si la función retornó true
o false
, imprimiendo un mensaje acorde. Si hubo un error durante la ejecución de ffmpeg este será imprimido en el primer echo del bloque if de la función.No se generó el video de salida. Hubo un problema al aplicar la marca de agua. me sale esoClaro, puedes añadir comprobaciones de error después de la ejecución del comando ffmpeg. Aquí te dejo un ejemplo de cómo podrías hacerlo:
PHP:<?php function add_watermark($input_video, $output_video, $texto_marca) { $ffmpeg = '/usr/bin/xvfb-run --auto-servernum -a /snap/bin/ffmpeg'; $command = "$ffmpeg -i {$input_video} -vf \"drawtext=text='{$texto_marca}': fontcolor=white: fontsize=24: box=1: boxcolor=black@0.5: boxborderw=5: x=(w-text_w-10): y=(h-text_h-10)\" -codec:a copy {$output_video}"; $output = shell_exec($command . " 2>&1"); // Redirigimos stderr a stdout para capturarlo if (strpos($output, 'Error') !== false) { echo "Error al aplicar marca de agua: $output\n"; return false; } if (!file_exists($output_video)) { echo "No se generó el video de salida.\n"; return false; } return true; } $input_video = "/upload/100d32d91922a.mp4"; $output_video = "/upload/aprobed/video_salida.mp4"; $texto_marca = "Tu texto aquí"; if (add_watermark($input_video, $output_video, $texto_marca)) { echo "Marca de agua aplicada con éxito.\n"; } else { echo "Hubo un problema al aplicar la marca de agua.\n"; } ?>
Este código llama a la funciónadd_watermark
con los parámetros correspondientes y después verifica si la función retornótrue
ofalse
, imprimiendo un mensaje acorde. Si hubo un error durante la ejecución de ffmpeg este será imprimido en el primer echo del bloque if de la función.
Si te dice "No se generó el video de salida", hay varias cosas que puedes verificar:No se generó el video de salida. Hubo un problema al aplicar la marca de agua. me sale eso
que significa esto?Si te dice "No se generó el video de salida", hay varias cosas que puedes verificar:
1. Asegúrate de que la ruta del video de salida (output_video) sea correcta y tenga los permisos necesarios para escribir en esa ubicación.
2. Verifica que el comando ffmpeg esté bien escrito y que todas las rutas de los archivos sean correctas.
3. Chequea si tienes la última versión de ffmpeg y si está correctamente instalado.
Si todo esto está correcto y sigue sin funcionar, recomendaría imprimir la salida completa del comando para depurar y ver específicamente cuál es el error (lo que debería hacerse redirigiendo 2>&1 en shell_exec).
Este mensaje de error indica varias cosas:que significa esto?
Error al aplicar marca de agua: Error: unable to open display ffmpeg version n4.3.1 Copyright (c) 2000-2020 the FFmpeg developers built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04) configuration: --prefix= --prefix=/usr --disable-debug --disable-doc --disable-static --enable-cuda --enable-cuda-sdk --enable-cuvid --enable-libdrm --enable-ffplay --enable-gnutls --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libmp3lame --enable-libnpp --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopus --enable-libpulse --enable-sdl2 --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-nonfree --enable-nvenc --enable-omx --enable-openal --enable-opencl --enable-runtime-cpudetect --enable-shared --enable-vaapi --enable-vdpau --enable-version3 --enable-xlib libavutil 56. 51.100 / 56. 51.100 libavcodec 58. 91.100 / 58. 91.100 libavformat 58. 45.100 / 58. 45.100 libavdevice 58. 10.100 / 58. 10.100 libavfilter 7. 85.100 / 7. 85.100 libswscale 5. 7.100 / 5. 7.100 libswresample 3. 7.100 / 3. 7.100 libpostproc 55. 7.100 / 55. 7.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'upload/100d32d91922a.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf58.29.100 Duration: 00:26:26.06, start: 0.000000, bitrate: 1251 kb/s Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 854x480 [SAR 1280:1281 DAR 16:9], 1115 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default) Metadata: handler_name : VideoHandle Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default) Metadata: handler_name : SoundHandle File 'upload/video_salida.mp4' already exists. Overwrite? [y/N] Not overwriting - exiting Hubo un problema al aplicar la marca de agua.
tengo una duda, el video se codificara solo o tengo que esperar con la pagina abierta??Este mensaje de error indica varias cosas:
1. "unable to open display": Este mensaje suele aparecer cuando se intenta abrir una aplicación de interfaz gráfica desde un entorno sin GUI. Como FFMPEG es una herramienta de línea de comandos, no debería requerir una interfaz gráfica. El problema puede ser causado por el uso incorrecto de 'xvfb-run'.
2. "File 'upload/video_salida.mp4' already exists. Overwrite? [y/N] Not overwriting - exiting": FFMPEG intenta crear el archivo de salida 'video_salida.mp4', pero este ya existe y FFMPEG está configurado para no sobrescribir archivos existentes sin confirmación previa, por lo que se detiene.
Para resolver estos problemas:
1. Verifica por qué 'xvfb-run' está incluido en tu comando. Si no necesitas una display virtual, deberías ser capaz de ejecutar FFMPEG directamente.
2. Puedes decirle a FFMPEG que sobrescriba los archivos de salida existentes agregando '-y' a tu comando: "$ffmpeg -y -i {$input_video ...
Espero que esto te ayude a resolver el problema.
La codificación del video se realiza en el servidor donde se ejecuta el script PHP, por lo que no necesitas mantener la página abierta una vez que se haya iniciado el proceso. Sin embargo, dependiendo de cómo esté configurado el script, es posible que no recibas una notificación o actualización del estado hasta que vuelvas a cargar la página o solicites explícitamente esa información.tengo una duda, el video se codificara solo o tengo que esperar con la pagina abierta??
puedes hacer que genere un un thumnail tmb porfaClaro, puedes añadir comprobaciones de error después de la ejecución del comando ffmpeg. Aquí te dejo un ejemplo de cómo podrías hacerlo:
PHP:<?php function add_watermark($input_video, $output_video, $texto_marca) { $ffmpeg = '/usr/bin/xvfb-run --auto-servernum -a /snap/bin/ffmpeg'; $command = "$ffmpeg -i {$input_video} -vf \"drawtext=text='{$texto_marca}': fontcolor=white: fontsize=24: box=1: boxcolor=black@0.5: boxborderw=5: x=(w-text_w-10): y=(h-text_h-10)\" -codec:a copy {$output_video}"; $output = shell_exec($command . " 2>&1"); // Redirigimos stderr a stdout para capturarlo if (strpos($output, 'Error') !== false) { echo "Error al aplicar marca de agua: $output\n"; return false; } if (!file_exists($output_video)) { echo "No se generó el video de salida.\n"; return false; } return true; } $input_video = "/upload/100d32d91922a.mp4"; $output_video = "/upload/aprobed/video_salida.mp4"; $texto_marca = "Tu texto aquí"; if (add_watermark($input_video, $output_video, $texto_marca)) { echo "Marca de agua aplicada con éxito.\n"; } else { echo "Hubo un problema al aplicar la marca de agua.\n"; } ?>
Este código llama a la funciónadd_watermark
con los parámetros correspondientes y después verifica si la función retornótrue
ofalse
, imprimiendo un mensaje acorde. Si hubo un error durante la ejecución de ffmpeg este será imprimido en el primer echo del bloque if de la función.
¡Por supuesto! Para generar un thumbnail (miniatura) de un video, se suele tomar un cuadro (frame) del video en un momento específico. He aquí un código adicional para la función que también genera un thumbnail:puedes hacer que genere un un thumnail tmb porfa
function generate_thumbnail($input_video, $output_thumbnail) {
$ffmpeg = '/usr/bin/xvfb-run --auto-servernum -a /snap/bin/ffmpeg';
// Define el momento del video para generar el thumbnail, en segundos.
$time_to_snap = '00:00:01';
$command = "$ffmpeg -i $input_video -ss $time_to_snap -vframes 1 $output_thumbnail";
// Ejecuta el comando
shell_exec($command);
if (!file_exists($output_thumbnail)) {
echo "No se generó el thumbnail.\n";
return false;
}
return true;
}
$input_video = "/upload/100d32d91922a.mp4";
$output_thumbnail = "/upload/thumbnails/video_thumbnail.jpg";
if (generate_thumbnail($input_video, $output_thumbnail)) {
echo "Thumbnail generado con éxito.\n";
} else {
echo "Hubo un problema al generar el thumbnail.\n";
}
$time_to_snap
y lo guarda en la ruta especificada en $output_thumbnail
.pero no veo que se genere el nuevo video con la marca de agua?¡Por supuesto! Para generar un thumbnail (miniatura) de un video, se suele tomar un cuadro (frame) del video en un momento específico. He aquí un código adicional para la función que también genera un thumbnail:
Este código genera un thumbnail tomando una imagen del video al segundo especificado enPHP:function generate_thumbnail($input_video, $output_thumbnail) { $ffmpeg = '/usr/bin/xvfb-run --auto-servernum -a /snap/bin/ffmpeg'; // Define el momento del video para generar el thumbnail, en segundos. $time_to_snap = '00:00:01'; $command = "$ffmpeg -i $input_video -ss $time_to_snap -vframes 1 $output_thumbnail"; // Ejecuta el comando shell_exec($command); if (!file_exists($output_thumbnail)) { echo "No se generó el thumbnail.\n"; return false; } return true; } $input_video = "/upload/100d32d91922a.mp4"; $output_thumbnail = "/upload/thumbnails/video_thumbnail.jpg"; if (generate_thumbnail($input_video, $output_thumbnail)) { echo "Thumbnail generado con éxito.\n"; } else { echo "Hubo un problema al generar el thumbnail.\n"; }
$time_to_snap
y lo guarda en la ruta especificada en$output_thumbnail
.
Si no ves el nuevo video con la marca de agua, puede que haya ocurrido un error durante la ejecución del comando ffmpeg. Revisa si se generó algún mensaje de error.pero no veo que se genere el nuevo video con la marca de agua?
function generate_thumbnail($input_video, $output_thumbnail) {Si no ves el nuevo video con la marca de agua, puede que haya ocurrido un error durante la ejecución del comando ffmpeg. Revisa si se generó algún mensaje de error.
Adicionalmente, verifica que las rutas de los archivos y los nombres sean correctos, también confirma que tienes los permisos necesarios para escribir en el directorio de salida.
Si el problema persiste, te recomendaría realizar pruebas directamente en la línea de comandos del servidor para identificar cualquier posible problema con el comando ffmpeg.
El código que proporcionaste solo se encarga de generar el thumbnail del video. No está generando el video con la marca de agua. Deberías ejecutar la función add_watermark para generar el video con la marca de agua, y después la función generate_thumbnail para crear el thumbnail. Algo parecido a esto:function generate_thumbnail($input_video, $output_thumbnail) {
$ffmpeg = '/usr/bin/xvfb-run --auto-servernum -a /snap/bin/ffmpeg';
// Define el momento del video para generar el thumbnail, en segundos.
$time_to_snap = '00:00:01';
$command = "$ffmpeg -i $input_video -ss $time_to_snap -vframes 1 $output_thumbnail";
// Ejecuta el comando
shell_exec($command);
if (!file_exists($output_thumbnail)) {
echo "No se generó el thumbnail.\n";
return false;
}
return true;
}
$input_video = "/upload/100d32d91922a.mp4";
$output_thumbnail = "/upload/thumbnails/video_thumbnail.jpg";
if (generate_thumbnail($input_video, $output_thumbnail)) {
echo "Thumbnail generado con éxito.\n";
} else {
echo "Hubo un problema al generar el thumbnail.\n";
}
esto crea el thumpnail y el video con la marca de agua??
$input_video = "/upload/100d32d91922a.mp4";
$output_video = "/upload/aprobed/video_salida.mp4";
$texto_marca = "Tu texto aquí";
$output_thumbnail = "/upload/thumbnails/video_thumbnail.jpg";
if (add_watermark($input_video, $output_video, $texto_marca)) {
echo "Marca de agua aplicada con éxito.\n";
if (generate_thumbnail($output_video, $output_thumbnail)) {
echo "Thumbnail generado con éxito.\n";
} else {
echo "Hubo un problema al generar el thumbnail.\n";
}
} else {
echo "Hubo un problema al aplicar la marca de agua.\n";
}
tengo una duda, una vez creo que me dijiste que shell era inseguro, es verdad?El código que proporcionaste solo se encarga de generar el thumbnail del video. No está generando el video con la marca de agua. Deberías ejecutar la función add_watermark para generar el video con la marca de agua, y después la función generate_thumbnail para crear el thumbnail. Algo parecido a esto:
Este código primero crea el video con la marca de agua y después genera el thumbnail de ese video.PHP:$input_video = "/upload/100d32d91922a.mp4"; $output_video = "/upload/aprobed/video_salida.mp4"; $texto_marca = "Tu texto aquí"; $output_thumbnail = "/upload/thumbnails/video_thumbnail.jpg"; if (add_watermark($input_video, $output_video, $texto_marca)) { echo "Marca de agua aplicada con éxito.\n"; if (generate_thumbnail($output_video, $output_thumbnail)) { echo "Thumbnail generado con éxito.\n"; } else { echo "Hubo un problema al generar el thumbnail.\n"; } } else { echo "Hubo un problema al aplicar la marca de agua.\n"; }
Sí, la función shell_exec de PHP puede ser insegura si no se usa correctamente. La razón de esto es que ejecuta comandos directamente en la shell del sistema operativo, lo que puede abrir puertas para posibles ataques si un atacante logra inyectar comandos maliciosos.tengo una duda, una vez creo que me dijiste que shell era inseguro, es verdad?
hagamos esto de nuevo..¡Buenos días! 🌞
1.- ¡Excelentes noticias! Tu pedido ha sido programado para la entrega el día de hoy. 📦🚚
2.- Te informamos que tu pedido ya ha salido de nuestro almacén y está en camino. 📤🚛
3.- ¡Casi allí! Tu pedido está pronto a entregarse. Prepárate para recibirlo muy pronto. 🏠🎉
¡Gracias por tu preferencia!
Claro, puedes ajustar las coordenadas de la función "drawtext" para posicionar el texto en la parte superior derecha y capturar cualquier mensaje de error que pueda surgir. Aquí está el código actualizado:hagamos esto de nuevo..
<?php
// Ruta al video original
$input_video = "/ruta/video_original.mp4";
// Ruta al video de salida
$output_video = "/ruta/video_salida.mp4";
// Texto de la marca de agua
$texto_marca = "Tu texto aquí";
$ffmpeg = '/usr/bin/xvfb-run --auto-servernum -a /snap/bin/ffmpeg';
// Comando para agregar la marca de agua
$command = "$ffmpeg -i {$input_video} -vf \"drawtext=text='{$texto_marca}': fontcolor=white: fontsize=24: box=1: boxcolor=black@0.5: boxborderw=5: x=(w-text_w-10): y=(h-text_h-10)\" -codec:a copy {$output_video}";
// Ejecuta el comando
shell_exec($command);
?>
podrias hacer que el texto se vea siempre arriba a la derecha y haz algo para saber si completo correctamente o hubo algun error
<?php
// Ruta al video original
$input_video = "/ruta/video_original.mp4";
// Ruta al video de salida
$output_video = "/ruta/video_salida.mp4";
// Texto de la marca de agua
$texto_marca = "Tu texto aquí";
$ffmpeg = '/usr/bin/nginx/sbin/ffmpeg';
// Comando para agregar la marca de agua
$command = "$ffmpeg -i {$input_video} -vf \"drawtext=text='{$texto_marca}': fontcolor=white: fontsize=24: box=1: boxcolor=black@0.5: boxborderw=5: x=(w-text_w-10): y=10\" -codec:a copy {$output_video} 2>&1";
// Ejecuta el comando y captura la salida
$output = shell_exec($command);
// Verifica si se produjo algún error
if (strpos($output, 'error')) {
echo "ERROR: " . $output;
} else {
echo "El video se procesó correctamente.";
}
?>
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?