32blogby Studio Mitsu

FFmpeg para redes sociales: video vertical 9:16 (Reels/Shorts/TikTok)

Convierte cualquier video a formato vertical 9:16 para Instagram Reels, YouTube Shorts, TikTok y X con FFmpeg. Recorte, relleno, fondo borroso, subtítulos y procesamiento por lotes.

by omitsu15 min read
Contenido

Tienes un video en 16:9 y todas las plataformas piden 9:16 vertical. Exportar desde un editor gráfico para cada red social es una pérdida de tiempo, sobre todo cuando las especificaciones son casi idénticas. Si llegaste aquí buscando "ffmpeg video vertical" o "ffmpeg formato tiktok," estás en el lugar correcto.

La buena noticia: todas las plataformas de video corto aceptan el mismo formato base — 1080×1920, H.264, AAC, MP4. Un solo comando de FFmpeg cubre YouTube Shorts, Instagram Reels, TikTok, X y Facebook Reels. Las diferencias están en la duración máxima y el bitrate óptimo, no en el contenedor ni el códec.

Esta guía te muestra cómo convertir cualquier video a formato vertical, agregar texto y subtítulos, y procesar una carpeta entera por lotes — todo desde la terminal.

Lo que aprenderás

  • Especificaciones de video para Shorts, Reels, TikTok, X y Facebook Reels
  • Un comando universal de FFmpeg que funciona en todas las plataformas
  • Tres métodos para convertir 16:9 a 9:16 (recorte, relleno, fondo borroso)
  • Cómo agregar texto y quemar subtítulos
  • Ajustes de codificación por plataforma
  • Procesamiento por lotes con scripts de shell

Especificaciones de video por plataforma

Cada plataforma tiene su propia página de ayuda, pero los requisitos centrales son notablemente similares:

PlataformaRelación de aspectoResolución máx.CódecDuración máx.Tamaño máx.
YouTube Shorts9:161080×1920H.264 + AAC3 min256 GB
Instagram Reels9:161080×1920H.264 + AAC20 min (90s recomendado)4 GB
TikTok9:161080×1920H.264 + AACGrabación 10 min / Subida 60 min72–500 MB
X (Twitter)9:16, 16:9, 1:11920×1080H.264 + AAC2 min 20s (gratis) / 4 h (Premium)512 MB (gratis) / 16 GB (Premium)
Facebook Reels9:161080×1920H.264 + AACSin límite (≤90s recomendado)4 GB

El patrón: 1080×1920, H.264, AAC, MP4. Ese es tu objetivo para todo. Las especificaciones de cada plataforma cambian con frecuencia — verifica siempre los límites actuales en las páginas oficiales enlazadas antes de subir en lote.

Bitrates recomendados

El bitrate determina la relación calidad-tamaño. Subir más de lo necesario no tiene sentido — las plataformas recodifican tu video de todas formas.

PlataformaBitrate de videoBitrate de audioNotas
YouTube Shorts5–10 Mbps128 kbpsYouTube recomienda 8+ Mbps para 1080p
Instagram Reels3.5–5 Mbps128 kbpsMeta recodifica agresivamente
TikTok2–4 Mbps128 kbpsOptimizado para subida rápida
X2.5–5 Mbps128 kbps5 Mbps para 1080p, 2.5 Mbps para 720p
Facebook Reels4–6 Mbps128 kbpsBitrate más alto para contenido con mucho texto

El preset universal de FFmpeg

Este único comando produce un archivo compatible con todas las plataformas:

bash
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,setsar=1" \
  -c:v libx264 -crf 20 -preset slow -profile:v high -level 4.2 \
  -pix_fmt yuv420p -r 30 \
  -c:a aac -b:a 128k -ar 44100 -ac 2 \
  -movflags +faststart \
  -y output_vertical.mp4

Qué hace cada parte:

