Explicación de FFmpeg `-map`: seleccione con precisión transmisiones de video, audio y subtítulos

Una guía práctica para FFmpeg `-map`: denominación de flujos, composición de entradas múltiples, mapeo negativo y mapeo opcional.

En flujos de trabajo de múltiples audios y subtítulos, -map es una de las opciones más importantes y más frecuentemente mal utilizadas de FFmpeg.

Si no especifica explícitamente -map, FFmpeg selecciona automáticamente las transmisiones usando reglas predeterminadas y, a menudo, el resultado no es el esperado. Por ejemplo:

  • Los subtítulos desaparecen después de la exportación.
  • Se seleccionó la pista de idioma incorrecta
  • Se incluyen flujos de datos no deseados.

Este artículo utiliza escenarios comunes del mundo real para explicar cómo funciona “-map”.

Primero, comprenda qué es una “transmisión”

Un archivo contenedor (como mp4 o mkv) generalmente contiene múltiples secuencias, que incluyen:

  • Secuencias de vídeo (v)
  • Flujos de audio (a)
  • Secuencias de subtítulos (s)
  • Archivos adjuntos/flujos de datos (fuentes, portadas, capítulos, etc.)

Puedes inspeccionar transmisiones con ffprobe:

1
ffprobe -hide_banner input.mkv

Sintaxis básica de -map

Patrón más común:

1
-map input_index[:stream_type][:stream_index]

Ejemplos:

  • 0:v: todas las transmisiones de video desde la primera entrada
  • 0:a:0: la primera secuencia de audio desde la primera entrada
  • 1:s:1: la segunda secuencia de subtítulos desde la segunda entrada

Notas:

  • input_index comienza desde 0, según el orden -i
  • stream_index también comienza desde 0

Ejemplos prácticos

1) Vídeo de A, audio de B

1
2
3
4
ffmpeg -i english.mp4 -i french.mp3 \
  -map 0:v:0 -map 1:a:0 \
  -c:v copy -c:a aac \
  french.mp4

Significado:

  • Utilice la primera transmisión de video de english.mp4
  • Utilice la primera secuencia de audio de french.mp3
  • Fusionar en french.mp4

2) Mantenga todas las transmisiones desde la entrada 1, luego agregue una pista de audio más

1
2
3
4
ffmpeg -i english.mp4 -i french.mp3 \
  -map 0 -map 1:a:0 \
  -c copy \
  english-french.mp4

Significado:

  • -map 0 mantiene todas las transmisiones desde la primera entrada
  • Luego agregue la primera secuencia de audio de la segunda entrada.

Dos trucos avanzados útiles

1) Mapeo negativo: excluye transmisiones no deseadas

Por ejemplo, mantenga todo lo de la entrada 1 pero elimine su segunda secuencia de audio:

1
ffmpeg -i input.mkv -map 0 -map -0:a:1 -c copy output.mkv

2) Mapeo opcional: no falle cuando falte una transmisión

Si es posible que algunos archivos no tengan subtítulos, utilice ?:

1
ffmpeg -i input.mp4 -map 0:v -map 0:a -map 0:s? -c copy output.mp4

0:s? significa: subtítulos del mapa si están presentes; de lo contrario, salte sin error.

Errores comunes

  1. Una vez que usa -map, FFmpeg detiene la selección automática de secuencias, por lo que debe mapear todo lo que necesita.
  2. -c copy solo remuxes sin transcodificación. Si el contenedor de destino no admite un códec, igualmente falla.
  3. Con múltiples entradas, los errores de índice son comunes. Los índices de entrada están determinados únicamente por el orden “-i”.
  4. Para scripts robustos, inspeccione primero con ffprobe y luego genere -map dinámicamente.

Resumen

La idea central de -map es simple: decirle explícitamente a FFmpeg qué entrada usar, qué tipo de flujo elegir y qué índice de flujo seleccionar.

Una vez que domine esto, podrá manejar de manera confiable casos complejos como composición de múltiples audios, múltiples subtítulos y transmisiones entre archivos.

记录并分享
Creado con Hugo
Tema Stack diseñado por Jimmy