我使用了如下命令:
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.avi -i audio.mp3 -vcodec codec -acodec codec output_video.avi -newaudio
在最新版本中用于向视频添加新的音轨(不混合)。
但是我将ffmpeg更新为最新版本(ffmpeg版本git-2012-06-16-809d71d),现在在此版本中该参数-newaudio
无效。
请告诉我如何使用可以将新音频添加到视频中(而不是混音)ffmpeg
。
Answers:
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
意识流。-map 1:a
–从输入1
(第二个输入为audio.m4a
)中选择a
udio流。从中获取视频video.webm
,然后使用合并过滤器合并来自video.webm
和的音频audio.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
-map 0:0 -map 1:0
代替代替-map 0 -map 1
对我有用。谢谢!
-shortest
选项的第一种解决方案对我来说效果更好。
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
没有什么对我有用(我认为这是因为我的输入的.mp4视频没有任何音频),所以我发现这对我有用:
ffmpeg -i input_video.mp4 -i balipraiavid.wav -map 0:v:0 -map 1:a:0 output.mp4
使用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");
啊