Puedes recortar cualquier video sin recodificar usando ffmpeg -ss <inicio> -to <fin> -i input.mp4 -c copy output.mp4. El flag -c copy le dice a FFmpeg que copie los datos codificados directamente en un nuevo contenedor — sin decodificar, sin codificar, sin pérdida de calidad. Un archivo 4K de 10 GB se recorta en menos de 3 segundos.
Abrir Premiere Pro o DaVinci Resolve para recortar un clip es excesivo en la mayoría de las situaciones. Si lo único que necesitas es cortar una sección de un video — sin efectos, sin corrección de color, solo un clip — el modo de copia de flujo de FFmpeg completa el trabajo en segundos con cero pérdida de calidad. Si lo único que necesitas es extraer clips de grabaciones de conferencias o material en bruto, este comando es todo lo que necesitas.
ffmpeg -y -ss 00:01:30 -to 00:05:30 -i "input.mp4" -c copy "output.mp4"
Este único comando extrae todo desde 1:30 hasta 5:30, copia los datos codificados tal cual en un nuevo archivo, y termina antes de que un editor GUI hubiera siquiera terminado de cargar.
Los comandos
Windows (PowerShell)
# Definir variables
$InputVideo = "input.mp4"
$OutputVideo = "output_cut.mp4"
$StartTime = "00:01:30" # HH:MM:SS
$EndTime = "00:01:40"
# -ss : Buscar posición de inicio
# -to : Establecer tiempo final (-t especificaría duración en su lugar)
# -c copy : Copiar flujos sin recodificar
ffmpeg -y -ss $StartTime -to $EndTime -i "$InputVideo" -c copy "$OutputVideo"
macOS / Linux (Bash)
#!/bin/bash
INPUT="input.mp4"
OUTPUT="output_cut.mp4"
START="00:01:30"
END="00:01:40"
# Colocar -ss antes de -i para búsqueda de entrada (rápido)
ffmpeg -y -ss "$START" -to "$END" -i "$INPUT" -c copy "$OUTPUT"
Cómo funciona la copia de flujo
La opción clave es -c copy (equivalente a -c:v copy -c:a copy). Entender lo que realmente hace explica tanto su poder como sus limitaciones.
Omitir el ciclo de decodificación/codificación
Un flujo de trabajo normal de edición de video se ve así:
- Decodificar el video comprimido en fotogramas sin procesar (lento, con pérdida en los bordes)
- Procesar los fotogramas (recortar, corregir color, etc.)
- Recodificar los fotogramas procesados en video comprimido (lento, introduce pérdida generacional)
La copia de flujo omite los pasos 1 y 3 completamente. FFmpeg lee los paquetes codificados del contenedor fuente (MP4, MKV, etc.) y los escribe directamente en el contenedor de salida sin tocar los datos. La carga computacional es esencialmente solo E/S de disco.
Comparación práctica de velocidad:
Para un video 4K de 10 GB, cortando un clip de 10 segundos:
- Con recodificación (
-c:v libx264): varios minutos - Con copia de flujo (
-c copy): 1–3 segundos
Búsqueda de entrada: por qué -ss va antes de -i
La posición de -ss en el comando importa significativamente.
- Antes de
-i(búsqueda de entrada): El demuxer salta a la posición especificada en el archivo antes de que comience la decodificación. No se procesan datos antes del punto de búsqueda. Esto es rápido — esencialmente O(1) para la mayoría de los formatos de contenedor. Los detalles están documentados en la wiki oficial de FFmpeg Seeking. - Después de
-i(búsqueda de salida): FFmpeg decodifica desde el inicio hasta llegar al tiempo especificado, luego comienza a copiar. Correcto pero lento, y produce resultados inestables con-c copy.
Para recorte sin pérdida, siempre pon -ss antes de -i.
La restricción de keyframe
El recorte sin pérdida tiene una limitación técnica inevitable: el punto de corte se ajusta al keyframe más cercano.
Los códecs modernos (H.264, H.265, AV1) comprimen video usando una estructura llamada GOP (Group of Pictures). Un GOP comienza con un I-frame (keyframe) que contiene datos de imagen completos, seguido de P-frames y B-frames que almacenan solo la diferencia con respecto a los fotogramas circundantes.
Cuando usas -c copy, FFmpeg no puede iniciar la reproducción a mitad de un GOP porque los P/B frames necesitan su I-frame de referencia para decodificarse. Así que si especificas 00:01:30 como tiempo de inicio, FFmpeg retrocede automáticamente al I-frame más cercano antes de ese punto — que podría ser 00:01:27, 00:01:25, o más atrás dependiendo de la estructura del GOP.
El resultado: el punto de corte puede diferir unos segundos (hasta la longitud del GOP) de lo que especificaste.
Implicación práctica: El corte sin pérdida es ideal para recortes "aproximadamente aquí" — grabaciones de conferencias, material de larga duración, clips de podcast. No es adecuado para trabajo editorial con precisión de fotograma. Para cortes precisos, necesitas recodificar.
Solución de problemas
El video de salida comienza con un fotograma negro o congelado
Esto suele ser un problema de compatibilidad del reproductor. Algunos reproductores tienen dificultades cuando el flujo de video comienza con un P-frame en lugar de un I-frame. Añadir -avoid_negative_ts make_zero generalmente lo soluciona:
ffmpeg -ss 00:01:30 -to 00:05:30 -i input.mp4 \
-c copy \
-avoid_negative_ts make_zero \
output.mp4
El audio y el video están desincronizados
La copia de flujo preserva las marcas de tiempo originales, lo que puede causar ligeros desfases A/V en los puntos de corte — generalmente porque el keyframe de audio y el de video más cercanos no caen en la misma marca de tiempo. Dos enfoques:
- Resetear marcas de tiempo (generalmente suficiente):
ffmpeg -ss 00:01:30 -to 00:05:30 -i input.mp4 \
-c copy \
-avoid_negative_ts make_zero \
output.mp4
- Recodificar solo el audio (preserva la calidad del video, corrige la sincronización con precisión):
ffmpeg -ss 00:01:30 -to 00:05:30 -i input.mp4 \
-c:v copy \
-c:a aac -b:a 192k \
output.mp4
La recodificación de audio es rápida (segundos, incluso para clips largos) porque los datos de audio son diminutos comparados con el video.
El clip necesita empezar exactamente en el fotograma correcto
Si necesitas precisión a nivel de fotograma, la copia de flujo no funcionará. Usa recodificación con un preset rápido:
# Recodificar video, copiar audio
ffmpeg -ss 00:01:30 -to 00:05:30 -i input.mp4 \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output.mp4
Esto es más lento pero comienza exactamente donde especificas.
-t vs -to: ¿cuál es la diferencia?
-t 60— cortar 60 segundos de duración desde el punto de inicio-to 00:05:30— cortar hasta la marca de tiempo 5:30 en el archivo fuente
Para casos de uso "cortar de X a Y", -to es más intuitivo. Para "cortar X segundos a partir de aquí", usa -t.
Nota: Cuando -ss se coloca antes de -i (búsqueda de entrada), -to se refiere a la marca de tiempo absoluta del archivo de entrada, no a una duración desde el punto de búsqueda. Por ejemplo, -ss 00:01:30 -to 00:05:30 extrae de 1:30 a 5:30 en el archivo original — no 4 minutos a partir de 1:30.
Recorte por lotes
Bash: Procesar una lista de clips desde un archivo CSV
Crea clips.csv:
input,start,end,output
video1.mp4,00:01:30,00:05:00,clip1.mp4
video2.mp4,00:00:10,00:02:30,clip2.mp4
video3.mp4,00:10:00,00:15:45,clip3.mp4
Luego procésalo:
#!/bin/bash
tail -n +2 clips.csv | while IFS=',' read -r input start end output; do
ffmpeg -y -ss "$start" -to "$end" -i "$input" -c copy "$output"
echo "Hecho: $output"
done
PowerShell: Recorte por lotes con reporte de progreso
$clips = Import-Csv -Path "clips.csv"
$total = $clips.Count
$i = 0
foreach ($clip in $clips) {
$i++
Write-Progress -Activity "Recortando clips" `
-Status "$($clip.output) ($i/$total)" `
-PercentComplete (($i / $total) * 100)
ffmpeg -y -ss $clip.start -to $clip.end `
-i $clip.input `
-c copy `
$clip.output 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Host "OK: $($clip.output)"
} else {
Write-Host "FALLO: $($clip.output)" -ForegroundColor Red
}
}
Alternativa GUI: LosslessCut
Si prefieres una interfaz visual, LosslessCut es una herramienta GUI de código abierto que hace exactamente lo que describe este artículo — recorte sin pérdida mediante el modo de copia de flujo de FFmpeg. Muestra las posiciones de los keyframes en una línea de tiempo para que puedas ver dónde caerán realmente tus cortes. Consulta nuestra Comparación de Alternativas GUI para FFmpeg para un análisis completo.
Artículos relacionados
- Guía de Compresión de Video con FFmpeg — Después de un corte sin pérdida, elige el códec y la configuración CRF correctos para una compresión óptima
- Tutorial de Uso de FFmpeg — Los comandos fundamentales de FFmpeg que todo desarrollador debería conocer
- Comparación H.264 vs H.265 vs AV1 — Entiende los códecs que determinan la estructura GOP y los intervalos de keyframes
- Automatización por Lotes con FFmpeg y Python — Escala el recorte por lotes con Python para flujos de trabajo más complejos
- Codificación GPU con NVENC y QSV — Cuando necesitas recodificar para cortes precisos, la aceleración GPU puede acelerar drásticamente el proceso
- Extraer el Último Fotograma de un Video — Otra operación a nivel de contenedor que se beneficia de entender la copia de flujo
Preguntas frecuentes
¿-c copy funciona con todos los formatos de video?
Funciona con cualquier formato que FFmpeg pueda demuxar y muxar — MP4, MKV, MOV, AVI, WebM, TS, y más. El códec interno no importa ya que no estás decodificando. El único requisito es que el contenedor de salida soporte el códec de entrada (por ejemplo, VP9 puede ir en MKV o WebM pero no en MP4).
¿Cómo encuentro las posiciones de los keyframes en un video?
Usa ffprobe -select_streams v -show_frames -show_entries frame=pkt_pts_time,key_frame -of csv input.mp4 | grep ",1$" para listar todas las marcas de tiempo de keyframes. Esto te ayuda a elegir puntos de corte alineados con keyframes para resultados predecibles.
¿Puedo recortar múltiples segmentos del mismo video en un solo comando?
No directamente con -c copy. Necesitas ejecutar comandos FFmpeg separados para cada segmento y luego concatenar. Crea un archivo de lista y usa ffmpeg -f concat -safe 0 -i list.txt -c copy merged.mp4. Consulta nuestra guía de automatización por lotes para más detalles.
¿-c copy preserva subtítulos y metadatos?
Sí — -c copy copia todos los flujos por defecto, incluyendo subtítulos (si el contenedor de salida los soporta) y metadatos. Para incluir explícitamente todos los flujos, agrega -map 0 al comando.
¿Qué pasa si mi video tiene tasa de fotogramas variable (VFR)?
La copia de flujo maneja VFR sin problemas porque no toca las marcas de tiempo. Los problemas con VFR típicamente surgen durante la recodificación, no con la copia de flujo. El comportamiento de ajuste a keyframes es el mismo independientemente de la variabilidad de la tasa de fotogramas.
¿Hay un límite máximo de tamaño de archivo o duración?
No hay un límite práctico del lado de FFmpeg. He recortado archivos ProRes de más de 50 GB y grabaciones de varias horas sin problemas. La operación está limitada por la velocidad de E/S del disco, no por la memoria o la CPU.
¿Qué tan preciso es el punto final con -c copy?
El punto final (-to o -t) también se ajusta al keyframe más cercano, pero se ajusta hacia adelante — FFmpeg incluye el GOP completo que contiene la marca de tiempo final. El desfase del punto final es típicamente menor que el del punto de inicio.
¿Puedo previsualizar el corte antes de ejecutarlo?
Usa ffplay -ss 00:01:30 -t 10 input.mp4 para previsualizar rápidamente 10 segundos desde el punto de inicio. Para una vista previa basada en GUI, LosslessCut muestra los límites de keyframes visualmente.
Conclusión
El recorte sin pérdida de FFmpeg es la herramienta correcta cuando:
| Situación | Enfoque recomendado |
|---|---|
| Cortes aproximados donde ±5 segundos es aceptable | -c copy (el método de este artículo) |
| Cortes de precisión a nivel de fotograma | Recodificar con -c:v libx264 -preset fast |
| Recorte por lotes de muchos archivos | Script + -c copy |
| Extraer clips de grabaciones de conferencias | -c copy |
| Preparar clips para redes sociales | -c copy (las plataformas recodifican de todos modos) |
Cortar charlas de conferencias, extraer clips destacados, segmentar material para redes sociales — con -c copy, todo el flujo de trabajo toma menos de un minuto para lo que antes requería cargar un NLE completo. La copia de flujo trata el video como un flujo de paquetes de datos en lugar de píxeles. Esa abstracción es lo que lo hace tan rápido y sin pérdida — y una vez que la internalizas, se abre toda una categoría de operaciones de FFmpeg que operan a nivel de contenedor en lugar de a nivel de códec.
Para la documentación completa de FFmpeg sobre el comportamiento de búsqueda, consulta la documentación oficial de FFmpeg y la página wiki de Seeking.