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:
|
|
Sintaxis básica de -map
Patrón más común:
|
|
Ejemplos:
0:v: todas las transmisiones de video desde la primera entrada0:a:0: la primera secuencia de audio desde la primera entrada1:s:1: la segunda secuencia de subtítulos desde la segunda entrada
Notas:
input_indexcomienza desde0, según el orden-istream_indextambién comienza desde0
Ejemplos prácticos
1) Vídeo de A, audio de B
|
|
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
|
|
Significado:
-map 0mantiene 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:
|
|
2) Mapeo opcional: no falle cuando falte una transmisión
Si es posible que algunos archivos no tengan subtítulos, utilice ?:
|
|
0:s? significa: subtítulos del mapa si están presentes; de lo contrario, salte sin error.
Errores comunes
- Una vez que usa
-map, FFmpeg detiene la selección automática de secuencias, por lo que debe mapear todo lo que necesita. -c copysolo remuxes sin transcodificación. Si el contenedor de destino no admite un códec, igualmente falla.- Con múltiples entradas, los errores de índice son comunes. Los índices de entrada están determinados únicamente por el orden “-i”.
- Para scripts robustos, inspeccione primero con
ffprobey luego genere-mapdiná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.