2012-08-02 9 views
83

użyłem komendy jak:Jak dodać nowy dźwięk (nie mieszając) do wideo za pomocą ffmpeg?

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

w wersji najnowszej dodawania nowej ścieżki dźwiękowej do filmu (nie mieszać).

Ale zaktualizowała ffmpeg do najnowszej wersji (wersja ffmpeg git-2012-06-16-809d71d) i teraz w tej wersji parametr -newaudio nie działa.

Powiedz, proszę, jak mogę dodać nowy dźwięk do mojego wideo (nie mieszać) za pomocą ffmpeg.

+0

@Kiquenet Tak, masz rację. Odpowiedź już jest udzielona. Przeczytaj ten wątek. To pytanie ma 5 lat. – Vetalll

Odpowiedz

178

Dodaj dźwięk do filmu: stream copy

ffmpeg -i video.avi -i audio.mp3 -codec copy -shortest output.avi 
  • Pominięcie opcję -map użyje domyślnej stream selection. To zadziała, jeśli twoje wejście wideo nie ma dźwięku.
  • W tym przykładzie użyto -codec copy do stream copy (brak ponownego kodowania, jakość jest zachowywana i jest szybka).
  • Opcja -shortest spowoduje, że output.avi będzie trwać tyle samo, co najkrótsze wejście.

Dodaj dźwięk do filmu: ponowne kodowanie

Jeśli wyjście nie lubi oryginalne formaty, lub jeśli chcesz zmienić formaty można określić kodery:

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

Aby ręcznie wybierz określone strumienie

Czasami domyślny wybór strumienia nie daje pożądanego rezultatu. W tym przykładzie video.mp4 ma wideo i audio, a audio.m4a ma tylko dźwięk. Użyj -map wybrać film ze video.mp4 i audio z audio.m4a:

ffmpeg -i video.mp4 -i audio.m4a -map 0:v -map 1:a -c copy -shortest output.mp4 
  • -map 0:v - Od wejścia 0 (pierwsze wejście, które jest video.mp4) wyboru strumienia (y) v Ideo.
  • -map 1:a - Z wejścia 1 (drugie wejście, którym jest audio.m4a) wybierz strumień (strumienie) udio z a.

Mieszanie/połączenie dwóch wejść audio w jeden

Zabierz wideo z video.webm i użyć amerge filter połączyć audio z video.webm i 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 

Generowanie cichy dźwięk

Możesz użyć anullsrc filter, aby utworzyć cichy strumień audio. Filtr pozwala wybrać pożądany układ kanałów (mono, stereo, 5.1, itp.) I częstotliwość próbkowania.

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

zobaczyć również

+5

To na początku mi nie pasowało, ale użycie '-map 0: 0 -map 1: 0' zamiast' -map 0 -map 1' zrobiło dla mnie trik. Dzięki! – yonix

+0

Powoduje wstawienie pustej ramki na początku. –

+0

Mam spróbować tego polecenia, ale straciłem audio wideo. mój format wideo to mp4 – Allan

15

muzyka mp3 do wav

ffmpeg -i music.mp3 music.wav 

truncate dopasować filmowi

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

mix muzyki i wideo

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

jak pamiętam, ostatni wariant zastąpi stary dźwięk nowym. – Vetalll

+0

Tak, to prawda, masz rację – jwilson

+0

Czy jest jakaś opcja łączenia nowego audio ze starym dźwiękiem? –

0

Jeśli używasz starej wersji FFMPEG i nie można uaktualnić można wykonać następujące czynności:

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

Zauważ, że użyłem -vcodec

-1

Kod do dodawania dźwięku do wideo za pomocą ffmpeg.

Jeśli długość dźwięku jest większa niż długość wideo, zostanie obcięta długość dźwięku na wideo. Jeśli chcesz, aby cały dźwięk w filmie wideo był usuwany, najkrótszy z 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

Co to jest "Environment.getExternalStorageDirectory(). GetAbsolutePath() +"/videoaudiomerger/"+" Vid "+" wyjście "+ i1 +". Mp4 ");'? – Kiquenet

3

Jeśli film wejściowy ma wiele ścieżek audio i trzeba dodać jeszcze jeden następnie użyć następującego polecenia:

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

-map 0 oznacza skopiować (obejmuje) wszystko strumienie z pierwszego pliku wejściowego (input_video_with_audio.avi) i -map 1 oznaczają dołączenie wszystkich strumieni (w tym przypadku jednego) z drugiego pliku wejściowego (new_audio.ac3).

+0

Uważam, że ta odpowiedź musi być najlepszą odpowiedzią. –

0

Żadne z tych rozwiązań nie sprawdziło się u mnie. Mój oryginalny dźwięk został nadpisany lub pojawił się błąd "nie udało się odwzorować pamięci" z bardziej złożonym przykładem "amerge". Wydaje mi się, że potrzebowałem -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 
Powiązane problemy