当前位置: 首页 > 知识库问答 >
问题:

如何用FFMPEG-Java在视频中插入图像和文本

孙震博
2023-03-14
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]无法为“drawttext=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'drawttext=fontfile=/ffmpeg/Arial.ttf:text='testing'

共有1个答案

令狐新翰
2023-03-14

如果在字符串中的每个参数后面插入了一个空格,那么这就解释了错误的原因。您没有用引号括起整个filter_complex,所以在overlay和drawtext之间插入了一个空格。对于FFmpeg来说,看起来像是用覆盖终止了filter_complex,因此drawtext字符串表示输出。

因此,要么在一个字符串中提供整个filter_complex参数,包括[out],中间没有空格,要么在[0:v]之前添加一个开头的双引号,在[out]之后添加一个结尾的引号。你可能得避开那些引文。

 类似资料:
  • 这行工作良好,但我想创建一个视频文件从图像在另一个文件夹。“我的文件夹”中的映像名称为: 我如何从不同的文件夹输入图像文件?示例: 我尝试了这个命令,但是只生成了第一个图像(img001.jpg)的视频。

  • 正在尝试从图像(1080p.png)音乐(320kbmp3)为youtube制作视频。 但转化是缓慢的。有什么想法吗,它是如何使优化的<代码>E:\U测试

  • 问题内容: 我现在可以编译ffmpeg并将其添加到项目创建的Android.mk文件的jni文件夹中,我想使用ffmpeg从存储在静态arraylist中的图像创建视频文件 我已经搜索了很多,但找不到任何教程,对此表示感谢。 问题答案: 我也有类似的需求,并且达到了相同的目的。您可以通过两种方式执行此操作。我想先分享一个简单的例子。 在Android内部创建一个临时文件夹。 将图像复制到新文件夹中

  • 因此,我尝试提取视频的每一帧,然后使用ffprobe查看视频中何时播放每一帧,然后使用这些提取的图像和ffprobe输出将视频缝合在一起。 现在,我有一个批处理文件: 首先,为图像创建一个目录。然后ffmpeg将视频的所有帧提取到单独的PNG文件中,这些文件被适当地编号。最后,ffprobe会看到视频中第一次显示每一帧的时间(即:第1帧以0秒的速度显示,但以60fps的速度显示,然后第2帧以0.0

  • 我在另一个论坛上问过这个问题,但从来没有运气。我在网上找到了下面的命令,它应该使用FFMPEG从图像创建一个视频(每个持续时间为5秒)。 FFMPEG-F image2-r 1/5-i img%03d.png-vcodec libx264 out.mp4 编辑:添加命令行输出

  • 我试图创建一个视频从jpeg图像使用ffmpeg。生成的视频应为x264或x265格式。 我有一个36张图片的目录。每个图像大小约为60像素。它们的名称如下: 第00000帧。jpg 框架00001。jps 框架00002。jpg 框架00035。jpg 我阅读了SO中的文档和几篇文章,并编写了一个批处理文件来调用ffmpeg,如下所示: 当我运行这个命令时,我从ffmpeg得到了这个输出,这很奇