gpt4 book ai didi

java - 如何使用 ProcessBuilder 在 Java、MacOS 中运行 ffmpeg 命令

转载 作者:行者123 更新时间:2023-12-04 23:33:35 25 4
gpt4 key购买 nike

我正在用 Java 编写一个程序,它使用 ffmpeg 将视频“剪辑”成几部分,然后将它们重新缝合在一起。我在 Windows 中的一切工作相对顺利,但我无法让 ffmpeg 在 Mac 或 Linux 中工作。不过我现在专注于mac。我认为这可能是权限问题,但是当我使用 sudo 运行它时,我收到一条错误消息(输入密码后:

sudo: ffmpeg: command not found
当我在没有 sudo 的情况下运行它时,我得到:
java.io.IOException: Cannot run program "ffmpeg": error=2, No such file or directory
我认为这可能是因为 Mac 机器上的 ffmpeg 包是使用自制软件下载的,而 ffmpeg 存储在/usr/local/Cellar/ffmpeg 而不是默认文件夹中,无论它可能在哪里。但这可能不是问题,因为我删除了 ffmpeg 并用自制软件重新下载了它。在我的第一次测试中,它也可能位于其 defaulter 文件夹中。弄清楚这一点会很棒。我的大多数家人都使用 Mac(不是我),我真的很想与他们分享我的工作。这就是我选择用 Java 编写代码的原因。哦,我确实尝试使用命令中的二进制目录。这是代码:
    //snips out all the clips from the main video
public void snip() throws IOException, InterruptedException {

for(int i = 0; i < snippets.size(); i++) {
//ffmpeg -i 20sec.mp4 -ss 0:0:1 -to 0:0:5 -c copy foobar.mp4
String newFile = "foobar" + String.valueOf(i) + ".mp4";

//THIS WORKS
if(OS.isWindows()) {
ProcessBuilder processBuilder = new ProcessBuilder("ffmpeg", "-i", videoName, "-ss",
snippets.get(i).getStartTime(), "-to", snippets.get(i).getEndTime(), newFile);

Process process = processBuilder.inheritIO().start();
process.waitFor();
System.out.println("Win Snip " + i + "\n");
}

else if (OS.isMac()) {
//FFMPEG LOCATION: /usr/local/Cellar/ffmpeg
//THE ERROR: sudo: ffmpeg: command not found
//ERROR W/OUT SUDO: java.io.IOException: Cannot run program "ffmpeg": error=2, No such file or directory
ProcessBuilder processBuilder = new ProcessBuilder("sudo", "-S", "ffmpeg", "-f", videoName, "-ss",
snippets.get(i).getStartTime(), "-to", snippets.get(i).getEndTime(), newFile);

Process process = processBuilder.inheritIO().start();
process.waitFor();
System.out.println("Mac Snip " + i + "\n");
}

else if (OS.isUnix()) {
System.out.println("Your operating system is not supported");
//TODO
//need to figure out if deb/red hat/whatever are different
}

else if (OS.isSolaris()) {
System.out.println("Your operating system is not supported yet");
//TODO probably won't do
}

else {
System.out.println("Your operating system is not supported");
}
//add to the list of files to be concat later
filesToStitch.add(newFile);
filesToDelete.add(newFile);

}
//System.out.println(stitchFiles);
}

最佳答案

由于 Mac OS 是基于 UNIX 的,如果位置不在配置的路径(即 $PATH 环境变量)中,则需要在可执行文件名称之前放置“./”。将“ffmpeg”更改为“./ffmpeg”应该可以工作(假设它确实位于工作目录中 - 如果需要,您还可以通过调用 ProcessBuilder 上的 directory() 来更改工作目录)。

关于java - 如何使用 ProcessBuilder 在 Java、MacOS 中运行 ffmpeg 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63236366/

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