【问题标题】:merge png with mp4 ffmpeg missing audio将 png 与 mp4 ffmpeg 合并缺少音频
【发布时间】:2016-02-02 01:36:08
【问题描述】:

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

  1. 使用命令

    String cmd = "-y -i " + in.mp4 + " -i " + in.png + " -filter_complex [0:v][1:v]overlay=0:0[out] -preset 非常快-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 非常快-map [out] -map 0:a -codec:a copy " + out.mp4;

=> 有音频但某些 mp4 文件无法与 png 文件合并 日志:Stream map '0:a' 不匹配任何流。

我的命令在这里缺少什么?

【问题讨论】:

  • 你能给出 ffprobe 的完整结果吗?
  • 您应该显示每个命令的完整控制台输出/日志。否则无法提供答案。
  • 我在这里发现了问题。如果视频没有声音,我们不能为其放置地图 0:a(日志:流地图 '0:a' 不匹配任何流。)。现在我检查以检测此视频是否有音频以使过滤器正确。但它会花更多时间。

标签: audio ffmpeg overlay mp4


【解决方案1】:

首先,您需要使用 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() {

                    }
                });

【讨论】:

  • 感谢您的回答,此独奏会起作用,但我们必须使用 ffmpeg 运行两个命令。
【解决方案2】:

你可以用一个命令来做到这一点:

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 仅在流存在时映射流。

【讨论】:

    猜你喜欢
    • 2016-10-19
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 2015-10-27
    • 2016-06-13
    • 2018-11-25
    • 2018-03-09
    • 2021-12-27
    相关资源
    最近更新 更多