【问题标题】:How to insert images and text in video with ffmpeg - java如何使用 ffmpeg 在视频中插入图像和文本 - java
【发布时间】:2017-02-03 22:48:46
【问题描述】:
String[] code = new String[]{"ffmpeg", "-i","D:/ffmpeg/20170201_164127.mp4",

            "-i","D:/ffmpeg/cc.png", "-filter_complex",

            "[0:v][1:v]overlay=main_w-overlay_w-5:main_h-overlay_h-5",
            "drawtext=fontfile=/ffmpeg/Arial.ttf:text='TESTING'fontcolor=white@1.0:fontsize=70:x=10:y=H-th-10:box=1:boxcolor=black@0.5:boxborderw=5:x=10:y=H-th-10",

            "[out]","-map", "[out]", "-map", "2:0",
            "-acodec","mp3", "D:/ffmpeg/test7.mp4"};



            Process processDuration = new ProcessBuilder(code).redirectErrorStream(true).start();

            StringBuilder strBuild = new StringBuilder();

            try (BufferedReader processOutputReader = new BufferedReader(new InputStreamReader(processDuration.getInputStream(), Charset.defaultCharset()));) {

                String line;

                while ((line = processOutputReader.readLine()) != null) {

                    strBuild.append(line + System.lineSeparator());

                }

                processDuration.waitFor();

            }

            String outputJson = strBuild.toString().trim();

            System.out.println(outputJson);

            }

当我只使用图像时,代码是正确的。但是当我使用所有代码时,会发生这种情况:

[NULL @ 00000000006abe60] 找不到合适的输出格式 'drawtext=fontfile=/ffmpeg/Arial.ttf:text='TESTING'fontcolor=white@1.0:fontsize=70:x=10:y=H-th-10:box=1:boxcolor=black@0.5:boxborderw =5:x=10:y=H-th-10' drawtext=fontfile=/ffmpeg/Arial.ttf:text='TESTING'fontcolor=white@1.0:fontsize=70:x=10:y=H-th-10:box=1:boxcolor=black@0.5:boxborderw= 5:x=10:y=H-th-10: 无效参数

【问题讨论】:

  • 请添加更多信息:如果您尝试在 CMD 中运行该命令会发生什么?这个消息来自什么(抛出异常、标准输出流、错误流)?
  • 您告诉ffmpeg drawtext 过滤器是输出文件。我不是 Java 用户,但这可能是引用、逗号和/或换行问题。显示代码生成的实际ffmpeg 命令将显示问题所在。此外,对于 MP4,使用 aac 而不是 mp3:一些主流、糟糕的播放器无法解码这种组合。
  • 当我尝试使用 cmd 代码时,程序可以正常工作。但是当我尝试使用 java 时不起作用。

标签: java ffmpeg


【解决方案1】:

如果看起来,在字符串中的每个参数之后插入了一个空格,那么这就解释了错误。您没有将整个 filter_complex 括在引号中,因此在叠加层和绘图文本之间插入了一个空格。对于 FFmpeg,看起来您使用覆盖终止了 filter_complex,因此 drawtext 字符串表示输出。

因此,要么在一个字符串中提供整个 filter_complex 参数,包括最多 [out] 之间没有空格,要么在 [0:v] 之前添加一个左双引号,在 [out] 之后添加一个右引号。您可能必须转义这些引号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-02
    • 2017-10-12
    • 2012-01-01
    • 2016-04-26
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 2019-08-25
    相关资源
    最近更新 更多