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:
| Plataforma | Relación de aspecto | Resolución máx. | Códec | Duración máx. | Tamaño máx. |
|---|---|---|---|---|---|
| YouTube Shorts | 9:16 | 1080×1920 | H.264 + AAC | 3 min | 256 GB |
| Instagram Reels | 9:16 | 1080×1920 | H.264 + AAC | 20 min (90s recomendado) | 4 GB |
| TikTok | 9:16 | 1080×1920 | H.264 + AAC | Grabación 10 min / Subida 60 min | 72–500 MB |
| X (Twitter) | 9:16, 16:9, 1:1 | 1920×1080 | H.264 + AAC | 2 min 20s (gratis) / 4 h (Premium) | 512 MB (gratis) / 16 GB (Premium) |
| Facebook Reels | 9:16 | 1080×1920 | H.264 + AAC | Sin 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.
| Plataforma | Bitrate de video | Bitrate de audio | Notas |
|---|---|---|---|
| YouTube Shorts | 5–10 Mbps | 128 kbps | YouTube recomienda 8+ Mbps para 1080p |
| Instagram Reels | 3.5–5 Mbps | 128 kbps | Meta recodifica agresivamente |
| TikTok | 2–4 Mbps | 128 kbps | Optimizado para subida rápida |
| X | 2.5–5 Mbps | 128 kbps | 5 Mbps para 1080p, 2.5 Mbps para 720p |
| Facebook Reels | 4–6 Mbps | 128 kbps | Bitrate más alto para contenido con mucho texto |
El preset universal de FFmpeg
Este único comando produce un archivo compatible con todas las plataformas:
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:
| Flag | Función |
|---|---|
scale=1080:1920:force_original_aspect_ratio=decrease | Escala para que quepa en 1080×1920 manteniendo la proporción |
pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black | Rellena el espacio restante con barras negras |
setsar=1 | Garantiza píxeles cuadrados (evita distorsión) |
-crf 20 | Nivel de calidad — menor = mejor calidad, archivo más grande. 18–23 es el rango práctico |
-preset slow | Mejor compresión a cambio de más tiempo de codificación |
-profile:v high -level 4.2 | Máxima compatibilidad H.264 entre dispositivos |
-pix_fmt yuv420p | Necesario para compatibilidad amplia con reproductores |
-movflags +faststart | Mueve el átomo moov al inicio — esencial para reproducción web |
Ajustar CRF por plataforma
El valor -crf controla el balance calidad-tamaño:
# 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.
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.
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:
# 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.
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:
[bg]: Escala la entrada para cubrir 1080×1920, recorta para ajustar, aplica desenfoque gaussiano[fg]: Escala la entrada para caber en 1080×1920, rellena con píxeles transparentesoverlay: Superpone el primer plano nítido sobre el fondo borroso
¿Qué método elegir?
| Método | Ventajas | Desventajas | Ideal para |
|---|---|---|---|
| Relleno | Sin pérdida de contenido, rápido | Espacio desperdiciado, se ve básico | Tutoriales, screencasts |
| Recorte | Llena la pantalla, alto impacto | Pierde contenido lateral | Acción, sujetos centrados |
| Fondo borroso | Look profesional, sin pérdida | Codificación más lenta, archivo más grande | Reutilizació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
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ámetro | Descripción |
|---|---|
text | El texto a mostrar |
fontsize | Tamaño en píxeles (48–72 funciona bien para 1080p vertical) |
fontcolor | Color del texto (white, yellow, #FF5733) |
x, y | Posición — (w-text_w)/2 centra horizontalmente |
box=1 | Activa el cuadro de fondo |
boxcolor=black@0.6 | Fondo negro semitransparente |
fontfile | Ruta 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.
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 negroOutline=2— grosor del contornoMarginV=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:
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.
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.
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.
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.
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
#!/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:
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:
# 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:
# 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):
# 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:
# 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:
| Plataforma | Punto óptimo | Duración máx. |
|---|---|---|
| YouTube Shorts | 30–60s | 3 min |
| Instagram Reels | 15–30s | 20 min |
| TikTok | 21–34s | 60 min (subida) |
| X | 15–45s | 2 min 20s (gratis) / 4 h (Premium) |
| Facebook Reels | 15–30s | Sin 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.