Resumen de entradas
input_0.mp4
tiene el flujo de video deseado y input_1.mp4
tiene el flujo de audio deseado:
En ffmpeg
las 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
ffmpeg
se refiere a archivos de entrada y flujos con números de índice. El formato es input_file_id:input_stream_id
. Dado que ffmpeg
comienza a contar desde 0, la transmisión se 1:1
refiere al audio de input_1.mp4
.
Especificadores de flujo
Esto se puede mejorar con especificadores de flujo . Por ejemplo, puede decir ffmpeg
que 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:1
puede referirse a cualquier tipo de flujo, mientras que 2:v:3
solo se refiere al cuarto flujo de video del tercer archivo de entrada.
Ejemplos
La -map
opción indica ffmpeg
qué transmisiones desea. Para copiar el video input_0.mp4
y 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:0
se puede traducir como: desde la primera entrada ( 0
), seleccione el tipo de flujo de video ( v
), primer flujo de video ( 0
)
-map 1:a:0
se 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 copy
las 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 -shortest
opción hará que la duración de la salida coincida con la duración del flujo de entrada más corto.
Consulte la -map
documentación de la opción para obtener más información.
-map 1:0
harí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:1
o-map 1:a:0
que 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
-vcodec
ha existido desde siempre. Es lo mismo que los alias más nuevos-codec:v
y-c:v
.ffmpeg -i 1.mp4 -i 0.wav -map 0 -map 1 -codec copy -shortest new.mp4
el comando pero no funcionó-vcodec copy
para 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