CULTIVA IA ffmpeg-procesamiento-audio-video v1.0.0

FFmpeg Workflow — CULTIVA Cafe

📁 5 archivos de entrada 🎬 4 formatos de salida ⚙️ 7 comandos FFmpeg 📉 Reduccion estimada ~68% 🗓️ Produccion semanal de contenido
Pipeline de procesamiento
🎥
Archivos bruto
.mov .webm .avi
🔍
ffprobe
Analisis codec/res
⚙️
Transcoding
H.264 + AAC
✂️
Trim + Concat
Recorte + montaje
🎨
Filtros
Scale, crop, fade
📦
Entregables
.mp4 .gif .jpg
5
Archivos de entrada
3× WebM · 1× MOV · 1× AVI
4
Entregables finales
2× MP4 · 1× GIF · 1× JPG
~2.1 GB
Entrada bruta estimada
ProRes 4K domina el peso
~680 MB
Salida optimizada
-68% · CRF 23 / CRF 28
Mapa de conversion de archivos
Archivo Codec origen Formato Tamano estimado Estrategia Destino
entrevista_barista.mov ProRes RAW 4K .mov
~1.8 GB ~580 MB
re-encode MP4 H.264 1080p CRF 18 (YouTube)
preparacion_v60.webm VP9 + Opus 1080p .webm
~150 MB ~90 MB
re-encode MP4 H.264 CRF 23 (Reel + YouTube)
latte_art_01.webm VP9 + Opus 1080p .webm
~28 MB ~8 MB
re-encode MP4 H.264 9:16 crop (Reel) + GIF
latte_art_02.webm VP9 + Opus 1080p .webm
~22 MB ~6 MB
re-encode MP4 H.264 9:16 crop (Reel)
timelapse_apertura.avi DivX/MPEG-4 720p .avi
~110 MB ~18 MB
re-encode MP4 H.264 720p CRF 28 (Reel intro)
Comandos FFmpeg generados
📱 Reel Instagram 9:16
Reel
# 1. Convertir clips WebM a H.264 normalizado 9:16
ffmpeg -i latte_art_01.webm \
  -vf "crop=ih*9/16:ih:(iw-ih*9/16)/2:0,scale=1080:1920" \
  -c:v libx264 -crf 23 -preset medium \
  -c:a aac -b:a 128k \
  -movflags +faststart \
  latte_art_01_reel.mp4

# 2. Concatenar clips en reel final (max 90s)
cat > filelist.txt << 'EOF'
file 'timelapse_reel.mp4'
file 'latte_art_01_reel.mp4'
file 'latte_art_02_reel.mp4'
file 'preparacion_reel.mp4'
EOF

ffmpeg -f concat -safe 0 \
  -i filelist.txt -t 90 \
  -c copy reel_instagram.mp4
Crop 9:16: crop=ih*9/16:ih centra horizontalmente sin deformar.
-t 90: corta al limite de Instagram Reels.
Resultado esperado: ~35 MB (limite Instagram: 100 MB ✓)
▶️ Video YouTube 1080p
YouTube
# ProRes 4K → H.264 1080p optimizado web
ffmpeg -i entrevista_barista.mov \
  -vf "scale=-2:1080" \
  -c:v libx264 -crf 18 \
  -preset slow \
  -c:a aac -b:a 192k \
  -movflags +faststart \
  -pix_fmt yuv420p \
  entrevista_barista_1080p.mp4

# Verificar resultado
ffprobe -v quiet \
  -print_format json \
  -show_format -show_streams \
  entrevista_barista_1080p.mp4
CRF 18: visualmente lossless, ideal para entrevistas con texto/faces.
-preset slow: mas tiempo = mejor compresion en YouTube CDN.
-pix_fmt yuv420p: compatibilidad maxima con YouTube player.
GIF animado newsletter
GIF
# Paso 1: Generar paleta de color optima
ffmpeg -i latte_art_01.webm \
  -ss 00:00:05 -t 3 \
  -vf "fps=15,scale=478:-1:flags=lanczos,palettegen" \
  palette.png

# Paso 2: Aplicar paleta → GIF alta calidad
ffmpeg -i latte_art_01.webm \
  -i palette.png \
  -ss 00:00:05 -t 3 \
  -lavfi "fps=15,scale=478:-1:flags=lanczos[v];[v][1:v]paletteuse" \
  latte_art_newsletter.gif
478px: ancho exacto para newsletters (Mailchimp max-width).
15 fps: balance calidad/tamano. 24 fps duplicaria el peso.
Resultado esperado: ~2.8 MB (limite email marketing: 3 MB ✓)
🖼️ Thumbnail JPG Reel
Thumbnail
# Extraer fotograma al segundo 12 del reel
ffmpeg -i reel_instagram.mp4 \
  -ss 00:00:12 \
  -frames:v 1 \
  -q:v 2 \
  thumbnail_reel.jpg