FlagFunción
scale=1080:1920:force_original_aspect_ratio=decreaseEscala para que quepa en 1080×1920 manteniendo la proporción
pad=1080:1920:(ow-iw)/2:(oh-ih)/2:blackRellena el espacio restante con barras negras
setsar=1Garantiza píxeles cuadrados (evita distorsión)
-crf 20Nivel de calidad — menor = mejor calidad, archivo más grande. 18–23 es el rango práctico
-preset slowMejor compresión a cambio de más tiempo de codificación
-profile:v high -level 4.2Máxima compatibilidad H.264 entre dispositivos
-pix_fmt yuv420pNecesario para compatibilidad amplia con reproductores
-movflags +faststartMueve el átomo moov al inicio — esencial para reproducción web

Ajustar CRF por plataforma

El valor -crf controla el balance calidad-tamaño:

bash
# YouTube Shorts — mayor calidad (YouTube recodifica, así que entrega material limpio)
-crf 18

# Instagram Reels / TikTok — equilibrado (las plataformas comprimen de todos modos)
-crf 22

# X — priorizar tamaño de archivo (límite de 512 MB)
-crf 23

Tres formas de convertir 16:9 a 9:16

El preset universal usa relleno (barras negras), pero no siempre es lo ideal. A veces quieres recortar la acción o agregar un fondo borroso para un look más profesional.

Método 1: Relleno (barras negras)

Ideal para: tutoriales, grabaciones de pantalla y videos donde todo el contenido importa.

bash
ffmpeg -i input_16x9.mp4 \
  -vf "scale=1080:-2:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black" \
  -c:v libx264 -crf 20 -preset slow -pix_fmt yuv420p \
  -c:a aac -b:a 128k -movflags +faststart \
  output_relleno.mp4

El video queda centrado con barras negras arriba y abajo. Limpio y simple, pero desperdicia ~43% de la pantalla en un video 16:9.

Método 2: Recorte (corte central)

Ideal para: contenido de acción, paisajes o cuando el sujeto está centrado.

bash
ffmpeg -i input_16x9.mp4 \
  -vf "scale=-2:1920,crop=1080:1920" \
  -c:v libx264 -crf 20 -preset slow -pix_fmt yuv420p \
  -c:a aac -b:a 128k -movflags +faststart \
  output_recortado.mp4

Escala la altura a 1920 y recorta el ancho a 1080 desde el centro. Pierdes los bordes laterales — aproximadamente un 43% del cuadro original.

Para recortar desde una posición específica:

bash
# Recortar desde el tercio izquierdo (sujeto a la izquierda)
-vf "scale=-2:1920,crop=1080:1920:0:0"

# Recortar desde el tercio derecho
-vf "scale=-2:1920,crop=1080:1920:iw-1080:0"

Método 3: Fondo borroso (look profesional)

Ideal para: reutilizar videos de YouTube como Shorts/Reels. Es la técnica que usan la mayoría de los creadores — el video original se reproduce en el centro mientras una versión ampliada y borrosa llena el fondo.

bash
ffmpeg -i input_16x9.mp4 -filter_complex \
  "[0:v]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,boxblur=20:5[bg]; \
   [0:v]scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:color=0x00000000[fg]; \
   [bg][fg]overlay=0:0,format=yuv420p" \
  -c:v libx264 -crf 20 -preset slow \
  -c:a aac -b:a 128k -movflags +faststart \
  output_fondo_borroso.mp4

Cómo funciona la cadena de filtros:

  1. [bg]: Escala la entrada para cubrir 1080×1920, recorta para ajustar, aplica desenfoque gaussiano
  2. [fg]: Escala la entrada para caber en 1080×1920, rellena con píxeles transparentes
  3. overlay: Superpone el primer plano nítido sobre el fondo borroso

¿Qué método elegir?

MétodoVentajasDesventajasIdeal para
RellenoSin pérdida de contenido, rápidoEspacio desperdiciado, se ve básicoTutoriales, screencasts
RecorteLlena la pantalla, alto impactoPierde contenido lateralAcción, sujetos centrados
Fondo borrosoLook profesional, sin pérdidaCodificación más lenta, archivo más grandeReutilización de YouTube

Texto superpuesto y subtítulos quemados

Los videos verticales para redes sociales casi siempre necesitan texto — ya sea un título, un llamado a la acción o subtítulos completos. FFmpeg maneja tanto texto estático como quemado de subtítulos.

