FFMPEG agrega pista de audio mientras convierte formatos de video

FFMPEG agrega pista de audio mientras convierte formatos de video

Fondo

Necesito convertir archivos AVI a H264 (MP4). Lo estoy haciendo exitosamente con lo siguiente:

-i mymovie.avi -c:v libx264 -crf 19 -preset slow -c:a libfaac -pix_fmt yuv420p -f mp4 -b:a 192k -y -an output.mp4

Estoy llamando al comando a través de aplicaciones C# .Net Winforms, aunque sospecho que esto tendrá poco impacto en la respuesta.

La pregunta

¿Cómo agrego una pista de audio? Necesito agregar uno, ya que necesito poder subir los videos a Instagram, que parece rechazar archivos sin pista de audio (para mi molestia). En realidad no necesito una pista de audio que sea muy larga. Mis pensamientos fueron un par de segundos de "silencio" en formato MP3.

Creo que necesitaré audio AAC como salida.

Para que conste, también me doy cuenta de que el -ancomando no proporcionará audio y lo he eliminado en mis intentos posteriores.

Intentos hasta ahora

He deducido que necesitaré usar el -shortestcomando ya que el audio será más corto que el video. En realidad, agregaré un MP3 en blanco (o similar) para que, mientras codifico, obtenga una secuencia de audio incrustada en el video.

También intenté usar el -mapcomando pero sin éxito.

Respuesta1

Ok, aquí está el comando que tengo funcionando. Descubrí que no tenía libfaacffmpeg en mi compilación, así que cambié. Tampoco necesitaba las -mapopciones ya que FFMPEG puede manejar bien 2 entradas sin configuración adicional.

-i test.avi -i music.mp3 -c:v libx264 -crf 19 -preset slow -c:a libvo_aacenc -pix_fmt yuv420p -f mp4 -b:a 192k -y -shortest output.mp4

Las diferencias entre mi original y lo que funciona son:

  • libvo_aacenc reemplazalibfaac
  • -shortestSe agrega para lidiar con audio más corto que el video.
  • -iSe utiliza para proporcionar la entrada de audio.

Actualizar

El comando después de una gran aportación en los comentarios ahora es

-i test.avi -i music.mp3 -c:v libx264 -crf 19 -preset slow -c:a aac -strict experimental -pix_fmt yuv420p -f mp4 -b:a 192k -y -shortest output.mp4

Respuesta2

Puede generar una secuencia de audio silenciosa con elaevalsrcfuente de audio:

ffmpeg -y -i test.avi -f lavfi -i aevalsrc=0 -c:v libx264 -crf 19 -preset slow \
-pix_fmt yuv420p -shortest output.mp4

Esto es más fácil que utilizar un archivo de audio en blanco como entrada.

información relacionada