Script para macOS que convierte archivos MP4 en animaciones en bucle estilo GIF WebP con un solo clic.

Resumir con IA

Para el trabajo de desarrollo de aplicaciones y clientes, a menudo necesito Visualiza rápidamente el contenido de vídeo.:

  • Animaciones de vista previa para gerentes de producto
  • Clips de demostración para documentos o PRD
  • Animación ligera para publicaciones en redes sociales o páginas de destino.

En estos casos, Extraer algunos fotogramas clave de un archivo MP4 y convertirlos en una animación WebP en bucle. Normalmente es suficiente, y mucho más ligero que subir un vídeo completo.

Este artículo comparte una Script de shell de un solo clic para macOS eso:

  • Extrae entre 6 y 12 fotogramas espaciados uniformemente de un archivo MP4.
  • los redimensiona a un ancho de 720 píxeles
  • crea una animación WebP en bucle
  • y se instala automáticamente ffmpeg si falta

Todo esto se ejecuta mediante un único comando en la terminal.


1. Qué hace el guion

En macOS, el script extraer_fotogramas_inpares_webp.sh proporciona:

  1. Automático ffmpeg detección e instalación
    • Comprueba si ffmpeg está disponible
    • Si no, instala Homebrew (si es necesario) y luego instala ffmpeg
  2. Extracción de fotogramas uniformes
    • Calcula la duración del vídeo
    • Muestras uniformes 6–12 fotogramas a lo largo de todo el vídeo
    • Por defecto son 6 fotogramas, pero puedes personalizar el número.
  3. Generación de animación WebP
    • Combina los fotogramas PNG extraídos en un WebP en bucle
    • El ancho de salida es 720 píxeles Por defecto (la altura se ajusta proporcionalmente)
    • La calidad es ajustable mediante -q:v
  4. Limpieza automática
    • Almacena los fotogramas intermedios en un directorio temporal.
    • Elimina el directorio temporal después de que se genere el archivo WebP.
  5. Funciona tanto con vídeos cortos como largos.
    • Si el vídeo es muy corto, el número de fotogramas se reduce automáticamente.
    • Para vídeos más largos, los fotogramas siempre están espaciados uniformemente a lo largo de toda la duración.

2. Cómo funciona internamente

Esta es la lógica básica detrás del script.

2.1 Comprobar dependencias

El script primero comprueba si ffmpeg está instalado:

  • Usos comando -v ffmpeg
  • Si no se encuentra, comprueba elaborar cerveza
    • Si falta Homebrew, lo instala.
    • Luego usa brew install ffmpeg para instalar ffmpeg

2.2 Recuperar la duración del video

Usando ffprobe, el guion lee el duración total del vídeo en segundos.
En función de esto y del número de fotogramas deseado, calcula el intervalo de tiempo entre fotogramas.

2.3 Muestrear uniformemente los fotogramas

Para cada índice de fotograma, sucede lo siguiente:

  • Calcula la marca de tiempo = índice × intervalo
  • Usos ffmpeg -ss saltar a esa posición temporal
  • Extrae exactamente un fotograma.
  • Lo escala con escala=720:-1 Por lo tanto, el ancho es de 720px y la altura es proporcional.

2.4 Construir la animación WebP

Una vez que todos los fotogramas se guardan como PNG, el script llama ffmpeg nuevamente a:

  • Léalos en orden (d.png)
  • Codifícalos como un archivo WebP animado.
  • Colocar -bucle 0 por lo que la animación se repite indefinidamente
  • Controlar la calidad con -q:v 70 (Menor valor = mayor calidad, archivo más grande)

2.5 Limpieza

Todos los archivos PNG intermedios se almacenan en un directorio temporal creado por mktemp -d.
Después de que se genera el WebP, ese directorio se elimina con rm -rf.


3. Script de shell completo: extract_even_frames_webp.sh

Puedes guardar el siguiente script como extraer_fotogramas_inpares_webp.sh En tu Mac:

#!/bin/bash # Uso: ./extract_even_frames_webp.sh input.mp4 output.webp [fotogramas] # frames es opcional, predeterminado 6, máximo 12 INPUT="$1" OUTPUT="$2" FRAMES="${3:-6}" # Limitar el máximo de fotogramas a 12 if [ "$FRAMES" -gt 12 ]; then FRAMES=12 fi if [ -z "$INPUT" ] || [ -z "$OUTPUT" ]; then echo "Uso: $0 input.mp4 output.webp [fotogramas]" exit 1 fi # --------------------------------- # 1️⃣ Comprobar ffmpeg # --------------------------------- if ! comando -v ffmpeg >/dev/null 2>&1; entonces echo "⚠️ ffmpeg no encontrado, iniciando instalación..." si ! comando -v brew >/dev/null 2>&1; entonces echo "⚠️ Homebrew no encontrado, instalando Homebrew..." /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" echo "✅ Homebrew instalado" sino echo "✅ Homebrew ya instalado" fi brew update brew install ffmpeg si ! comando -v ffmpeg >/dev/null 2>&1; entonces echo "❌ la instalación de ffmpeg falló, por favor verifique manualmente" exit 1 fi echo "🎉 ¡ffmpeg instalado correctamente!" else echo "✅ ffmpeg ya está instalado" fi # --------------------------------- # 2️⃣ Obtener duración del video # --------------------------------- DURATION=$(ffprobe -v error -show_entries format=duration -of csv=p=0 "$INPUT") if [[ -z "$DURATION" ]]; then echo "❌ No se pudo obtener la duración del video" exit 1 fi DURATION=${DURATION%.*} # segundos enteros # Si el video es más corto que los fotogramas solicitados, hacer coincidir el número de fotogramas con la duración if [ "$DURATION" -lt "$FRAMES" ]; entonces FRAMES=$DURATION fi echo "📹 Duración del video: ${DURATION}s, extrayendo $FRAMES fotogramas de manera uniforme" # --------------------------------- # 3️⃣ Crear directorio temporal # --------------------------------- TMPDIR=$(mktemp -d) # --------------------------------- # 4️⃣ Calcular intervalo # --------------------------------- INTERVAL=$(echo "escala=6; $DURATION/$FRAMES" | bc) echo "⏱ Intervalo de fotogramas: $INTERVAL segundos" # --------------------------------- # 5️⃣ Extraer fotogramas # --------------------------------- for i in $(seq 0 $(($FRAMES-1))); do TIME=$(echo "$i * $INTERVAL" | bc) printf -v FILENAME "d.png" $((i+1)) ffmpeg -ss "$TIME" -i "$INPUT" -frames:v 1 -vf "scale=720:-1" \ "$TMPDIR/$FILENAME" -hide_banner -loglevel error done # --------------------------------- # 6️⃣ Generar WebP animado # --------------------------------- ffmpeg -y -i "$TMPDIR/d.png" -vcodec libwebp -lossless 0 -q:v 70 \ -loop 0 -preset picture "$OUTPUT" -hide_banner -loglevel error # --------------------------------- # 7️⃣ Limpiar # --------------------------------- rm -rf "$TMPDIR" echo "🎉 ¡Listo! Archivo generado: $OUTPUT""

