Introducción
El parámetro -map en la línea de comandos de FFmpeg especifica qué flujo de entrada se debe incluir en la salida. Permite elegir múltiples pistas de audio y video de las fuentes de entrada. Sin este parámetro, FFmpeg selecciona por defecto un flujo de video y uno de audio de la más alta calidad disponible, descartando los demás.
El orden de los flujos en el archivo de salida depende de la secuencia en que se indiquen los argumentos -map en el comendo.
Comportamiento predeterminado
Al omitir -map, FFmpeg identifica automáticamente el flujo de video de mayor calidad y el de audio superior entre todas las entradas, y los transmite al destino. Por ejemplo:
ffmpeg -i entrada.ts -c copy -f mpegts "udp://192.168.1.200:1234?pkt_size=1316"
Este comando sería equivalente a:
ffmpeg -i entrada.ts \
-map 0:v:0 \
-map 0:a:0 \
-c copy -f mpegts "udp://192.168.1.200:1234?pkt_size=1316"
La salida contiene solo dos flujos: uno de video y otro de audio.
Seleccionando flujos específicos de una entrada
Considere un archivo entrada.ts con la siguiante estructura de flujos:
Input #0, mpegts, from 'entrada.ts':
Duration: 00:03:15.50, start: 1.000000, bitrate: 4800 kb/s
Stream #0:0[0x100]: Video: h264 (High), yuv420p, 1280x720, 30 fps
Stream #0:1[0x101](spa): Audio: aac (LC), 44100 Hz, stereo
Stream #0:2[0x102](eng): Audio: aac (LC), 44100 Hz, stereo
Stream #0:3[0x103]: Subtitle: mov_text
Caso 1: Extraer una pista de video y una de audio
Para seleccionar el flujo de video #0:0 y el segundo flujo de audio #0:2:
ffmpeg -i entrada.ts -map 0:0 -map 0:2 -c copy -f mpegts "udp://192.168.1.200:1234?pkt_size=1316"
Caso 2: Incluir un video y varias pistas de audio
Para conservar el video #0:0 y todos los flujos de audio (#0:1, #0:2):
ffmpeg -i entrada.ts -map 0:0 -map 0:a -c copy -f mpegts "udp://192.168.1.200:1234?pkt_size=1316"
Caso 3: Incorporar todos los flujos de audio y video
Usando marcadores de tipo para seleccionar todas las pistas de audio y video:
ffmpeg -i entrada.ts -map 0:v -map 0:a -c copy -f mpegts "udp://192.168.1.200:1234?pkt_size=1316"
Caso 4: Transmitir todos los flujos, incluidos subtítulos
Para copiar todos los flujos de la entrada sin discriminación:
ffmpeg -i entrada.ts -map 0 -c copy -f mpegts "udp://192.168.1.200:1234?pkt_size=1316"
Aplicando codificaciones diferentes a flujos múltiples
Es posible configurar códecs distintos para cada flujo seleccionado. En este ejemplo:
- El video
#0:0se copia directamente. - El primer audio
#0:1se copia sin cambios. - El segundo audio
#0:2se codifica a MP3 a 128 kbps. - Los subtítulos
#0:3se mantienen en su formato original.
ffmpeg -i entrada.ts -map 0:0 -map 0:1 -map 0:2 -map 0:3 \
-c:v copy \
-c:a:0 copy \
-c:a:1 libmp3lame -b:a:1 128k \
-c:s copy \
-f mpegts "udp://192.168.1.200:1234?pkt_size=1316"