¿Cómo reemplazar una secuencia de audio en un archivo de video con múltiples secuencias de audio?

19

Quiero reemplazar la segunda secuencia de audio (0: 2) en un archivo de video que tiene dos secuencias de audio y darle una etiqueta si es posible. ¿Cómo voy a hacer esto? Todos los comandos ffmpeg que encontré no me permiten mantener la segunda transmisión de audio.

Anónimo
fuente

Respuestas:

22

Use la -mapopción para elegir sus transmisiones. La selección de flujo predeterminada solo elegirá uno de cada tipo de flujo, por lo que es por eso -mapque debe usarse.

Reemplazar segundo flujo de audio

ingrese la descripción de la imagen aquí

ffmpeg -i video.mkv -i audio.mp3 -map 0:v -map 0:a:0 -map 1:a \
-metadata:s:a:0 language=eng -metadata:s:a:1 language=sme -codec copy \
-shortest output.mkv
  • 0:v- El se 0refiere a la primera entrada que es video.mkv. El vmedio "selecciona el tipo de transmisión de video".

  • 0:a:0- El se 0refiere a la primera entrada que es video.mkv. El amedio "selecciona el tipo de transmisión de audio". El último se 0refiere al primer flujo de audio de esta entrada. Si solo 0:ase usa, todas las transmisiones de video se asignarán.

  • 1:a- El se 1refiere a la segunda entrada que es audio.mp3. El amedio "selecciona el tipo de transmisión de audio".

  • -codec copyse Stream Copy (re-MUX) en lugar de codificar. Si necesita un códec de audio específico, debe especificar -c:v copy(para mantener el video) y luego, por ejemplo, -c:a libmp3lamevolver a codificar la transmisión de audio a MP3.

  • -shortest finalizará la salida cuando finalice la entrada más corta.

Combina dos transmisiones de audio en una

ingrese la descripción de la imagen aquí

ffmpeg -i vid.mkv -i aud.mp3 -filter_complex "[0:a][1:a]amerge=inputs=2[a]" \
-map 0:v -map "[a]" -c:v copy -c:a aac -strict experimental -b:a 192k -ac 2 \
-shortest out.mp4
  • El filtrado requiere una nueva codificación, y el amergefiltro se usa aquí, por lo que el audio no se puede copiar en este ejemplo.
lema
fuente
no funcionó para mí en absoluto.
Rudolf Olah
@omouse "no funcionó" es difícil de proporcionar ayuda. Debe usar un enlace pastebin para mostrar su comando y la salida completa de la consola.
llogan
Mi problema es el -codec copy, pero lo arreglé (versión diferente de ffmpeg), el otro problema que tuve fue con el -map, se quejó de la cantidad incorrecta de transmisiones.
Rudolf Olah
1
Acabo de usar -map 0:v -map 1:a. Supongo que esto significa tomar el video del primer archivo (video.mkv) y luego tomar el audio del segundo archivo (audio.mp4) para crear output.mkv ... No estoy seguro de para qué -map 0:a:0sirve. Lo excluí y obtengo los resultados que quería.
Dom
2
@ aaronk6 La pregunta original solicitó una forma de asignar múltiples transmisiones de audio a la salida. El ejemplo toma la primera secuencia de audio de la primera entrada y la (s) secuencia (s) de audio de la segunda entrada y las asigna a la salida. Parece que algunos suponen que el ejemplo genera una salida con una sola secuencia de audio y luego se confunden.
llogan