Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Audio 如何使用ffmpeg向视频中添加新音频(而不是混音)?_Audio_Video_Ffmpeg - Fatal编程技术网

Audio 如何使用ffmpeg向视频中添加新音频(而不是混音)?

Audio 如何使用ffmpeg向视频中添加新音频(而不是混音)?,audio,video,ffmpeg,Audio,Video,Ffmpeg,我使用了如下命令: ffmpeg -i video.avi -i audio.mp3 -vcodec codec -acodec codec output_video.avi -newaudio 在最新版本中,用于向视频中添加新的音频曲目(非混音) 但是我将ffmpeg更新为最新版本(ffmpeg版本git-2012-06-16-809d71d),现在在这个版本中参数-newaudio不起作用 请告诉我如何使用ffmpeg替换音频将新音频添加到视频中(而不是混音) -map选项允许您手动选

我使用了如下命令:

ffmpeg -i video.avi -i audio.mp3 -vcodec codec -acodec codec output_video.avi -newaudio
在最新版本中,用于向视频中添加新的音频曲目(非混音)

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

请告诉我如何使用
ffmpeg

替换音频将新音频添加到视频中(而不是混音)

  • -map
    选项允许您手动选择流/轨迹。有关更多信息,请参阅
  • 此示例使用
    -c:v copy
    来(多路复用)视频。不会对视频进行重新编码。质量得到了保证,过程也很快。
    • 如果输入音频格式与输出格式兼容,则将视频和音频更改为流式复制
    • 如果要重新编码视频和音频,请删除
      -c:v copy
      /
      -c copy
  • -shortest
    选项将使输出与最短输入的持续时间相同
添加音频

  • -map
    选项允许您手动选择流/轨迹。有关更多信息,请参阅
  • 此示例使用
    -c:v copy
    来(多路复用)视频。不会对视频进行重新编码。质量得到了保证,过程也很快。
    • 如果输入音频格式与输出格式兼容,则将视频和音频更改为流式复制
    • 如果要重新编码视频和音频,请删除
      -c:v copy
      /
      -c copy
  • -shortest
    选项将使输出与最短输入的持续时间相同
将两个音频输入混合/组合为一个

使用
video.mkv
中的视频。使用以下命令混合来自
video.mkv
audio.m4a
的音频:

有关更多信息,请参阅

生成无声音频 您可以使用创建无声音频流。过滤器允许您选择所需的频道布局(单声道、立体声、5.1等)和采样率

ffmpeg -i video.mp4 -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 \
-c:v copy -shortest output.mp4
也看到
更换音频

  • -map
    选项允许您手动选择流/轨迹。有关更多信息,请参阅
  • 此示例使用
    -c:v copy
    来(多路复用)视频。不会对视频进行重新编码。质量得到了保证,过程也很快。
    • 如果输入音频格式与输出格式兼容,则将视频和音频更改为流式复制
    • 如果要重新编码视频和音频,请删除
      -c:v copy
      /
      -c copy
  • -shortest
    选项将使输出与最短输入的持续时间相同
添加音频

  • -map
    选项允许您手动选择流/轨迹。有关更多信息,请参阅
  • 此示例使用
    -c:v copy
    来(多路复用)视频。不会对视频进行重新编码。质量得到了保证,过程也很快。
    • 如果输入音频格式与输出格式兼容,则将视频和音频更改为流式复制
    • 如果要重新编码视频和音频,请删除
      -c:v copy
      /
      -c copy
  • -shortest
    选项将使输出与最短输入的持续时间相同
将两个音频输入混合/组合为一个

使用
video.mkv
中的视频。使用以下命令混合来自
video.mkv
audio.m4a
的音频:

有关更多信息,请参阅

生成无声音频 您可以使用创建无声音频流。过滤器允许您选择所需的频道布局(单声道、立体声、5.1等)和采样率

ffmpeg -i video.mp4 -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 \
-c:v copy -shortest output.mp4
也看到
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
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

如果您使用的是旧版本的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

如果您使用的是旧版本的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

代码使用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());
            }


        }

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


        }

如果输入视频有多个音轨,您需要再添加一个音轨,请使用以下命令:

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

-map 0
表示复制(包括)第一个输入文件中的所有流(
input\u video\u with_audio.avi
),
-map 1
表示包括第二个输入文件中的所有流(
new\u audio.ac3
).

如果输入视频有多个音频曲目,您需要再添加一个,请使用以下命令:

ffmpeg -i input_video_with_audio.avi -i new_audio.ac3 -map 0 -map 1 -codec copy output_video.avi
-map 0
表示从第一个输入文件中复制(包括)所有流(
使用音频.avi输入视频),而
-map 1
表示包括所有流