4. Cómo usar el script en macOS

  1. Guarda el script Guarda el contenido anterior como extraer_fotogramas_inpares_webp.sh, por ejemplo, en su directorio personal.
  2. Dale permiso de ejecución
chmod +x extract_even_frames_webp.sh
  1. Uso básico
./extract_even_frames_webp.sh input.mp4 output.webp

Esto hará:

  • Compruebe o instale ffmpeg
  • Extraer 6 fotogramas espaciados uniformemente
  • Generar salida.webp con un ancho de 720 píxeles
  1. Especifique el número de fotogramas (6–12)
./extract_even_frames_webp.sh input.mp4 output.webp 8

Esto extraerá 8 fotogramas en lugar de los 6 predeterminados.


5. Por qué este flujo de trabajo es útil

En comparación con abrir manualmente un editor de vídeo o navegar por un convertidor con interfaz gráfica de usuario, este script tiene algunas ventajas:

  1. Configuración manual cero
    • Se instala automáticamente ffmpeg (y Homebrew si es necesario)
    • No es necesario buscar instaladores ni recordar comandos.
  2. Muestreo de fotogramas inteligentes
    • Para clips cortos, reduce automáticamente el número de fotogramas.
    • Para vídeos más largos, los fotogramas siempre se espacian uniformemente a lo largo de la duración.
  3. Control de calidad y tamaño
    • -q:v te permite ajustar la calidad de WebP en función del tamaño del archivo.
    • escala=720:-1 proporciona un ancho compatible con la web y una relación de aspecto consistente.
  4. Bucle por defecto
    • -bucle 0 Hace que la animación WebP se reproduzca en bucle indefinidamente.
    • Ideal para previsualizaciones, demostraciones y animaciones sutiles en documentos o sitios web.
  5. Uso limpio del disco
    • Los marcos PNG temporales se almacenan en una carpeta temporal y se eliminan posteriormente.
    • No se acumulan archivos residuales con el tiempo.

6. Ejemplo: convertir un archivo MP4 de 20 segundos en una vista previa WebP.

Imagina que tienes un Vídeo de demostración de 20 segundos y correr:

./extract_even_frames_webp.sh demo.mp4 demo-preview.webp 6

El guion dirá:

  • Calcula un intervalo de aproximadamente 3,33 segundos
  • Extraer 6 fotogramas en 0s, 3,33s, 6,66s, 10s, 13,33s, 16,66s
  • Redimensionarlos a un ancho de 720 píxeles.
  • Construye un WebP en bucle animación

Luego puedes colocar este archivo WebP en:

  • Documentos del producto o documentos de Feishu / Notion como vista previa ligera
  • Publicaciones en redes sociales o páginas de destino como miniatura de movimiento de reproducción automática
  • Presentaciones de PowerPoint y demostraciones internas donde un video completo sería excesivo.

7. Ideas para la ampliación

Este script es un punto de partida; puedes adaptarlo fácilmente a tu propio flujo de trabajo:

  1. Recuento de fotogramas dinámico
    • Seleccionar automáticamente entre 6 y 12 fotogramas en función de la duración del vídeo.
    • Por ejemplo, más fotogramas para clips más largos para mostrar más estados.
  2. Tamaños personalizados
    • Cambiar escala=720:-1 al ancho que prefiera su equipo de producto
    • O bien, exponer el ancho como un parámetro: ./script.sh in.mp4 out.webp 8 1080
  3. Procesamiento por lotes
    • Envuelva este script en otro bucle para procesar todo .mp4 archivos en una carpeta
    • Útil cuando exportas un lote de demostraciones de funciones a la vez.

Nota del autor

Este script proviene de mi flujo de trabajo real de desarrollo en macOS para convertir vídeos MP4 en previsualizaciones WebP ligeras. Lo uso a diario en el desarrollo para clientes para generar animaciones de demostración para documentación y publicaciones en redes sociales. GPT solo se utilizó para ayudar a traducir, estructurar y perfeccionar la versión en inglés de este artículo; la lógica del script, los detalles de implementación y los patrones de uso provienen de mi propia experiencia en proyectos.

Acerca del autor

Compartir publicación:

Mantente conectado

Más actualizaciones