# Alternativa: grid de miniaturas (contacto)
ffmpeg -i reel_instagram.mp4 \
  -vf "select='not(mod(n,100))',scale=270:-1,tile=4x4" \
  -frames:v 1 \
  contact_sheet.jpg
-q:v 2: calidad JPEG maxima (1-31, menor = mejor).
Contact sheet: util para revisar momentos clave antes de elegir thumbnail.
Resultado: ~320 KB JPG listo para Cover de Instagram.
Script batch completo
📜 process_cultiva_cafe.sh
chmod +x process_cultiva_cafe.sh && ./process_cultiva_cafe.sh
#!/bin/bash
# process_cultiva_cafe.sh
# Workflow completo de produccion de contenido para CULTIVA Cafe
# CULTIVA IA — ffmpeg-procesamiento-audio-video skill

set -euo pipefail
OUTDIR="./output_$(date +%Y%m%d)"
mkdir -p "$OUTDIR"

# ── PASO 1: Analizar archivos de entrada ──────────────────────────────────
echo "🔍 Analizando archivos de entrada..."
for f in *.mov *.webm *.avi; do
  [[ -f "$f" ]] || continue
  echo "  ▸ $f:"
  ffprobe -v quiet -show_entries stream=codec_name,width,height \
    -of csv=p=0 "$f"
done

# ── PASO 2: Convertir WebM a MP4 normalizado ──────────────────────────────
echo "⚙️  Convirtiendo archivos WebM..."
for f in *.webm; do
  [[ -f "$f" ]] || continue
  ffmpeg -i "$f" \
    -c:v libx264 -crf 23 -preset medium \
    -c:a aac -b:a 128k \
    -movflags +faststart \
    "$OUTDIR/${f%.webm}.mp4"
done

# ── PASO 3: Entrevista MOV → 1080p YouTube ────────────────────────────────
echo "🎬 Procesando entrevista para YouTube..."
ffmpeg -i entrevista_barista.mov \
  -vf "scale=-2:1080" \
  -c:v libx264 -crf 18 -preset slow \
  -c:a aac -b:a 192k -pix_fmt yuv420p \
  -movflags +faststart \
  "$OUTDIR/entrevista_youtube.mp4"

# ── PASO 4: Reel 9:16 Instagram ───────────────────────────────────────────
echo "📱 Generando Reel Instagram 9:16..."
for f in latte_art_01.webm latte_art_02.webm timelapse_apertura.avi; do
  base="${f%.*}"
  ffmpeg -i "$f" \
    -vf "crop=ih*9/16:ih:(iw-ih*9/16)/2:0,scale=1080:1920" \
    -c:v libx264 -crf 23 -preset medium \
    -c:a aac -b:a 128k -movflags +faststart \
    "$OUTDIR/${base}_reel.mp4"
done

# ── PASO 5: GIF newsletter ────────────────────────────────────────────────
echo "✨ Creando GIF para newsletter..."
ffmpeg -i latte_art_01.webm -ss 5 -t 3 \
  -vf "fps=15,scale=478:-1:flags=lanczos,palettegen" \
  /tmp/palette.png
ffmpeg -i latte_art_01.webm -i /tmp/palette.png \
  -ss 5 -t 3 \
  -lavfi "fps=15,scale=478:-1:flags=lanczos[v];[v][1:v]paletteuse" \
  "$OUTDIR/latte_art_newsletter.gif"

# ── PASO 6: Thumbnail ─────────────────────────────────────────────────────
echo "🖼️  Extrayendo thumbnail..."
ffmpeg -i "$OUTDIR/latte_art_01_reel.mp4" \
  -ss 00:00:12 -frames:v 1 -q:v 2 \
  "$OUTDIR/thumbnail_reel.jpg"

echo "✅ Proceso completado → $OUTDIR/"
ls -lh "$OUTDIR/"
Guia CRF (Constant Rate Factor)
🎯 Seleccion de CRF para contenido CULTIVA Cafe
18
Visualmente lossless — 1.8 GB → ~580 MB
Entrevista barista (YouTube) -crf 18 -preset slow
23
Balance calidad/tamano — uso general
WebM a MP4, Reel Instagram -crf 23 -preset medium
28
Menor peso — algo de perdida visible
Timelapse, redes secundarias -crf 28 -preset faster
35
Solo drafts / previews internos
Revision interna, no publicar -crf 35 -preset ultrafast