gpt4 book ai didi

java - 从Java开始在OSX(AVFoundation)上的ffmpeg屏幕截图问题

转载 作者:行者123 更新时间:2023-12-04 22:50:15 25 4
gpt4 key购买 nike

我想在 OSX 上从 Java 启动屏幕捕获命令,如下所述:https://trac.ffmpeg.org/wiki/Capture/Desktop

它在终端上运行良好。但是当我使用 Java 的 Runtime.exec 启动完全相同的命令时我得到以下输出:

[AVFoundation input device @ 0x7f892f500400] Video device not found

'1:': Input/output error

假设我运行的命令存储为 String cmd = "ffmpeg -f avfoundation -i '1:' output.mkv" .我尝试过的事情:
  • 使用 ffmpeg -f avfoundation -list_devices true -i ""我断言1是屏幕的正确索引。我也通过 Runtime.exec 运行了该命令它给出的索引与我从终端运行它时的索引相同。
  • 是否使用 '1:' 没有区别或 "\"1:\"" .好吧,在后一种情况下,它说 "1:": Input/output error .两种变体都在终端中工作。
  • 我是否打电话也无所谓Runtime.getRuntime().exec(cmd) ,Runtime.getRuntime().exec(cmd.split(" "))(new ProcessBuilder(cmd.split(" "))).start() .原则上它启动 ffmpeg 并以上面给出的输出结束。
  • 我是否读出 ffmpeg 的输出似乎没有区别(通过 process.getErrorStream() )
  • 唯一可行的是将命令存储在文件中,例如在 run.sh然后调用例如Runtime.getRuntime().exec("run.sh") .应该可以在没有这种解决方法的情况下从 Java 正确执行此操作,对吧?我究竟做错了什么?
  • 在 Linux 上,使用例如ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 output.mp4使用 Runtime.exec 可以从命令行或 Java 正常工作并通过 ProcessBuilder .

  • 我没有在 Windows 上尝试过。在 OSX(Mojave 10.14.5)上,我在 Linux(Mint 18、64 位)Java 8 上使用 Java 12。在 Linux 上尝试使用 Java 12 会有些麻烦,我怀疑 Java 版本不是原因,因为 avfoundation vs x11grab 是更显着的区别。

    最佳答案

    只需使用:

    String cmd = "ffmpeg -f avfoundation -i 1 output.mkv"
    不要在 CMD 中添加任何引号。字符串!
    如果您想使用如下输入设备:
    -i "FaceTime HD Camera"
    使用 字符串[] 而不是 字符串 :
    string[] = {"ffmpeg -f avfoundation","-i","FaceTime HD Camera",
    "output.mkv"}

    关于java - 从Java开始在OSX(AVFoundation)上的ffmpeg屏幕截图问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57189535/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com