Texto estático con drawtext

bash
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black, \
       drawtext=text='Suscríbete':fontsize=48:fontcolor=white:x=(w-text_w)/2:y=h-100: \
       box=1:boxcolor=black@0.6:boxborderw=10" \
  -c:v libx264 -crf 20 -preset slow -pix_fmt yuv420p \
  -c:a aac -b:a 128k -movflags +faststart \
  output_texto.mp4

Parámetros principales de drawtext:

ParámetroDescripción
textEl texto a mostrar
fontsizeTamaño en píxeles (48–72 funciona bien para 1080p vertical)
fontcolorColor del texto (white, yellow, #FF5733)
x, yPosición — (w-text_w)/2 centra horizontalmente
box=1Activa el cuadro de fondo
boxcolor=black@0.6Fondo negro semitransparente
fontfileRuta a un archivo .ttf para fuentes personalizadas
enable='between(t,2,8)'Mostrar solo entre los segundos 2 y 8

Quemar subtítulos SRT

Los subtítulos quemados (hardcoded) son el estándar en redes sociales — la mayoría de los usuarios ven videos sin sonido, y los subtítulos automáticos de las plataformas suelen ser imprecisos.

bash
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black, \
       subtitles=subtitulos.srt:force_style='FontSize=20,FontName=Arial,PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,Outline=2,MarginV=60'" \
  -c:v libx264 -crf 20 -preset slow -pix_fmt yuv420p \
  -c:a aac -b:a 128k -movflags +faststart \
  output_subtitulado.mp4

El parámetro force_style usa la sintaxis de estilo ASS. Opciones clave:

  • FontSize=20 — tamaño en el sistema de coordenadas ASS (diferente del tamaño en píxeles de drawtext)
  • PrimaryColour=&H00FFFFFF — texto blanco (formato: &HAABBGGRR)
  • OutlineColour=&H00000000 — contorno negro
  • Outline=2 — grosor del contorno
  • MarginV=60 — margen desde abajo (mantiene los subtítulos por encima de los elementos de UI)

Subtítulos ASS para estilos avanzados

Para resaltado palabra por palabra (estilo karaoke) o posicionamiento preciso, usa el formato ASS:

bash
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black, \
       ass=subtitulos_estilizados.ass" \
  -c:v libx264 -crf 20 -preset slow -pix_fmt yuv420p \
  -c:a aac -b:a 128k -movflags +faststart \
  output_ass.mp4

Para generar subtítulos automáticamente desde el audio, consulta FFmpeg + Whisper: Generación automática de subtítulos.

Ajustes específicos por plataforma

El preset universal cubre el 90% de los casos, pero a veces necesitas optimizar para una plataforma específica.

YouTube Shorts

YouTube conserva mejor la calidad original cuando subes con bitrate alto, ya que almacena múltiples niveles de calidad.

bash
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,setsar=1" \
  -c:v libx264 -crf 18 -preset slow -profile:v high -level 4.2 \
  -pix_fmt yuv420p -r 60 \
  -c:a aac -b:a 192k -ar 48000 -ac 2 \
  -movflags +faststart \
  -t 180 \
  output_shorts.mp4

Diferencias con el preset universal:

  • -crf 18 — mayor calidad (YouTube recodifica, así que entrega material limpio)
  • -r 60 — 60 fps para reproducción más fluida
  • -b:a 192k -ar 48000 — audio de mayor calidad
  • -t 180 — límite duro de 3 minutos (duración máxima de Shorts)

Instagram Reels

Los servidores de Meta recodifican agresivamente, así que no tiene sentido subir un archivo enorme. Optimiza para un archivo pequeño y limpio.

bash
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,setsar=1" \
  -c:v libx264 -crf 22 -preset slow -profile:v high -level 4.0 \
  -pix_fmt yuv420p -r 30 \
  -c:a aac -b:a 128k -ar 44100 -ac 2 \
  -movflags +faststart \
  -t 90 \
  output_reels.mp4
  • -crf 22 — un poco más de compresión (Meta recodifica de todas formas)
  • -t 90 — Instagram recomienda mantener los Reels bajo 90 segundos para mayor alcance

TikTok

El algoritmo de TikTok favorece videos de 21 a 34 segundos. Mantén los archivos pequeños para un procesamiento de subida más rápido.

bash
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,setsar=1" \
  -c:v libx264 -crf 23 -preset slow -profile:v high -level 4.0 \
  -maxrate 4M -bufsize 8M \
  -pix_fmt yuv420p -r 30 \
  -c:a aac -b:a 128k -ar 44100 -ac 2 \
  -movflags +faststart \
  output_tiktok.mp4
  • -maxrate 4M -bufsize 8M — limita el bitrate para controlar el tamaño del archivo
  • -crf 23 — balance orientado al tamaño

X (Twitter)

X tiene los límites más estrictos para usuarios gratuitos — 512 MB de tamaño y 2 minutos 20 segundos de duración.

bash
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,setsar=1" \
  -c:v libx264 -crf 23 -preset slow -profile:v high -level 4.0 \
  -maxrate 5M -bufsize 10M \
  -pix_fmt yuv420p -r 30 \
  -c:a aac -b:a 128k -ar 44100 -ac 2 \
  -movflags +faststart \
  -t 140 \
  output_x.mp4
  • -t 140 — corte duro a 2 minutos 20 segundos
  • -maxrate 5M — evita picos de bitrate que podrían superar los 512 MB

Procesamiento por lotes

Cuando tienes decenas de videos para convertir, un script de shell te ahorra horas.

Convertir todos los videos de una carpeta

bash
#!/bin/bash
# batch-vertical.sh — Convierte todos los MP4 a formato vertical 9:16
INPUT_DIR="$1"
OUTPUT_DIR="$2"
METHOD="${3:-pad}"  # pad, crop, blur

mkdir -p "$OUTPUT_DIR"

for f in "$INPUT_DIR"/*.mp4; do
  filename=$(basename "$f" .mp4)
  echo "Procesando: $filename"

  case "$METHOD" in
    pad)
      VF="scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,setsar=1"
      ;;
    crop)
      VF="scale=-2:1920,crop=1080:1920,setsar=1"
      ;;
    blur)
      ffmpeg -i "$f" -filter_complex \
        "[0:v]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,boxblur=20:5[bg]; \
         [0:v]scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:color=0x00000000[fg]; \
         [bg][fg]overlay=0:0,format=yuv420p" \
        -c:v libx264 -crf 20 -preset slow \
        -c:a aac -b:a 128k -movflags +faststart \
        -y "$OUTPUT_DIR/${filename}_vertical.mp4"
      continue
      ;;
  esac

  ffmpeg -i "$f" \
    -vf "$VF" \
    -c:v libx264 -crf 20 -preset slow -pix_fmt yuv420p \
    -c:a aac -b:a 128k -movflags +faststart \
    -y "$OUTPUT_DIR/${filename}_vertical.mp4"
done

echo "Listo. Archivos de salida en $OUTPUT_DIR"

Uso:

bash
chmod +x batch-vertical.sh
./batch-vertical.sh ./videos_raw ./salida_vertical pad
./batch-vertical.sh ./videos_raw ./salida_vertical blur

Procesamiento paralelo para mayor velocidad

El script anterior procesa un video a la vez. Para lotes grandes, usa xargs para codificar varios archivos simultáneamente:

bash
# Procesar 4 videos en paralelo
ls videos_raw/*.mp4 | xargs -P 4 -I {} bash -c '
  filename=$(basename "{}" .mp4)
  ffmpeg -i "{}" \
    -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,setsar=1" \
    -c:v libx264 -crf 20 -preset slow -pix_fmt yuv420p \
    -c:a aac -b:a 128k -movflags +faststart \
    -y "salida_vertical/${filename}_vertical.mp4"
'

Para automatización más avanzada (Python, seguimiento de progreso, manejo de errores), consulta Automatización de FFmpeg con Python.

Preguntas frecuentes (FAQ)

¿Cuál es la mejor relación de aspecto para Shorts, Reels y TikTok?

9:16 (1080×1920) para todas. El formato cuadrado (1:1) también funciona, pero ocupa menos espacio en pantalla y obtiene menor engagement en plataformas que priorizan contenido vertical a pantalla completa.

¿Puedo subir video vertical en 4K (2160×3840)?

YouTube Shorts soporta hasta 4K. Instagram y TikTok recodifican a 1080p de todos modos, así que subir 4K a esas plataformas solo desperdicia tiempo de subida y ancho de banda. Quédate con 1080×1920.

¿Cómo convierto un video cuadrado (1:1) a 9:16?

El mismo enfoque que con 16:9 — relleno, recorte o fondo borroso:

bash
# Video cuadrado a 9:16 con relleno
ffmpeg -i cuadrado.mp4 \
  -vf "scale=1080:-2:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black" \
  -c:v libx264 -crf 20 -pix_fmt yuv420p -c:a copy \
  output_vertical.mp4

¿Debería usar H.265 (HEVC) en lugar de H.264?

No, al menos no para subir a redes sociales. Todas las plataformas recodifican tu subida a su propio formato (generalmente VP9 o AV1 internamente). H.264 tiene compatibilidad universal de subida, mientras que HEVC puede causar errores de procesamiento en algunas plataformas. Para archivar tus masters, H.265 o AV1 ofrecen mejor compresión — consulta Comparación AV1 vs H.265 vs H.264.

¿Cómo recorto un video a una duración específica antes de convertir?

Usa -ss (tiempo de inicio) y -t (duración) o -to (tiempo final):

bash
# Extraer 30 segundos a partir de 1:15
ffmpeg -ss 01:15 -i input.mp4 -t 30 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black" \
  -c:v libx264 -crf 20 -pix_fmt yuv420p -c:a aac -b:a 128k \
  -movflags +faststart output_clip.mp4

Coloca -ss antes de -i para búsqueda rápida (input seeking), o después de -i para búsqueda precisa por fotograma (más lenta). Para más detalles, consulta la Guía de uso de FFmpeg.

¿Cómo puedo acelerar la codificación con GPU?

Reemplaza libx264 con un codificador por hardware:

bash
# NVIDIA NVENC
-c:v h264_nvenc -preset p4 -cq 22

# Intel Quick Sync
-c:v h264_qsv -global_quality 22

# Apple VideoToolbox (macOS)
-c:v h264_videotoolbox -q:v 60

La codificación por GPU es 3–10× más rápida pero produce archivos ligeramente más grandes a la misma calidad visual. Consulta la Guía de codificación GPU con FFmpeg para instrucciones de configuración.

¿Necesito normalizar el audio antes de subir a redes sociales?

Es muy recomendable. Las plataformas aplican su propia normalización de sonoridad (típicamente alrededor de -14 LUFS), y si tu audio es demasiado bajo o alto, el resultado puede sonar comprimido o distorsionado. Pre-normalizar te da control sobre el sonido final. Consulta la Guía de normalización de audio con FFmpeg para más detalles.

¿Cuál es la duración ideal de video para cada plataforma?

Depende del tipo de contenido y la audiencia, pero estos son los rangos que los algoritmos tienden a favorecer:

PlataformaPunto óptimoDuración máx.
YouTube Shorts30–60s3 min
Instagram Reels15–30s20 min
TikTok21–34s60 min (subida)
X15–45s2 min 20s (gratis) / 4 h (Premium)
Facebook Reels15–30sSin límite (≤90s recomendado)

Conclusión

Convertir video para redes sociales con FFmpeg se reduce a tres cosas: la resolución correcta (1080×1920), el códec correcto (H.264 + AAC en MP4) y el método de conversión adecuado para tu contenido (recorte, relleno o fondo borroso).

El preset universal al inicio de este artículo cubre la mayoría de los casos. Si necesitas procesar un catálogo, el script por lotes escala a cientos de archivos. Y si tu flujo de trabajo incluye normalización de audio o generación de subtítulos, combínalo con las herramientas de la guía de loudnorm y la guía de subtítulos con Whisper.

Para una referencia completa de comandos FFmpeg más allá de la conversión para redes sociales, consulta la Guía de uso de FFmpeg.