```
ffmpeg -i video.avi -i audio.mp3 -vcodec codec -acodec codec output_video.avi -newaudio
在最新版本中,可以向视频添加新的音轨(不是混合)。
但是,我已经将ffmpeg更新到最新版本(ffmpeg version git-2012-06-16-809d71d),现在在这个版本中,参数-newaudio
不起作用。
请告诉我如何使用ffmpeg
向我的视频添加新的音轨(不是混合)。
```
ffmpeg -i video.avi -i audio.mp3 -vcodec codec -acodec codec output_video.avi -newaudio
在最新版本中,可以向视频添加新的音轨(不是混合)。
但是,我已经将ffmpeg更新到最新版本(ffmpeg version git-2012-06-16-809d71d),现在在这个版本中,参数-newaudio
不起作用。
请告诉我如何使用ffmpeg
向我的视频添加新的音轨(不是混合)。
ffmpeg -i video.mp4 -i audio.wav -map 0:v -map 1:a -c:v copy -shortest output.mp4
-map
选项允许您手动选择流/轨道。有关更多信息,请参见FFmpeg Wiki: Map。-c:v copy
来stream copy(复用)视频。不会重新编码视频,保留质量,处理速度快。
-c:v copy
更改为-c copy
以流式复制视频和音频。-c:v copy
/ -c copy
。-shortest
选项将使输出与最短输入的持续时间相同。ffmpeg -i video.mkv -i audio.mp3 -map 0 -map 1:a -c:v copy -shortest output.mkv
-map
选项允许您手动选择流/轨道。有关更多信息,请参见FFmpeg Wiki:Map。-c:v copy
将视频进行stream copy(mux)。视频不会重新编码,质量得以保留,处理速度快。
-c:v copy
更改为-c copy
以流式复制视频和音频。-c:v copy
/ -c copy
。-shortest
选项将使输出与最短输入持续时间相同。video.mkv
的视频。使用amerge filter混合来自video.mkv
和audio.m4a
的音频:ffmpeg -i video.mkv -i audio.m4a -filter_complex "[0:a][1:a]amerge=inputs=2[a]" -map 0:v -map "[a]" -c:v copy -ac 2 -shortest output.mkv
查看FFmpeg Wiki:音频通道以获取更多信息。
您可以使用anullsrc过滤器生成无声音频流。该过滤器允许您选择所需的通道布局(单声道、立体声、5.1等)和采样率。
ffmpeg -i video.mp4 -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 \
-c:v copy -shortest output.mp4
-map
以更好地满足我的需求 - https://trac.ffmpeg.org/wiki/Map - Hang Chen将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 -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
)中的所有流(在本例中为一个流)。
对我来说,这些解决方案都不太适用。我的原始音频要么被覆盖了,要么使用更复杂的“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
我尝试了很多方法,但都没有成功(我认为是因为我的输入.mp4视频没有任何音频),所以我发现这个方法适用于我:
ffmpeg -i input_video.mp4 -i balipraiavid.wav -map 0:v:0 -map 1:a:0 output.mp4
以下是我实现OP所需的方法。
我的设置是有两个媒体流,一个视频(带有自己的音频通道)和一个音频。我没有进行转换,而是通过将其与额外的音频通道集成来重新流式传输实时源,而无需替换视频流中的旧音频。
以下是我使用的代码。
ffmpeg -i "Video stream with its own audio" -i "another audio stream" -map 0:v -map 0:a -map 1:a -shortest -f mpegts "multicast udp stream out put"
-map 0:v
是视频流,-map 0:a
是来自视频源的音频(请注意来自 -map 的 0),最后是 -map 1:a
,这是第二个源的音频流。ffmpeg -i "rtp://@231.0.0.208:1234" -i "rtp://@231.0.0.206:1234" -map 0:v -map 0:a -map 1:a -shortest -f mpegts "udp://@231.0.0.45:1234"
ffmpeg
将所有音频轨道合并到一个整个目录中:ffmpeg -i video.mp4 -i audio.mp3 -map 0:v -map 1:a -c:v copy -shortest output.mp4
如果你正在使用旧版本的FFMPEG,而且不能升级,那么可以尝试以下措施:
ffmpeg -i PATH/VIDEO_FILE_NAME.mp4 -i PATH/AUDIO_FILE_NAME.mp3 -vcodec copy -shortest DESTINATION_PATH/NEW_VIDEO_FILE_NAME.mp4
被标记的答案没有设置音轨语言。
以下是一个示例,它将默认音轨(视频的唯一音频通道)设置为德语,并将新增的音轨设置为英语:
ffmpeg -i "/dir/video.mkv" -i "/dir2/audio.ac3" -map 0 -map 1:a -c:v copy -shortest -metadata:s:a:0 language=ger -metadata:s:a:0 title="GER" -metadata:s:a:1 language=eng -metadata:s:a:1 title="ENG" "/dir/output.mkv"
(s:a:0
从0开始计数,根据需要进行调整。如果音轨语言已经指定,则不需要设置,只需要为您添加的音轨设置即可。)
使用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());
}
}
Environment.getExternalStorageDirectory().getAbsolutePath()+"/videoaudiomerger/"+"Vid"+"output"+i1+".mp4"
是什么? - Kiquenet
audio.mp3
中的音频流应用于输出文件(2)audio.mp3
和video.avi
中的2个音频流共存于输出文件中,然后让应用程序在它们之间切换。 - Ham