我使用ffmpeg合并mp4和png,我用两种方式:
使用命令
String cmd =" -y -i" + in.mp4 +" -i" + in.png +" -filter_complex [0:v] [1:v] overlay = 0:0 [out] -preset veryfast -map [out] -map 1:0 -map 0:0 -codec:a copy" + out.mp4;
输出文件缺少音频:
使用命令:
String cmd =" -y -i" + in.mp4 +" -i" + in.png +" -filter_complex [0:v] [1:v] overlay = 0:0 [out] -preset veryfast -map [out] -map 0:a -codec:a copy" + out.mp4;
=>有音频但有些mp4文件无法与png文件合并 记录:流地图' 0:a'不匹配流。
这里缺少什么命令?
答案 0 :(得分:2)
首先,您需要使用 ffmpeg 来检查mp4
信息。然后,您将选择 0:a 或不是
ffmpeg.execute(("-i " + filepath).split(" "), new ExecuteBinaryResponseHandler() {
boolean hasAudio = false;
@Override
public void onProgress(String s) {
if (s.matches("^\\s+Stream.+Audio.+")) {
hasAudio = true;
}
}
@Override
public void onFinish() {
}
});
答案 1 :(得分:2)
您可以使用一个命令执行此操作:
redisClient.hget('users', function (err, str) {
if (err) return console.error(err);
var data = JSON.parse(str); // note this might throw an exception
});
String cmd = "-y -i " + in.mp4 + " -i " + in.png + " \
-filter_complex [0:v][1:v]overlay=0:0[out] -preset veryfast \
-map [out] -map 0:a? -codec:a copy " + out.mp4;
teels ffmpeg仅映射流(如果存在)。