如何使用的ffmpeg添加一个新的音频(不混合)到视频?(How to add a new audi

2019-06-17 15:07发布

我用如下命令:

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

在添加新的音轨视频最新版本(不混合)。

但是,我更新的ffmpeg的到最新版本( 版本的ffmpeg的git-2012-06-16-809d71d),现在在这个版本的参数-newaudio不起作用。

请告诉我如何添加新的音频到我的视频使用(不混合) ffmpeg

Answer 1:

添加音频视频:流拷贝

ffmpeg -i video.avi -i audio.mp3 -codec copy -shortest output.avi
  • 省略-map选项将使用默认的流选择 。 如果您的视频输入没有任何音频这将工作。
  • 此示例使用-codec copy到流拷贝 (再编码没有;质量被保留,这是快)。
  • -shortest选项将使output.avi相同的周期最短的输入。

添加音频视频:重新编码

如果您的输出不喜欢原来的格式,或者如果你想改变格式,你可以指定编码器:

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

要手动选择特定的数据流

有时,默认流选择不会给你你想要的结果。 在这个例子中video.mp4具有视频音频,以及audio.m4a只有音频。 使用-map选择从视频video.mp4从音频audio.m4a

ffmpeg -i video.mp4 -i audio.m4a -map 0:v -map 1:a -c copy -shortest output.mp4
  • -map 0:v -从输入0 (第一输入,这是video.mp4 )选择v IDEO流(多个)。
  • -map 1:a -从输入1 (第二输入端,这是audio.m4a )选择a UDIO流(多个)。

混合/合并两个音频输入到一个

以从视频video.webm ,并使用amerge过滤器将音频从结合video.webmaudio.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

生成静默音频

您可以使用anullsrc过滤器做一个沉默的音频流。 该过滤器,可以选择所需的信道布局(单声道,立体声,5.1等)和采样率。

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

另请参阅

  • 结合两个音频流进一个
  • FFmpeg的维基:音频频道操控
  • 从另一个视频FFmpeg的多路视频和音频


Answer 2:

MP3音乐WAV

ffmpeg -i music.mp3 music.wav

截断,以适应视频

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

混合音乐和视频

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


Answer 3:

如果输入的视频有多个音轨,你需要添加更多的则使用下面的命令:

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

-map 0意味着复制(包括)从第一输入文件中的所有流( input_video_with_audio.avi )和-map 1手段包括(在这种情况下的一个)从第二输入文件(所有流new_audio.ac3 )。



Answer 4:

这些解决方案中没有一个很适合我。 我原来的音频中被改写,或者我得到了一个错误,如“未能映射内存”与更复杂的“amerge的榜样。 看来我需要-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


Answer 5:

如果您使用的是旧版本的ffmpeg,你不能升级,你可以做到以下几点:

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

请注意,我用-vcodec



Answer 6:

代码使用的ffmpeg添加音频视频。

如果音频长度大于视频长度时将下调音频视频的长度。 如果你想在视频全程录音从CMD删除-shortest。

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());
            }


        }


文章来源: How to add a new audio (not mixing) into a video using ffmpeg?