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
ffmpegsi 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:
- Automático
ffmpegdetección e instalación- Comprueba si
ffmpegestá disponible - Si no, instala Homebrew (si es necesario) y luego instala
ffmpeg
- Comprueba si
- 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.
- 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
- Limpieza automática
- Almacena los fotogramas intermedios en un directorio temporal.
- Elimina el directorio temporal después de que se genere el archivo WebP.
- 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 ffmpegpara instalarffmpeg
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 -sssaltar a esa posición temporal - Extrae exactamente un fotograma.
- Lo escala con
escala=720:-1Por 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 0por 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
- Guarda el script Guarda el contenido anterior como
extraer_fotogramas_inpares_webp.sh, por ejemplo, en su directorio personal. - Dale permiso de ejecución
chmod +x extract_even_frames_webp.sh
- 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.webpcon un ancho de 720 píxeles
- 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:
- Configuración manual cero
- Se instala automáticamente
ffmpeg(y Homebrew si es necesario) - No es necesario buscar instaladores ni recordar comandos.
- Se instala automáticamente
- 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.
- Control de calidad y tamaño
-q:vte permite ajustar la calidad de WebP en función del tamaño del archivo.escala=720:-1proporciona un ancho compatible con la web y una relación de aspecto consistente.
- Bucle por defecto
-bucle 0Hace que la animación WebP se reproduzca en bucle indefinidamente.- Ideal para previsualizaciones, demostraciones y animaciones sutiles en documentos o sitios web.
- 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:
- 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.
- Tamaños personalizados
- Cambiar
escala=720:-1al ancho que prefiera su equipo de producto - O bien, exponer el ancho como un parámetro:
./script.sh in.mp4 out.webp 8 1080
- Cambiar
- Procesamiento por lotes
- Envuelva este script en otro bucle para procesar todo
.mp4archivos en una carpeta - Útil cuando exportas un lote de demostraciones de funciones a la vez.
- Envuelva este script en otro bucle para procesar todo
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.


