# 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
# 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
# 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
# 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
#!/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/"