¿Cómo aplicar la pista de audio a un video mudo h264 / mp4 sin pérdidas?

4

Tengo un video MP4 / h.264 sin sonido. Con ffmpego similar, ¿cómo puedo aplicar una pista de audio a ese archivo MP4 sin degradar la calidad del video (es decir, sin recodificar la pista de video)?

Prefiero soluciones con software libre, disponibles para Win7, Ubuntu o FreeBSD.

poplitea
fuente

Respuestas:

10

El comando correcto de FFmpeg es:

ffmpeg -i video.mp4 -i audio.mp4 -map 0:0 -map 1:0 -c copy output.mp4

Esto proporcionará dos flujos de entrada, el video que ya tiene y el audio, por ejemplo, de un archivo MP4 con audio AAC, y los combinará usando las -mapopciones.

Aquí, el primer número 0:0es el archivo de entrada ( 0para el archivo de video y 1el archivo de audio), y el segundo número es el flujo de ese archivo ( 0ya que solo hay un flujo cada uno, video o audio). Las dos transmisiones se asignarán al archivo de salida, primero video, luego audio.

Los flujos de bits se copiarán y no se volverán a codificar utilizando la -c copyopción Puede observar esto en la salida de FFmpeg:

Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #1:0 -> #0:1 (copy)
slhck
fuente
¡Dulce! Especialmente bueno que haya explicado los argumentos y el uso de la asignación.
poplitea
44
También es posible que desee -shortestsi desea que solo sea la duración de la entrada más corta (útil si el audio es música que es más larga que el video).
mark4o
1

Puedes usar ffmpegpara lograr eso. Solo lo estoy haciendo desde la parte posterior de mi cerebro debilitado, pero tal vez algo como esto funcione:

ffmpeg -i movie-file.mp4 -i audio-file.mp3 -c:v copy -c:a copy output.mp4
Thornomad
fuente
Esto es lo que estoy buscando. Aunque he usado ffmpegantes, no puedo recordar sus argumentos. Supongo que tienen que ver con el códec / formato, pero lo que sí -v:c, -a:cy -anrepresentan?
poplitea
2
Las opciones deberían ser -c:vy -c:a, no -v:cy -a:c. Además, al -andeshabilitar la salida de audio, el archivo de resultados no volverá a tener audio. Si combina archivos, tendrá que asignarlos explícitamente a menos que FFmpeg pueda adivinar lo que quiere (por ejemplo, fusionar video AVI + audio WAV) / cc @poplitea
slhck
Ooops, tengo esos cambios en mi cerebro. Es bueno aprender algo nuevo sobre el mapeo. Gracias.
Thornomad
-1

Hay algunos editores de video de código abierto.

En Windows hay Windows Movie Maker o Microsoft Live Movie Maker. Sin embargo, no tengo experiencia con estos.

En Linux hay OpenShot, que es bastante fácil de usar.

Que hacer
fuente
El problema con los editores no lineales es que no le permitirán hacer una copia de flujo de bits con mucha facilidad. Sin embargo, si pudiera mostrar un ejemplo de cómo hacerlo, sería muy útil; no estoy seguro de que sea factible.
slhck
Importas tu archivo de video y tu archivo de audio. Luego, simplemente arrástrelo a la parte inferior (la línea de tiempo). Usted hace lo mismo con su archivo de audio. Luego exporta su proyecto, seleccionando la configuración que desee. puede obtener una vista previa antes de exportar. No estoy seguro si esto es lo que preguntas.
Para hacer el
Lo que quiero decir es que, cuando exportas el proyecto, la mayoría de los editores volverán a codificar las transmisiones de video y audio (según la configuración de exportación, por ejemplo, a algunos h.264 / AAC). Sin embargo, no copiarán el flujo de bits tal como está. Volver a codificar empeora la calidad, y el OP quería hacer una copia de flujo de bits. ¿Conoces algún editor que haga esto o Windows Movie Maker / OpenShot puede hacerlo?
slhck
Usé pitivi en Ubuntu que tenía una opción de salida "directa" para video y audio. Creo que esto simplemente copia el formato original porque la codificación terminó mucho más rápido que con la configuración normal. Dijo que Pitivi era muy inestable, al menos en aquel entonces (hace 1 año).
Para hacer el