将 png 与 mp4 ffmpeg 合并缺少音频

merge png with mp4 ffmpeg missing audio

我使用ffmpeg来合并mp4和png,我使用两种方式:

  1. 使用命令

    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;

输出文件缺少音频:

  1. 使用命令:

    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”不匹配任何流。

我这里缺少什么命令?

首先,您需要使用ffmpeg查看mp4信息。然后你将 select 命令与 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() {

                    }
                });

您可以使用一条命令完成此操作:

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;

? 告诉 ffmpeg 只映射存在的流。