Wie fügt man mit ffmpeg ein neues Audio (nicht mischen) in ein Video ein?



2 Answers

mp3 musik zu wav

ffmpeg -i music.mp3 music.wav

Abschneiden, um Video anzupassen

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

Mischen Sie Musik und Video

ffmpeg -i musicshort.wav -i movie.avi final_video.avi
Question

Ich habe einen Befehl wie:

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

in der neuesten Version zum Hinzufügen neuer Audiospur zu Video (nicht mischen).

Aber ich habe den ffmpeg auf die neueste Version aktualisiert ( ffmpeg version git-2012-06-16-809d71d ) und jetzt in dieser Version funktioniert der Parameter -newaudio nicht.

Sag mir bitte, wie ich mit ffmpeg meinem Video neues Audio hinzufügen (nicht mischen) kann.




Keine dieser Lösungen funktionierte für mich. Mein ursprüngliches Audio wurde überschrieben, oder ich erhielt einen Fehler wie "fehlgeschlagener Speicherzuordnung" mit dem komplexeren Beispiel "amerge". Es scheint, ich brauchte -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



Code zum Hinzufügen von Audio zu Video mit ffmpeg.

Wenn die Audiolänge größer als die Videolänge ist, wird die Länge des Audios auf die Länge des Videos reduziert. Wenn Sie vollständige Audio in Video möchten, entfernen Sie -shortest von der 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());
            }


        }



Related