2012-08-02 25 views
83

que utiliza un comando como:Cómo agregar un nuevo audio (sin mezclar) en un video usando ffmpeg?

ffmpeg -i video.avi -i audio.mp3 -vcodec codec -acodec codec output_video.avi -newaudio 

en la versión más reciente para añadir nueva pista de audio para vídeo (no mezcla).

Pero he actualizado el ffmpeg para la nueva versión (versión ffmpeg git-2012-06-16-809d71d) y ahora en esta versión el parámetro -newaudio no funciona.

Dime cómo puedo agregar audio nuevo a mi video (no mezclar) usando ffmpeg.

+0

@Kiquenet Sí, tienes razón. Y la respuesta ya está dada. Solo lee este hilo. Esta pregunta tiene 5 años. – Vetalll

Respuesta

178

añadir audio a vídeo: stream copy

ffmpeg -i video.avi -i audio.mp3 -codec copy -shortest output.avi 
  • La omisión de la opción -map usará el valor por defecto stream selection. Esto funcionará si su entrada de video no tiene audio.
  • Este ejemplo usa -codec copy a stream copy (sin recodificación, la calidad se conserva y es rápida).
  • La opción -shortest hará que output.avi tenga la misma duración que la entrada más corta.

añadir audio a vídeo: volver a codificar

Si la salida no le gustan los formatos originales, o si desea cambiar los formatos se pueden especificar los codificadores:

ffmpeg -i video.avi -i audio.mp3 -c:v libx264 -c:a libvorbis -shortest output.mkv 

Para elija manualmente flujos específicos

A veces, la selección de transmisión predeterminada no le dará el resultado que desea. En este ejemplo, video.mp4 tiene video y audio, y audio.m4a solo tiene audio. Utilice -map para elegir el vídeo de video.mp4 y audio de audio.m4a:

ffmpeg -i video.mp4 -i audio.m4a -map 0:v -map 1:a -c copy -shortest output.mp4 
  • -map 0:v - A partir de la entrada 0 (la primera entrada, que es video.mp4) elegir la corriente (s) v ideo.
  • -map 1:a - De la entrada 1 (la segunda entrada, que es audio.m4a) elija el a udio stream (s).

mezcla/combinación de dos entradas de audio en un

vídeo Tomar de las video.webm, y utilizar el amerge filter combinar el audio de video.webm y audio.oga:

ffmpeg -i video.webm -i audio.oga -filter_complex \ 
"[0:a][1:a]amerge=inputs=2[a]" \ 
-map 0:v -map "[a]" -c:v copy -c:a libvorbis -ac 2 -shortest out.webm 

genera audio silenciosa

Puede usar el anullsrc filter para hacer una transmisión de audio silenciosa. El filtro le permite elegir el diseño de canal deseado (mono, estéreo, 5.1, etc.) y la frecuencia de muestreo.

ffmpeg -i video.mp4 -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 \ 
-c:v copy -shortest output.mp4 

Véase también

+5

Esto no funcionó para mí al principio, pero el uso de '-map 0: 0 -map 1: 0' en lugar de' -map 0 -map 1' me convenció. ¡Gracias! – yonix

+0

Esto inserta un marco vacío al principio. –

+0

, he intentado con este comando, pero pierdo el audio del video. mi formato de video es mp4 – Allan

15

música mp3 a wav

ffmpeg -i music.mp3 music.wav 

truncado para ajustarse vídeo

ffmpeg -i music.wav -ss 0 -t 37 musicshort.wav 

mezcla música y de vídeo

ffmpeg -i musicshort.wav -i movie.avi final_video.avi 
+2

como recuerdo, la última variante reemplazará el audio anterior por nuevo. – Vetalll

+0

sí, será correcto – jwilson

+0

¿Existe alguna opción para fusionar audio nuevo con audio antiguo? –

0

Si está utilizando una versión antigua de FFMPEG y no puedes actualizar puede hacer lo siguiente:

ffmpeg -i PATH/VIDEO_FILE_NAME.mp4 -i PATH/AUDIO_FILE_NAME.mp3 -vcodec copy -shortest DESTINATION_PATH/NEW_VIDEO_FILE_NAME.mp4 

Observe que utilicé -codecode

-1

Código para agregar audio a video usando ffmpeg.

Si la duración del audio es mayor que la duración del video, reducirá el audio a la duración del video. Si quieres audio completo en video, quita -distinto del cmd.

String[] cmd = new String[]{"-i", selectedVideoPath,"-i",audiopath,"-map","1:a","-map","0:v","-codec","copy", ,outputFile.getPath()};

private void execFFmpegBinaryShortest(final String[] command) { 



      final File outputFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/videoaudiomerger/"+"Vid"+"output"+i1+".mp4"); 




      String[] cmd = new String[]{"-i", selectedVideoPath,"-i",audiopath,"-map","1:a","-map","0:v","-codec","copy","-shortest",outputFile.getPath()}; 


      try { 

       ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() { 
        @Override 
        public void onFailure(String s) { 
         System.out.println("on failure----"+s); 
        } 

        @Override 
        public void onSuccess(String s) { 
         System.out.println("on success-----"+s); 
        } 

        @Override 
        public void onProgress(String s) { 
         //Log.d(TAG, "Started command : ffmpeg "+command); 
         System.out.println("Started---"+s); 

        } 

        @Override 
        public void onStart() { 


         //Log.d(TAG, "Started command : ffmpeg " + command); 
         System.out.println("Start----"); 

        } 

        @Override 
        public void onFinish() { 
         System.out.println("Finish-----"); 


        } 
       }); 
      } catch (FFmpegCommandAlreadyRunningException e) { 
       // do nothing for now 
       System.out.println("exceptio :::"+e.getMessage()); 
      } 


     } 
+0

¿Qué es 'Environment.getExternalStorageDirectory(). GetAbsolutePath() +"/videoaudiomerger/"+" Vid "+" output "+ i1 +". Mp4 ");'? – Kiquenet

3

Si el vídeo de entrada tiene múltiples pistas de audio y hay que añadir uno más a continuación, utilizar el siguiente comando:

ffmpeg -i input_video_with_audio.avi -i new_audio.ac3 -map 0 -map 1 -codec copy output_video.avi 

-map 0 significa copiar (incluir) todos las transmisiones desde el primer archivo de entrada (input_video_with_audio.avi) y -map 1 significan incluir todas las transmisiones (en este caso una) desde el segundo archivo de entrada ()).

+0

Creo que esta respuesta debe ser la mejor. –

0

Ninguna de estas soluciones funcionó para mí. Se sobrescribió mi audio original o recibí un error como "error al mapear la memoria" con el ejemplo más complejo de 'amerge'. Parece que necesitaba -filter_complex amix.

ffmpeg -i videowithaudioyouwanttokeep.mp4 -i audiotooverlay.mp3 -vcodec copy -filter_complex amix -map 0:v -map 0:a -map 1:a -shortest -b:a 144k out.mkv 
Cuestiones relacionadas