我使用了如下命令:
ffmpeg -i video.avi -i audio.mp3 -vcodec codec -acodec codec output_video.avi -newaudio
在最新版本中用于向视频添加新音轨(不混合)。
但是我将 ffmpeg 更新到了最新版本(ffmpeg 版本 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:地图。-c:v copy
流式复制(mux) 视频。不会发生视频的重新编码。质量得以保留,过程快速。
-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:地图。-c:v copy
流式复制(mux) 视频。不会发生视频的重新编码。质量得以保留,过程快速。
-c:v copy
流-c copy
式复制视频和音频。-c:v copy
/ -c copy
。-shortest
选项将使输出与最短输入的持续时间相同。使用来自 的视频video.mkv
。混合来自video.mkv
并audio.m4a
使用 amerge 过滤器的音频:
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
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
如果您使用的是旧版本的 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());
}
}