Parámetro -map en FFmpeg para seleccionar pistas de audio y video

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:0 se copia directamente.
  • El primer audio #0:1 se copia sin cambios.
  • El segundo audio #0:2 se codifica a MP3 a 128 kbps.
  • Los subtítulos #0:3 se 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"

Etiquetas: FFmpeg map-parameter audio-streams video-streams command-line-interface

Publicado el 6-22 00:50