Resumen de entradas
input_0.mp4tiene el flujo de video deseado y input_1.mp4tiene el flujo de audio deseado:

En ffmpeglas corrientes se ve así:
$ ffmpeg -i input_0.mp4 -i input_1.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input_0.mp4':
  Duration: 00:01:48.50, start: 0.000000, bitrate: 4144 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 4014 kb/s, SAR 115:87 DAR 1840:783, 23.98 fps, 23.98 tbr, 16k tbn, 47.95 tbc (default)
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 124 kb/s (default)
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'input_1.mp4':
  Duration: 00:00:30.05, start: 0.000000, bitrate: 1754 kb/s
    Stream #1:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 720x480 [SAR 8:9 DAR 4:3], 1687 kb/s, 59.94 fps, 59.94 tbr, 60k tbn, 119.88 tbc (default)
    Stream #1:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 55 kb/s (default)
Números de identificación
ffmpegse refiere a archivos de entrada y flujos con números de índice. El formato es input_file_id:input_stream_id. Dado que ffmpegcomienza a contar desde 0, la transmisión se 1:1refiere al audio de input_1.mp4.
Especificadores de flujo
Esto se puede mejorar con especificadores de flujo . Por ejemplo, puede decir ffmpegque desea el primer flujo de video de la primera entrada ( 0:v:0) y el primer flujo de audio de la segunda entrada ( 1:a:0). Prefiero este método porque es más eficiente. Además, es menos propenso a mapeo accidental porque 1:1puede referirse a cualquier tipo de flujo, mientras que 2:v:3solo se refiere al cuarto flujo de video del tercer archivo de entrada.
Ejemplos
La -mapopción indica ffmpegqué transmisiones desea. Para copiar el video input_0.mp4y el audio de input_1.mp4:
$ ffmpeg -i input_0.mp4 -i input_1.mp4 -c copy -map 0:0 -map 1:1 -shortest out.mp4
Este siguiente ejemplo hará lo mismo:
$ ffmpeg -i input_0.mp4 -i input_1.mp4 -c copy -map 0:v:0 -map 1:a:0 -shortest out.mp4
-map 0:v:0se puede traducir como: desde la primera entrada ( 0), seleccione el tipo de flujo de video ( v), primer flujo de video ( 0)
 
-map 1:a:0se puede traducir como: desde la segunda entrada ( 1), seleccione el tipo de flujo de audio ( a), primer flujo de audio ( 0)
 
Notas adicionales
Con -c copylas transmisiones, la transmisión se copiará , no se volverá a codificar, por lo que no habrá pérdida de calidad. Si desea volver a codificar, consulte FFmpeg Wiki: Guía de codificación H.264 .
 
La -shortestopción hará que la duración de la salida coincida con la duración del flujo de entrada más corto.
 
Consulte la -mapdocumentación de la opción para obtener más información.
 
     
                
-map 1:0haría referencia al video deinput_1.mp4, no al audio. El ejemplo debería obtener el audio, por lo que tiene que serlo-map 1:1o-map 1:a:0que en este caso da como resultado la transmisión de audio deseada. Consulte la imagen en la respuesta para obtener una representación visual.Tengo un nuevo comando para fusionar audio con video
fuente
-vcodecha existido desde siempre. Es lo mismo que los alias más nuevos-codec:vy-c:v.ffmpeg -i 1.mp4 -i 0.wav -map 0 -map 1 -codec copy -shortest new.mp4el comando pero no funcionó-vcodec copypara evitar la re-codificar el vídeoComo respuesta complementaria específica de MKV:
MKVToolnix puede hacer eso. Prefiero la GUI.
Una vez que se haya agregado el primer video, agregue el segundo ("Agregar archivos de origen"), luego mantenga seleccionadas solo las transmisiones deseadas y presione "Iniciar multiplexación".
fuente